@sanity/color-input 6.0.16 → 6.0.18

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.
@@ -1,5 +1,5 @@
1
1
  import { set, setIfMissing, unset } from "sanity";
2
- import { Component, PureComponent, startTransition, useOptimistic, useRef } from "react";
2
+ import { Component, createRef, startTransition, useOptimistic, useRef } from "react";
3
3
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { AddIcon } from "@sanity/icons/Add";
@@ -125,26 +125,23 @@ function calculateChange$2(e, hsl, direction, initialA, container) {
125
125
  * and the unused custom `pointer` slot dropped.
126
126
  */
127
127
  var Alpha = class extends Component {
128
- container = null;
128
+ containerRef = createRef();
129
+ abortControllerRef = createRef();
129
130
  componentWillUnmount() {
130
- this.unbindEventListeners();
131
+ this.abortControllerRef.current?.abort();
131
132
  }
132
- setContainerRef = (node) => {
133
- this.container = node;
134
- };
135
133
  handleChange = (event) => {
136
- if (!this.container) return;
137
- let change = calculateChange$2(event, this.props.hsl, this.props.direction, this.props.a, this.container);
134
+ if (!this.containerRef.current) return;
135
+ let change = calculateChange$2(event, this.props.hsl, this.props.direction, this.props.a, this.containerRef.current);
138
136
  change && typeof this.props.onChange == "function" && this.props.onChange(change);
139
137
  };
140
138
  handleMouseDown = (event) => {
141
- this.handleChange(event.nativeEvent), window.addEventListener("mousemove", this.handleChange), window.addEventListener("mouseup", this.handleMouseUp);
139
+ this.handleChange(event.nativeEvent), this.abortControllerRef.current && this.abortControllerRef.current.abort(), this.abortControllerRef.current = new AbortController();
140
+ let { signal } = this.abortControllerRef.current;
141
+ window.addEventListener("mousemove", this.handleChange, { signal }), window.addEventListener("mouseup", this.handleMouseUp, { signal });
142
142
  };
143
143
  handleMouseUp = () => {
144
- this.unbindEventListeners();
145
- };
146
- unbindEventListeners = () => {
147
- window.removeEventListener("mousemove", this.handleChange), window.removeEventListener("mouseup", this.handleMouseUp);
144
+ this.abortControllerRef.current?.abort();
148
145
  };
149
146
  render() {
150
147
  let { rgb, direction, radius, shadow, renderers } = this.props, alphaValue = rgb.a ?? 1, gradient = direction === "vertical" ? `linear-gradient(to bottom, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)` : `linear-gradient(to right, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`, pointerStyle = direction === "vertical" ? {
@@ -184,7 +181,7 @@ var Alpha = class extends Component {
184
181
  height: "100%",
185
182
  margin: "0 3px"
186
183
  },
187
- ref: this.setContainerRef,
184
+ ref: this.containerRef,
188
185
  onMouseDown: this.handleMouseDown,
189
186
  onTouchMove: this.handleChange,
190
187
  onTouchStart: this.handleChange,
@@ -206,98 +203,6 @@ var Alpha = class extends Component {
206
203
  }
207
204
  };
208
205
  /**
209
- * Color conversion and validation helpers built on `tinycolor2`.
210
- *
211
- * Forked from
212
- * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/color.js | react-color's color helpers}
213
- * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.
214
- */
215
- const VALIDATION_KEYS = /* @__PURE__ */ new Set([
216
- "r",
217
- "g",
218
- "b",
219
- "a",
220
- "h",
221
- "s",
222
- "l",
223
- "v"
224
- ]), PERCENT_PATTERN = /^\d+%$/;
225
- function simpleCheckForValidColor(data) {
226
- if (typeof data == "string") return data;
227
- let checked = 0, passed = 0;
228
- for (let [key, value] of Object.entries(data)) !VALIDATION_KEYS.has(key) || !value || (checked += 1, Number.isNaN(Number(value)) || (passed += 1), (key === "s" || key === "l") && PERCENT_PATTERN.test(String(value)) && (passed += 1));
229
- return checked === passed && data;
230
- }
231
- function toState(data, oldHue) {
232
- let instance = typeof data == "string" ? tinycolor(data) : "hex" in data ? tinycolor(data.hex) : tinycolor(data), hsl = instance.toHsl(), hsv = instance.toHsv(), rgb = instance.toRgb(), hex = instance.toHex();
233
- hsl.s === 0 && (hsl.h = oldHue ?? 0, hsv.h = oldHue ?? 0);
234
- let transparent = hex === "000000" && rgb.a === 0, incomingHue = typeof data == "string" ? void 0 : "h" in data ? data.h : void 0, source = typeof data == "string" ? void 0 : data.source;
235
- return {
236
- hsl,
237
- hex: transparent ? "transparent" : `#${hex}`,
238
- rgb,
239
- hsv,
240
- oldHue: incomingHue || oldHue || hsl.h,
241
- source: source ?? ""
242
- };
243
- }
244
- function isValidHex(hex) {
245
- if (hex === "transparent") return !0;
246
- let lh = +(hex.charAt(0) === "#");
247
- return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid();
248
- }
249
- /**
250
- * `CustomPicker` higher-order component: manages color state and injects the
251
- * normalized color (`hsl`/`hsv`/`rgb`/`hex`) plus an `onChange` handler into the
252
- * wrapped picker.
253
- *
254
- * Forked from
255
- * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/ColorWrap.js | react-color's ColorWrap}
256
- * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.
257
- *
258
- * @remarks
259
- * Kept as a class component for this round (function-component conversion is a
260
- * follow-up PR). `prop-types` and the unused `lodash` `debounce` of
261
- * `onChangeComplete` have been removed.
262
- */
263
- const DEFAULT_COLOR$1 = {
264
- h: 250,
265
- s: .5,
266
- l: .2,
267
- a: 1
268
- };
269
- function CustomPicker(Picker) {
270
- class ColorPicker extends PureComponent {
271
- static getDerivedStateFromProps(nextProps, state) {
272
- return { ...toState(nextProps.color ?? DEFAULT_COLOR$1, state.oldHue) };
273
- }
274
- constructor(props) {
275
- super(props), this.state = { ...toState(props.color ?? DEFAULT_COLOR$1, 0) };
276
- }
277
- handleChange = (data) => {
278
- if (!simpleCheckForValidColor(data)) return;
279
- let colors = toState(data, (typeof data == "string" ? void 0 : "h" in data ? data.h : void 0) || this.state.oldHue);
280
- this.setState(colors), this.props.onChange?.(colors);
281
- };
282
- render() {
283
- let injected = {
284
- hsl: this.state.hsl,
285
- hsv: this.state.hsv,
286
- rgb: this.state.rgb,
287
- hex: this.state.hex,
288
- oldHue: this.state.oldHue,
289
- source: this.state.source,
290
- onChange: this.handleChange
291
- };
292
- return /* @__PURE__ */ jsx(Picker, {
293
- ...this.props,
294
- ...injected
295
- });
296
- }
297
- }
298
- return ColorPicker;
299
- }
300
- /**
301
206
  * Labeled text input with arrow-key stepping and drag-to-change support.
302
207
  *
303
208
  * Forked from
@@ -314,7 +219,8 @@ const getNumberValue = (value) => Number(String(value).replace(/%/g, ""));
314
219
  let idCounter = 1;
315
220
  var EditableInput = class extends Component {
316
221
  inputId;
317
- input = null;
222
+ inputRef = createRef();
223
+ abortControllerRef = createRef();
318
224
  constructor(props) {
319
225
  super(props);
320
226
  let initialValue = String(props.value ?? "").toUpperCase();
@@ -325,7 +231,7 @@ var EditableInput = class extends Component {
325
231
  }
326
232
  componentDidUpdate(prevProps, prevState) {
327
233
  if (this.props.value !== this.state.value && (prevProps.value !== this.props.value || prevState.value !== this.state.value)) {
328
- let nextValue = String(this.props.value ?? "").toUpperCase(), isFocused = this.input === document.activeElement;
234
+ let nextValue = String(this.props.value ?? "").toUpperCase(), isFocused = this.inputRef.current === document.activeElement;
329
235
  this.setState(isFocused ? { blurValue: nextValue } : {
330
236
  value: nextValue,
331
237
  blurValue: this.state.blurValue ? "" : nextValue
@@ -333,11 +239,8 @@ var EditableInput = class extends Component {
333
239
  }
334
240
  }
335
241
  componentWillUnmount() {
336
- this.unbindEventListeners();
242
+ this.abortControllerRef.current?.abort();
337
243
  }
338
- setInputRef = (input) => {
339
- this.input = input;
340
- };
341
244
  getValueObjectWithLabel = (value) => ({ [this.props.label]: String(value) });
342
245
  getArrowOffset = () => this.props.arrowOffset ?? 1;
343
246
  setUpdatedValue = (value, event) => {
@@ -365,13 +268,13 @@ var EditableInput = class extends Component {
365
268
  dragMax !== void 0 && newValue >= 0 && newValue <= dragMax && this.props.onChange?.(this.getValueObjectWithLabel(newValue), event);
366
269
  };
367
270
  handleMouseDown = (event) => {
368
- this.props.dragLabel && (event.preventDefault(), this.handleDrag(event.nativeEvent), window.addEventListener("mousemove", this.handleDrag), window.addEventListener("mouseup", this.handleMouseUp));
271
+ if (!this.props.dragLabel) return;
272
+ event.preventDefault(), this.handleDrag(event.nativeEvent), this.abortControllerRef.current && this.abortControllerRef.current.abort(), this.abortControllerRef.current = new AbortController();
273
+ let { signal } = this.abortControllerRef.current;
274
+ window.addEventListener("mousemove", this.handleDrag, { signal }), window.addEventListener("mouseup", this.handleMouseUp, { signal });
369
275
  };
370
276
  handleMouseUp = () => {
371
- this.unbindEventListeners();
372
- };
373
- unbindEventListeners = () => {
374
- window.removeEventListener("mousemove", this.handleDrag), window.removeEventListener("mouseup", this.handleMouseUp);
277
+ this.abortControllerRef.current?.abort();
375
278
  };
376
279
  render() {
377
280
  let style = this.props.style ?? {}, wrapStyle = {
@@ -386,7 +289,7 @@ var EditableInput = class extends Component {
386
289
  children: [/* @__PURE__ */ jsx("input", {
387
290
  id: this.inputId,
388
291
  style: inputStyle,
389
- ref: this.setInputRef,
292
+ ref: this.inputRef,
390
293
  value: this.state.value,
391
294
  onKeyDown: this.handleKeyDown,
392
295
  onChange: this.handleChange,
@@ -402,6 +305,47 @@ var EditableInput = class extends Component {
402
305
  });
403
306
  }
404
307
  };
308
+ /**
309
+ * Color conversion and validation helpers built on `tinycolor2`.
310
+ *
311
+ * Forked from
312
+ * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/color.js | react-color's color helpers}
313
+ * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.
314
+ */
315
+ const VALIDATION_KEYS = /* @__PURE__ */ new Set([
316
+ "r",
317
+ "g",
318
+ "b",
319
+ "a",
320
+ "h",
321
+ "s",
322
+ "l",
323
+ "v"
324
+ ]), PERCENT_PATTERN = /^\d+%$/;
325
+ function simpleCheckForValidColor(data) {
326
+ if (typeof data == "string") return data;
327
+ let checked = 0, passed = 0;
328
+ for (let [key, value] of Object.entries(data)) !VALIDATION_KEYS.has(key) || !value || (checked += 1, Number.isNaN(Number(value)) || (passed += 1), (key === "s" || key === "l") && PERCENT_PATTERN.test(String(value)) && (passed += 1));
329
+ return checked === passed && data;
330
+ }
331
+ function toState(data, oldHue) {
332
+ let instance = typeof data == "string" ? tinycolor(data) : "hex" in data ? tinycolor(data.hex) : tinycolor(data), hsl = instance.toHsl(), hsv = instance.toHsv(), rgb = instance.toRgb(), hex = instance.toHex();
333
+ hsl.s === 0 && (hsl.h = oldHue ?? 0, hsv.h = oldHue ?? 0);
334
+ let transparent = hex === "000000" && rgb.a === 0, incomingHue = typeof data == "string" ? void 0 : "h" in data ? data.h : void 0, source = typeof data == "string" ? void 0 : data.source;
335
+ return {
336
+ hsl,
337
+ hex: transparent ? "transparent" : `#${hex}`,
338
+ rgb,
339
+ hsv,
340
+ oldHue: incomingHue || oldHue || hsl.h,
341
+ source: source ?? ""
342
+ };
343
+ }
344
+ function isValidHex(hex) {
345
+ if (hex === "transparent") return !0;
346
+ let lh = +(hex.charAt(0) === "#");
347
+ return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid();
348
+ }
405
349
  function calculateChange$1(e, direction, hsl, container) {
406
350
  let containerWidth = container.clientWidth, containerHeight = container.clientHeight, x = "touches" in e ? e.touches[0]?.pageX ?? 0 : e.pageX, y = "touches" in e ? e.touches[0]?.pageY ?? 0 : e.pageY, left = x - (container.getBoundingClientRect().left + window.scrollX), top = y - (container.getBoundingClientRect().top + window.scrollY);
407
351
  if (direction === "vertical") {
@@ -437,29 +381,26 @@ function calculateChange$1(e, direction, hsl, container) {
437
381
  */
438
382
  const HueGradient = styled.div.withConfig({
439
383
  displayName: "HueGradient",
440
- componentId: "sc-kldwsm-0"
384
+ componentId: "sc-xk84ve-0"
441
385
  })`background:${({ $direction }) => $direction === "vertical" ? "linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)" : "linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)"};`;
442
386
  var Hue = class extends Component {
443
- container = null;
387
+ containerRef = createRef();
388
+ abortControllerRef = createRef();
444
389
  componentWillUnmount() {
445
- this.unbindEventListeners();
390
+ this.abortControllerRef.current?.abort();
446
391
  }
447
- setContainerRef = (node) => {
448
- this.container = node;
449
- };
450
392
  handleChange = (event) => {
451
- if (!this.container) return;
452
- let change = calculateChange$1(event, this.props.direction, this.props.hsl, this.container);
393
+ if (!this.containerRef.current) return;
394
+ let change = calculateChange$1(event, this.props.direction, this.props.hsl, this.containerRef.current);
453
395
  change && typeof this.props.onChange == "function" && this.props.onChange(change);
454
396
  };
455
397
  handleMouseDown = (event) => {
456
- this.handleChange(event.nativeEvent), window.addEventListener("mousemove", this.handleChange), window.addEventListener("mouseup", this.handleMouseUp);
398
+ this.handleChange(event.nativeEvent), this.abortControllerRef.current && this.abortControllerRef.current.abort(), this.abortControllerRef.current = new AbortController();
399
+ let { signal } = this.abortControllerRef.current;
400
+ window.addEventListener("mousemove", this.handleChange, { signal }), window.addEventListener("mouseup", this.handleMouseUp, { signal });
457
401
  };
458
402
  handleMouseUp = () => {
459
- this.unbindEventListeners();
460
- };
461
- unbindEventListeners = () => {
462
- window.removeEventListener("mousemove", this.handleChange), window.removeEventListener("mouseup", this.handleMouseUp);
403
+ this.abortControllerRef.current?.abort();
463
404
  };
464
405
  render() {
465
406
  let { hsl, direction = "horizontal", radius, shadow } = this.props, pointerStyle = direction === "vertical" ? {
@@ -485,7 +426,7 @@ var Hue = class extends Component {
485
426
  height: "100%",
486
427
  borderRadius: radius
487
428
  },
488
- ref: this.setContainerRef,
429
+ ref: this.containerRef,
489
430
  onMouseDown: this.handleMouseDown,
490
431
  onTouchMove: this.handleChange,
491
432
  onTouchStart: this.handleChange,
@@ -532,41 +473,37 @@ function calculateChange(e, hsl, container) {
532
473
  */
533
474
  const SaturationWhite = styled.div.withConfig({
534
475
  displayName: "SaturationWhite",
535
- componentId: "sc-0wl7vo-0"
476
+ componentId: "sc-pljli8-0"
536
477
  })`background:linear-gradient(to right,#fff,rgba(255,255,255,0));`, SaturationBlack = styled.div.withConfig({
537
478
  displayName: "SaturationBlack",
538
- componentId: "sc-0wl7vo-1"
479
+ componentId: "sc-pljli8-1"
539
480
  })`background:linear-gradient(to top,#000,rgba(0,0,0,0));`;
540
481
  var Saturation = class extends Component {
541
- container = null;
482
+ containerRef = createRef();
483
+ abortControllerRef = createRef();
542
484
  throttle = throttle((handler, data) => {
543
485
  handler(data);
544
486
  }, 50);
545
487
  componentWillUnmount() {
546
- this.throttle.cancel(), this.unbindEventListeners();
488
+ this.throttle.cancel(), this.abortControllerRef.current?.abort();
547
489
  }
548
- setContainerRef = (node) => {
549
- this.container = node;
550
- };
551
490
  getContainerRenderWindow() {
552
- let { container } = this, renderWindow = window;
553
- for (; !renderWindow.document.contains(container) && renderWindow.parent !== renderWindow;) renderWindow = renderWindow.parent;
491
+ let { containerRef } = this, renderWindow = window;
492
+ for (; !renderWindow.document.contains(containerRef.current) && renderWindow.parent !== renderWindow;) renderWindow = renderWindow.parent;
554
493
  return renderWindow;
555
494
  }
556
495
  handleChange = (event) => {
557
- !this.container || typeof this.props.onChange != "function" || this.throttle(this.props.onChange, calculateChange(event, this.props.hsl, this.container));
496
+ !this.containerRef.current || typeof this.props.onChange != "function" || this.throttle(this.props.onChange, calculateChange(event, this.props.hsl, this.containerRef.current));
558
497
  };
559
498
  handleMouseDown = (event) => {
560
499
  this.handleChange(event.nativeEvent);
561
500
  let renderWindow = this.getContainerRenderWindow();
562
- renderWindow.addEventListener("mousemove", this.handleChange), renderWindow.addEventListener("mouseup", this.handleMouseUp);
501
+ this.abortControllerRef.current && this.abortControllerRef.current.abort(), this.abortControllerRef.current = new AbortController();
502
+ let { signal } = this.abortControllerRef.current;
503
+ renderWindow.addEventListener("mousemove", this.handleChange, { signal }), renderWindow.addEventListener("mouseup", this.handleMouseUp, { signal });
563
504
  };
564
505
  handleMouseUp = () => {
565
- this.unbindEventListeners();
566
- };
567
- unbindEventListeners = () => {
568
- let renderWindow = this.getContainerRenderWindow();
569
- renderWindow.removeEventListener("mousemove", this.handleChange), renderWindow.removeEventListener("mouseup", this.handleMouseUp);
506
+ this.abortControllerRef.current?.abort();
570
507
  };
571
508
  render() {
572
509
  let { hsl, hsv, radius, shadow } = this.props, pointerStyle = {
@@ -582,7 +519,7 @@ var Saturation = class extends Component {
582
519
  background: `hsl(${hsl.h},100%, 50%)`,
583
520
  borderRadius: radius
584
521
  },
585
- ref: this.setContainerRef,
522
+ ref: this.containerRef,
586
523
  onMouseDown: this.handleMouseDown,
587
524
  onTouchMove: this.handleChange,
588
525
  onTouchStart: this.handleChange,
@@ -737,17 +674,23 @@ const ColorPickerFields = (t0) => {
737
674
  ] }), $[38] = t11, $[39] = t13, $[40] = t15, $[41] = t16, $[42] = t9, $[43] = t17) : t17 = $[43], t17;
738
675
  }, ColorBox = styled(Box).withConfig({
739
676
  displayName: "ColorBox",
740
- componentId: "sc-pfhngk-0"
677
+ componentId: "sc-ngkz6o-0"
741
678
  })`position:absolute;top:0;left:0;width:100%;height:100%;`, ReadOnlyContainer = styled(Flex).withConfig({
742
679
  displayName: "ReadOnlyContainer",
743
- componentId: "sc-pfhngk-1"
744
- })`margin-top:6rem;background-color:var(--card-bg-color);position:relative;width:100%;`, ColorPicker = CustomPicker((props) => {
745
- let $ = c(46), { width, color: t0, onChange, onUnset, disableAlpha, colorList, readOnly } = props, { rgb, hex, hsv, hsl } = t0;
680
+ componentId: "sc-ngkz6o-1"
681
+ })`margin-top:6rem;background-color:var(--card-bg-color);position:relative;width:100%;`, ColorPicker = (props) => {
682
+ let $ = c(49), { width, color: t0, onChange: onChangeProp, onUnset, disableAlpha, colorList, readOnly } = props, { rgb, hex, hsv, hsl } = t0, oldHueRef = useRef(hsl?.h ?? 0), t1;
683
+ $[0] !== hsl || $[1] !== onChangeProp ? (t1 = (data) => {
684
+ if (!simpleCheckForValidColor(data)) return;
685
+ let incomingHue = typeof data == "string" ? void 0 : "h" in data ? data.h : void 0, oldHue = hsl && hsl.s > 0 ? hsl.h : oldHueRef.current, nextColor = toState(data, incomingHue || oldHue);
686
+ oldHueRef.current = nextColor.oldHue, onChangeProp(nextColor);
687
+ }, $[0] = hsl, $[1] = onChangeProp, $[2] = t1) : t1 = $[2];
688
+ let onChange = t1;
746
689
  if (!hsl || !hsv) return null;
747
- let t1;
748
- $[0] === width ? t1 = $[1] : (t1 = { width }, $[0] = width, $[1] = t1);
749
690
  let t2;
750
- $[2] !== disableAlpha || $[3] !== hsl || $[4] !== hsv || $[5] !== onChange || $[6] !== readOnly || $[7] !== rgb ? (t2 = !readOnly && /* @__PURE__ */ jsxs(Fragment, { children: [
691
+ $[3] === width ? t2 = $[4] : (t2 = { width }, $[3] = width, $[4] = t2);
692
+ let t3;
693
+ $[5] !== disableAlpha || $[6] !== hsl || $[7] !== hsv || $[8] !== onChange || $[9] !== readOnly || $[10] !== rgb ? (t3 = !readOnly && /* @__PURE__ */ jsxs(Fragment, { children: [
751
694
  /* @__PURE__ */ jsx(Card, {
752
695
  overflow: "hidden",
753
696
  style: {
@@ -788,21 +731,21 @@ const ColorPickerFields = (t0) => {
788
731
  onChange
789
732
  })
790
733
  })
791
- ] }), $[2] = disableAlpha, $[3] = hsl, $[4] = hsv, $[5] = onChange, $[6] = readOnly, $[7] = rgb, $[8] = t2) : t2 = $[8];
792
- let t3, t4;
793
- $[9] === Symbol.for("react.memo_cache_sentinel") ? (t3 = {
734
+ ] }), $[5] = disableAlpha, $[6] = hsl, $[7] = hsv, $[8] = onChange, $[9] = readOnly, $[10] = rgb, $[11] = t3) : t3 = $[11];
735
+ let t4, t5;
736
+ $[12] === Symbol.for("react.memo_cache_sentinel") ? (t4 = {
794
737
  position: "relative",
795
738
  minWidth: "4em",
796
739
  background: "#fff"
797
- }, t4 = /* @__PURE__ */ jsx(Checkboard, {
740
+ }, t5 = /* @__PURE__ */ jsx(Checkboard, {
798
741
  size: 8,
799
742
  white: "transparent",
800
743
  grey: "rgba(0,0,0,.08)"
801
- }), $[9] = t3, $[10] = t4) : (t3 = $[9], t4 = $[10]);
802
- let t5 = `rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`, t6;
803
- $[11] === t5 ? t6 = $[12] : (t6 = /* @__PURE__ */ jsx(ColorBox, { style: { backgroundColor: t5 } }), $[11] = t5, $[12] = t6);
804
- let t7;
805
- $[13] !== hex || $[14] !== hsl?.h || $[15] !== hsl?.l || $[16] !== hsl?.s || $[17] !== readOnly || $[18] !== rgb?.b || $[19] !== rgb?.g || $[20] !== rgb?.r ? (t7 = readOnly && /* @__PURE__ */ jsx(ReadOnlyContainer, {
744
+ }), $[12] = t4, $[13] = t5) : (t4 = $[12], t5 = $[13]);
745
+ let t6 = `rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`, t7;
746
+ $[14] === t6 ? t7 = $[15] : (t7 = /* @__PURE__ */ jsx(ColorBox, { style: { backgroundColor: t6 } }), $[14] = t6, $[15] = t7);
747
+ let t8;
748
+ $[16] !== hex || $[17] !== hsl?.h || $[18] !== hsl?.l || $[19] !== hsl?.s || $[20] !== readOnly || $[21] !== rgb?.b || $[22] !== rgb?.g || $[23] !== rgb?.r ? (t8 = readOnly && /* @__PURE__ */ jsx(ReadOnlyContainer, {
806
749
  padding: 2,
807
750
  paddingBottom: 1,
808
751
  sizing: "border",
@@ -841,21 +784,21 @@ const ColorPickerFields = (t0) => {
841
784
  })]
842
785
  })]
843
786
  })
844
- }), $[13] = hex, $[14] = hsl?.h, $[15] = hsl?.l, $[16] = hsl?.s, $[17] = readOnly, $[18] = rgb?.b, $[19] = rgb?.g, $[20] = rgb?.r, $[21] = t7) : t7 = $[21];
845
- let t8;
846
- $[22] !== t6 || $[23] !== t7 ? (t8 = /* @__PURE__ */ jsxs(Card, {
787
+ }), $[16] = hex, $[17] = hsl?.h, $[18] = hsl?.l, $[19] = hsl?.s, $[20] = readOnly, $[21] = rgb?.b, $[22] = rgb?.g, $[23] = rgb?.r, $[24] = t8) : t8 = $[24];
788
+ let t9;
789
+ $[25] !== t7 || $[26] !== t8 ? (t9 = /* @__PURE__ */ jsxs(Card, {
847
790
  flex: 1,
848
791
  radius: 2,
849
792
  overflow: "hidden",
850
- style: t3,
793
+ style: t4,
851
794
  children: [
852
- t4,
853
- t6,
854
- t7
795
+ t5,
796
+ t7,
797
+ t8
855
798
  ]
856
- }), $[22] = t6, $[23] = t7, $[24] = t8) : t8 = $[24];
857
- let t9;
858
- $[25] !== disableAlpha || $[26] !== hex || $[27] !== hsl || $[28] !== onChange || $[29] !== onUnset || $[30] !== readOnly || $[31] !== rgb ? (t9 = !readOnly && /* @__PURE__ */ jsxs(Flex, {
799
+ }), $[25] = t7, $[26] = t8, $[27] = t9) : t9 = $[27];
800
+ let t10;
801
+ $[28] !== disableAlpha || $[29] !== hex || $[30] !== hsl || $[31] !== onChange || $[32] !== onUnset || $[33] !== readOnly || $[34] !== rgb ? (t10 = !readOnly && /* @__PURE__ */ jsxs(Flex, {
859
802
  align: "flex-start",
860
803
  marginLeft: 2,
861
804
  children: [/* @__PURE__ */ jsx(Box, {
@@ -876,34 +819,34 @@ const ColorPickerFields = (t0) => {
876
819
  tone: "critical"
877
820
  })
878
821
  })]
879
- }), $[25] = disableAlpha, $[26] = hex, $[27] = hsl, $[28] = onChange, $[29] = onUnset, $[30] = readOnly, $[31] = rgb, $[32] = t9) : t9 = $[32];
880
- let t10;
881
- $[33] !== t8 || $[34] !== t9 ? (t10 = /* @__PURE__ */ jsxs(Flex, { children: [t8, t9] }), $[33] = t8, $[34] = t9, $[35] = t10) : t10 = $[35];
822
+ }), $[28] = disableAlpha, $[29] = hex, $[30] = hsl, $[31] = onChange, $[32] = onUnset, $[33] = readOnly, $[34] = rgb, $[35] = t10) : t10 = $[35];
882
823
  let t11;
883
- $[36] !== colorList || $[37] !== onChange ? (t11 = colorList && /* @__PURE__ */ jsx(ColorList, {
824
+ $[36] !== t10 || $[37] !== t9 ? (t11 = /* @__PURE__ */ jsxs(Flex, { children: [t9, t10] }), $[36] = t10, $[37] = t9, $[38] = t11) : t11 = $[38];
825
+ let t12;
826
+ $[39] !== colorList || $[40] !== onChange ? (t12 = colorList && /* @__PURE__ */ jsx(ColorList, {
884
827
  colors: colorList,
885
828
  onChange
886
- }), $[36] = colorList, $[37] = onChange, $[38] = t11) : t11 = $[38];
887
- let t12;
888
- $[39] !== t10 || $[40] !== t11 || $[41] !== t2 ? (t12 = /* @__PURE__ */ jsx(Card, {
829
+ }), $[39] = colorList, $[40] = onChange, $[41] = t12) : t12 = $[41];
830
+ let t13;
831
+ $[42] !== t11 || $[43] !== t12 || $[44] !== t3 ? (t13 = /* @__PURE__ */ jsx(Card, {
889
832
  padding: 1,
890
833
  border: !0,
891
834
  radius: 1,
892
835
  children: /* @__PURE__ */ jsxs(Stack, {
893
836
  gap: 2,
894
837
  children: [
895
- t2,
896
- t10,
897
- t11
838
+ t3,
839
+ t11,
840
+ t12
898
841
  ]
899
842
  })
900
- }), $[39] = t10, $[40] = t11, $[41] = t2, $[42] = t12) : t12 = $[42];
901
- let t13;
902
- return $[43] !== t1 || $[44] !== t12 ? (t13 = /* @__PURE__ */ jsx("div", {
903
- style: t1,
904
- children: t12
905
- }), $[43] = t1, $[44] = t12, $[45] = t13) : t13 = $[45], t13;
906
- }), DEFAULT_COLOR = {
843
+ }), $[42] = t11, $[43] = t12, $[44] = t3, $[45] = t13) : t13 = $[45];
844
+ let t14;
845
+ return $[46] !== t13 || $[47] !== t2 ? (t14 = /* @__PURE__ */ jsx("div", {
846
+ style: t2,
847
+ children: t13
848
+ }), $[46] = t13, $[47] = t2, $[48] = t14) : t14 = $[48], t14;
849
+ }, DEFAULT_COLOR = {
907
850
  hex: "#24a3e3",
908
851
  hsl: {
909
852
  h: 200,
@@ -964,4 +907,4 @@ function ColorInput(props) {
964
907
  }
965
908
  export { ColorInput as default };
966
909
 
967
- //# sourceMappingURL=ColorInput-DVFi-Bal.js.map
910
+ //# sourceMappingURL=ColorInput-C2ZSNt70.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorInput-C2ZSNt70.js","names":["Flex","styled","tinycolor","Color","ColorChangeHandler","ColorListWrap","ColorBoxContainer","div","ColorBox","ValidatedColor","key","color","backgroundColor","ColorListProps","colors","Array","onChange","validateColors","seen","Set","reduce","cls","c","hex","isValid","toRgbString","JSON","stringify","has","add","push","ColorList","t0","$","_c","t1","t2","t3","background","map","checkboardCache","Record","render","c1","c2","size","serverCanvas","HTMLCanvasElement","document","canvas","createElement","width","height","ctx","getContext","fillStyle","fillRect","translate","toDataURL","get","key","cached","checkboard","ReactElement","checkboard","CheckboardRenderers","RenderersProps","EMPTY_RENDERERS","CheckboardProps","white","grey","size","borderRadius","boxShadow","Checkboard","t0","$","_c","t1","t2","t3","renderers","t4","undefined","t5","canvas","get","background","t6","t7","position","inset","AlphaColorResult","HSLColor","PickerEvent","calculateChange","e","hsl","direction","initialA","container","HTMLElement","containerWidth","clientWidth","containerHeight","clientHeight","x","touches","pageX","y","pageY","left","getBoundingClientRect","window","scrollX","top","scrollY","a","Math","round","h","s","l","source","Component","createRef","CSSProperties","ReactElement","Checkboard","alpha","AlphaColorResult","CheckboardRenderers","ColorChangeHandler","HSLColor","PickerEvent","RGBColor","AlphaProps","rgb","hsl","a","direction","radius","shadow","renderers","onChange","Alpha","containerRef","HTMLDivElement","abortControllerRef","AbortController","componentWillUnmount","current","abort","handleChange","event","change","calculateChange","props","handleMouseDown","React","MouseEvent","nativeEvent","signal","window","addEventListener","handleMouseUp","render","alphaValue","gradient","r","g","b","pointerStyle","position","left","top","inset","borderRadius","overflow","background","boxShadow","height","margin","width","marginTop","transform","Component","createRef","ChangeEvent","CSSProperties","KeyboardEvent","ReactKeyboardEvent","ReactElement","EditableInputStyles","DEFAULT_ARROW_OFFSET","getNumberValue","value","Number","String","replace","idCounter","EditableInputEvent","HTMLInputElement","MouseEvent","EditableInputProps","label","style","arrowOffset","placeholder","hideLabel","dragLabel","dragMax","onChange","Record","event","EditableInputState","blurValue","EditableInput","inputId","inputRef","abortControllerRef","AbortController","constructor","props","initialValue","toUpperCase","state","componentDidUpdate","prevProps","prevState","nextValue","isFocused","current","document","activeElement","setState","componentWillUnmount","abort","getValueObjectWithLabel","getArrowOffset","setUpdatedValue","handleBlur","handleChange","target","handleKeyDown","currentTarget","isUp","key","isDown","isNaN","offset","updatedValue","handleDrag","numericValue","newValue","Math","round","movementX","undefined","handleMouseDown","React","HTMLLabelElement","preventDefault","nativeEvent","signal","window","addEventListener","handleMouseUp","render","wrapStyle","position","wrap","inputStyle","input","labelStyle","cursor","tinycolor","Color","ColorState","VALIDATION_KEYS","Set","PERCENT_PATTERN","simpleCheckForValidColor","data","checked","passed","key","value","Object","entries","has","Number","isNaN","test","String","toState","oldHue","instance","hex","hsl","toHsl","hsv","toHsv","rgb","toRgb","toHex","s","h","transparent","a","incomingHue","undefined","source","isValidHex","lh","charAt","length","isValid","HSLColor","HueColorResult","PickerEvent","calculateChange","e","direction","hsl","container","HTMLElement","containerWidth","clientWidth","containerHeight","clientHeight","x","touches","pageX","y","pageY","left","getBoundingClientRect","window","scrollX","top","scrollY","h","percent","s","l","a","source","Component","createRef","CSSProperties","ReactElement","styled","hue","ColorChangeHandler","HSLColor","HueColorResult","PickerEvent","HueGradient","div","$direction","HueProps","hsl","direction","radius","shadow","onChange","Hue","containerRef","HTMLDivElement","abortControllerRef","AbortController","componentWillUnmount","current","abort","handleChange","event","change","calculateChange","props","handleMouseDown","React","MouseEvent","nativeEvent","signal","window","addEventListener","handleMouseUp","render","pointerStyle","position","left","top","h","inset","borderRadius","boxShadow","padding","height","marginTop","width","background","transform","HSLColor","PickerEvent","SaturationColorResult","calculateChange","e","hsl","container","HTMLElement","width","containerWidth","height","containerHeight","getBoundingClientRect","x","touches","pageX","y","pageY","left","window","scrollX","top","scrollY","saturation","bright","h","s","v","a","source","throttle","Component","createRef","CSSProperties","ReactElement","styled","saturation","ColorChangeHandler","HSLColor","HSVColor","PickerEvent","SaturationColorResult","ThrottledChange","ReturnType","handler","data","SaturationWhite","div","SaturationBlack","SaturationProps","hsl","hsv","radius","shadow","onChange","Saturation","containerRef","HTMLDivElement","abortControllerRef","AbortController","componentWillUnmount","cancel","current","abort","getContainerRenderWindow","Window","renderWindow","window","document","contains","parent","handleChange","event","props","calculateChange","handleMouseDown","React","MouseEvent","nativeEvent","signal","addEventListener","handleMouseUp","render","pointerStyle","position","top","v","left","s","cursor","inset","background","h","borderRadius","boxShadow","width","height","transform","Box","Flex","useTheme","useCallback","useMemo","Color","ColorChangeHandler","EditableInput","EditableInputStyles","HSLColor","isValidHex","RGBColor","ColorPickerFieldsProps","rgb","hsl","hex","disableAlpha","onChange","ColorPickerFields","t0","$","_c","sanity","t1","color","input","default","enabled","border","t2","fonts","text","sizes","fontSize","t3","bg","fg","width","padding","boxShadow","backgroundColor","textAlign","t4","label","t5","base","display","paddingTop","paddingBottom","textTransform","t6","inputStyles","t7","data","source","r","g","b","Number","a","alpha","h","s","l","handleChange","t8","replace","t9","t10","t11","t12","t13","t14","t15","t16","Math","round","t17","AddIcon","TrashIcon","Box","Button","Card","Flex","Inline","Stack","Text","startTransition","useOptimistic","useRef","ObjectInputProps","set","setIfMissing","unset","styled","ColorList","ColorPickerFields","Alpha","Checkboard","Color","ColorState","Hue","Saturation","simpleCheckForValidColor","toState","ColorSchemaType","ColorValue","ColorBox","ReadOnlyContainer","ColorPickerProps","width","disableAlpha","colorList","Array","readOnly","onChange","color","onUnset","ColorPicker","props","$","_c","t0","onChangeProp","rgb","hex","hsv","hsl","oldHueRef","h","t1","data","incomingHue","undefined","oldHue","s","current","nextColor","t2","t3","position","height","background","t4","t5","Symbol","for","minWidth","t6","r","g","b","a","t7","backgroundColor","t8","l","Math","round","t9","t10","t11","t12","t13","t14","DEFAULT_COLOR","source","v","ColorInput","_value","value","setColorOptimistic","type","schemaType","focusRef","handleChange","fieldPatches","fields","filter","field","name","map","field_0","nextFieldValue","isObject","jsonType","Object","assign","_type","nextColor_0","options","Boolean"],"sources":["../src/ColorList.tsx","../src/react-color/helpers/checkboard.ts","../src/react-color/Checkboard.tsx","../src/react-color/helpers/alpha.ts","../src/react-color/Alpha.tsx","../src/react-color/EditableInput.tsx","../src/react-color/helpers/color.ts","../src/react-color/helpers/hue.ts","../src/react-color/Hue.tsx","../src/react-color/helpers/saturation.ts","../src/react-color/Saturation.tsx","../src/ColorPickerFields.tsx","../src/ColorInput.tsx"],"sourcesContent":["import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\nimport tinycolor from 'tinycolor2'\n\nimport type {Color, ColorChangeHandler} from './react-color'\n\nconst ColorListWrap = styled(Flex)`\n gap: 0.25em;\n`\n\nconst ColorBoxContainer = styled.div`\n width: 2.1em;\n height: 2.1em;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n border-radius: 3px;\n background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAADFJREFUOE9jZGBgEGHAD97gk2YcNYBhmIQBgWSAP52AwoAQwJvQRg1gACckQoC2gQgAIF8IscwEtKYAAAAASUVORK5CYII=')\n left center #fff;\n`\n\nconst ColorBox = styled.div`\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px var(--card-shadow-outline-color);\n content: '';\n position: absolute;\n inset: 0;\n z-index: 1;\n`\n\ninterface ValidatedColor {\n key: string\n color: Color\n backgroundColor: string\n}\n\ninterface ColorListProps {\n colors?: Array<Color>\n onChange: ColorChangeHandler<Color>\n}\n\nconst validateColors = (colors: Array<Color>) => {\n const seen = new Set<string>()\n return colors.reduce((cls: Array<ValidatedColor>, c) => {\n // @ts-expect-error fix types later\n const color = c.hex ? tinycolor(c.hex) : tinycolor(c)\n if (color.isValid()) {\n const backgroundColor = color.toRgbString()\n const key = JSON.stringify({color: c, backgroundColor})\n if (!seen.has(key)) {\n seen.add(key)\n cls.push({key, color: c, backgroundColor})\n }\n }\n return cls\n }, [])\n}\n\nexport function ColorList({colors, onChange}: ColorListProps): React.JSX.Element | null {\n if (!colors) return null\n return (\n <ColorListWrap wrap=\"wrap\">\n {validateColors(colors).map(({key, color, backgroundColor}) => (\n <ColorBoxContainer\n key={key}\n onClick={() => {\n onChange(color)\n }}\n >\n <ColorBox style={{background: backgroundColor}} />\n </ColorBoxContainer>\n ))}\n </ColorListWrap>\n )\n}\n","/**\n * Renders a checkerboard pattern as a data URL, used as the transparency backdrop.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/checkboard.js | react-color's checkboard helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\n\nconst checkboardCache: Record<string, string | null> = {}\n\nfunction render(\n c1: string,\n c2: string,\n size: number,\n serverCanvas?: new () => HTMLCanvasElement,\n): string | null {\n if (typeof document === 'undefined' && !serverCanvas) {\n return null\n }\n const canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas')\n canvas.width = size * 2\n canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n // If no context can be found, return early.\n return null\n }\n ctx.fillStyle = c1\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = c2\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nexport function get(\n c1: string,\n c2: string,\n size: number,\n serverCanvas?: new () => HTMLCanvasElement,\n): string | null {\n const key = `${c1}-${c2}-${size}${serverCanvas ? '-server' : ''}`\n const cached = checkboardCache[key]\n if (cached) {\n return cached\n }\n const checkboard = render(c1, c2, size, serverCanvas)\n checkboardCache[key] = checkboard\n return checkboard\n}\n","/**\n * Checkerboard transparency backdrop.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Checkboard.js | react-color's Checkboard}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE. The upstream\n * `children` cloning branch is dropped as it is unused here.\n */\nimport type {ReactElement} from 'react'\n\nimport * as checkboard from './helpers/checkboard'\nimport type {CheckboardRenderers, RenderersProps} from './types'\n\nconst EMPTY_RENDERERS: CheckboardRenderers = {}\n\nexport interface CheckboardProps extends RenderersProps {\n white?: string | undefined\n grey?: string | undefined\n size?: number | undefined\n borderRadius?: string | undefined\n boxShadow?: string | undefined\n}\n\nexport function Checkboard({\n white = 'transparent',\n grey = 'rgba(0,0,0,.08)',\n size = 8,\n renderers = EMPTY_RENDERERS,\n borderRadius,\n boxShadow,\n}: CheckboardProps): ReactElement {\n const background = checkboard.get(white, grey, size, renderers.canvas)\n return (\n <div\n style={{\n borderRadius,\n boxShadow,\n position: 'absolute',\n inset: 0,\n background: background ? `url(${background}) center left` : undefined,\n }}\n />\n )\n}\n","/**\n * Translates a pointer event over the alpha track into a new alpha value.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/alpha.js | react-color's alpha helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {AlphaColorResult, HSLColor, PickerEvent} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n hsl: HSLColor,\n direction: 'horizontal' | 'vertical' | undefined,\n initialA: number | undefined,\n container: HTMLElement,\n): AlphaColorResult | null {\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n const left = x - (container.getBoundingClientRect().left + window.scrollX)\n const top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (direction === 'vertical') {\n let a: number\n if (top < 0) {\n a = 0\n } else if (top > containerHeight) {\n a = 1\n } else {\n a = Math.round((top * 100) / containerHeight) / 100\n }\n\n if (hsl.a !== a) {\n return {h: hsl.h, s: hsl.s, l: hsl.l, a, source: 'rgb'}\n }\n return null\n }\n\n let a: number\n if (left < 0) {\n a = 0\n } else if (left > containerWidth) {\n a = 1\n } else {\n a = Math.round((left * 100) / containerWidth) / 100\n }\n\n if (initialA !== a) {\n return {h: hsl.h, s: hsl.s, l: hsl.l, a, source: 'rgb'}\n }\n return null\n}\n","/**\n * Alpha (transparency) slider.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Alpha.js | react-color's Alpha}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). `reactcss` has been removed in favor of plain inline styles,\n * and the unused custom `pointer` slot dropped.\n */\nimport {Component, createRef, type CSSProperties, type ReactElement} from 'react'\n\nimport {Checkboard} from './Checkboard'\nimport * as alpha from './helpers/alpha'\nimport type {\n AlphaColorResult,\n CheckboardRenderers,\n ColorChangeHandler,\n HSLColor,\n PickerEvent,\n RGBColor,\n} from './types'\n\nexport interface AlphaProps {\n rgb: RGBColor\n hsl: HSLColor\n a?: number | undefined\n direction?: 'horizontal' | 'vertical' | undefined\n radius?: string | undefined\n shadow?: string | undefined\n renderers?: CheckboardRenderers | undefined\n onChange?: ColorChangeHandler<AlphaColorResult> | undefined\n}\n\nexport class Alpha extends Component<AlphaProps> {\n private containerRef = createRef<HTMLDivElement | null>()\n private abortControllerRef = createRef<AbortController | null>()\n\n override componentWillUnmount(): void {\n this.abortControllerRef.current?.abort()\n }\n\n private readonly handleChange = (event: PickerEvent): void => {\n if (!this.containerRef.current) {\n return\n }\n const change = alpha.calculateChange(\n event,\n this.props.hsl,\n this.props.direction,\n this.props.a,\n this.containerRef.current,\n )\n if (change && typeof this.props.onChange === 'function') {\n this.props.onChange(change)\n }\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n this.handleChange(event.nativeEvent)\n if (this.abortControllerRef.current) {\n this.abortControllerRef.current.abort()\n }\n this.abortControllerRef.current = new AbortController()\n const {signal} = this.abortControllerRef.current\n window.addEventListener('mousemove', this.handleChange, {signal})\n window.addEventListener('mouseup', this.handleMouseUp, {signal})\n }\n\n private readonly handleMouseUp = (): void => {\n this.abortControllerRef.current?.abort()\n }\n\n override render(): ReactElement {\n const {rgb, direction, radius, shadow, renderers} = this.props\n const alphaValue = rgb.a ?? 1\n const gradient =\n direction === 'vertical'\n ? `linear-gradient(to bottom, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`\n : `linear-gradient(to right, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`\n const pointerStyle: CSSProperties =\n direction === 'vertical'\n ? {position: 'absolute', left: 0, top: `${alphaValue * 100}%`}\n : {position: 'absolute', left: `${alphaValue * 100}%`}\n\n return (\n <div style={{position: 'absolute', inset: 0, borderRadius: radius}}>\n <div style={{position: 'absolute', inset: 0, overflow: 'hidden', borderRadius: radius}}>\n <Checkboard renderers={renderers} />\n </div>\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background: gradient,\n boxShadow: shadow,\n borderRadius: radius,\n }}\n />\n {/* oxlint-disable-next-line jsx-a11y/no-static-element-interactions -- the slider surface is dragged via pointer coordinates, which have no keyboard equivalent */}\n <div\n style={{position: 'relative', height: '100%', margin: '0 3px'}}\n ref={this.containerRef}\n onMouseDown={this.handleMouseDown}\n onTouchMove={this.handleChange}\n onTouchStart={this.handleChange}\n >\n <div style={pointerStyle}>\n <div\n style={{\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n marginTop: '1px',\n transform: 'translateX(-2px)',\n }}\n />\n </div>\n </div>\n </div>\n )\n }\n}\n","/**\n * Labeled text input with arrow-key stepping and drag-to-change support.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/EditableInput.js | react-color's EditableInput}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round; converting to a function component\n * (with `useId`, `useRef`, etc.) is deferred to a follow-up PR. `reactcss` and\n * `prop-types` have been removed, and deprecated `keyCode` checks replaced with\n * `event.key`.\n */\nimport {\n Component,\n createRef,\n type ChangeEvent,\n type CSSProperties,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n} from 'react'\n\nimport type {EditableInputStyles} from './types'\n\nconst DEFAULT_ARROW_OFFSET = 1\n\nconst getNumberValue = (value: string | number): number => Number(String(value).replace(/%/g, ''))\n\nlet idCounter = 1\n\ntype EditableInputEvent =\n | ChangeEvent<HTMLInputElement>\n | ReactKeyboardEvent<HTMLInputElement>\n | MouseEvent\n\nexport interface EditableInputProps {\n label: string\n value?: string | number | undefined\n style?: EditableInputStyles | undefined\n arrowOffset?: number | undefined\n placeholder?: string | undefined\n hideLabel?: boolean | undefined\n dragLabel?: boolean | undefined\n dragMax?: number | undefined\n onChange?: ((value: Record<string, string>, event: EditableInputEvent) => void) | undefined\n}\n\ninterface EditableInputState {\n value: string\n blurValue: string\n}\n\nexport class EditableInput extends Component<EditableInputProps, EditableInputState> {\n private readonly inputId: string\n private inputRef = createRef<HTMLInputElement | null>()\n private abortControllerRef = createRef<AbortController | null>()\n\n constructor(props: EditableInputProps) {\n super(props)\n const initialValue = String(props.value ?? '').toUpperCase()\n this.state = {value: initialValue, blurValue: initialValue}\n this.inputId = `rc-editable-input-${idCounter++}`\n }\n\n override componentDidUpdate(prevProps: EditableInputProps, prevState: EditableInputState): void {\n if (\n this.props.value !== this.state.value &&\n (prevProps.value !== this.props.value || prevState.value !== this.state.value)\n ) {\n const nextValue = String(this.props.value ?? '').toUpperCase()\n const isFocused = this.inputRef.current === document.activeElement\n // Sync the controlled value into local state, but only when the input is\n // not focused so we don't clobber what the user is typing. This needs a\n // post-update `activeElement` check that `getDerivedStateFromProps` can't do.\n // oxlint-disable-next-line react/no-did-update-set-state\n this.setState(\n isFocused\n ? {blurValue: nextValue}\n : {value: nextValue, blurValue: this.state.blurValue ? '' : nextValue},\n )\n }\n }\n\n override componentWillUnmount(): void {\n this.abortControllerRef.current?.abort()\n }\n\n private readonly getValueObjectWithLabel = (value: string | number): Record<string, string> => {\n return {[this.props.label]: String(value)}\n }\n\n private readonly getArrowOffset = (): number => this.props.arrowOffset ?? DEFAULT_ARROW_OFFSET\n\n private readonly setUpdatedValue = (value: string | number, event: EditableInputEvent): void => {\n this.props.onChange?.(this.getValueObjectWithLabel(value), event)\n this.setState({value: String(value)})\n }\n\n private readonly handleBlur = (): void => {\n if (this.state.blurValue) {\n this.setState({value: this.state.blurValue, blurValue: ''})\n }\n }\n\n private readonly handleChange = (event: ChangeEvent<HTMLInputElement>): void => {\n this.setUpdatedValue(event.target.value, event)\n }\n\n private readonly handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>): void => {\n // If `event.target.value` is a percentage, drop the `%` before stepping.\n // https://github.com/casesandberg/react-color/issues/383\n const value = getNumberValue(event.currentTarget.value)\n const isUp = event.key === 'ArrowUp'\n const isDown = event.key === 'ArrowDown'\n if (!Number.isNaN(value) && (isUp || isDown)) {\n const offset = this.getArrowOffset()\n const updatedValue = isUp ? value + offset : value - offset\n this.setUpdatedValue(updatedValue, event)\n }\n }\n\n private readonly handleDrag = (event: MouseEvent): void => {\n if (!this.props.dragLabel) {\n return\n }\n const {dragMax, value} = this.props\n const numericValue = typeof value === 'number' ? value : Number(value)\n const newValue = Math.round(numericValue + event.movementX)\n if (dragMax !== undefined && newValue >= 0 && newValue <= dragMax) {\n this.props.onChange?.(this.getValueObjectWithLabel(newValue), event)\n }\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLLabelElement>): void => {\n if (!this.props.dragLabel) {\n return\n }\n event.preventDefault()\n this.handleDrag(event.nativeEvent)\n if (this.abortControllerRef.current) {\n this.abortControllerRef.current.abort()\n }\n this.abortControllerRef.current = new AbortController()\n const {signal} = this.abortControllerRef.current\n window.addEventListener('mousemove', this.handleDrag, {signal})\n window.addEventListener('mouseup', this.handleMouseUp, {signal})\n }\n\n private readonly handleMouseUp = (): void => {\n this.abortControllerRef.current?.abort()\n }\n\n override render(): ReactElement {\n const style = this.props.style ?? {}\n const wrapStyle: CSSProperties = {position: 'relative', ...style.wrap}\n const inputStyle: CSSProperties = {...style.input}\n const labelStyle: CSSProperties = {\n ...style.label,\n ...(this.props.dragLabel ? {cursor: 'ew-resize'} : null),\n }\n\n return (\n <div style={wrapStyle}>\n <input\n id={this.inputId}\n style={inputStyle}\n ref={this.inputRef}\n value={this.state.value}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n onBlur={this.handleBlur}\n placeholder={this.props.placeholder}\n spellCheck=\"false\"\n />\n {this.props.label && !this.props.hideLabel ? (\n // oxlint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the label is a drag affordance using pointer coordinates; the input also supports arrow-key stepping\n <label htmlFor={this.inputId} style={labelStyle} onMouseDown={this.handleMouseDown}>\n {this.props.label}\n </label>\n ) : null}\n </div>\n )\n }\n}\n","/**\n * Color conversion and validation helpers built on `tinycolor2`.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/color.js | react-color's color helpers}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport tinycolor from 'tinycolor2'\n\nimport type {Color, ColorState} from '../types'\n\nconst VALIDATION_KEYS = new Set(['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'])\nconst PERCENT_PATTERN = /^\\d+%$/\n\nexport function simpleCheckForValidColor(data: Color): Color | false {\n if (typeof data === 'string') {\n return data\n }\n\n let checked = 0\n let passed = 0\n for (const [key, value] of Object.entries(data)) {\n if (!VALIDATION_KEYS.has(key) || !value) {\n continue\n }\n checked += 1\n if (!Number.isNaN(Number(value))) {\n passed += 1\n }\n if ((key === 's' || key === 'l') && PERCENT_PATTERN.test(String(value))) {\n passed += 1\n }\n }\n\n return checked === passed ? data : false\n}\n\nexport function toState(data: Color, oldHue?: number): ColorState {\n const instance =\n typeof data === 'string'\n ? tinycolor(data)\n : 'hex' in data\n ? tinycolor(data.hex)\n : tinycolor(data)\n const hsl = instance.toHsl()\n const hsv = instance.toHsv()\n const rgb = instance.toRgb()\n const hex = instance.toHex()\n\n if (hsl.s === 0) {\n hsl.h = oldHue ?? 0\n hsv.h = oldHue ?? 0\n }\n\n const transparent = hex === '000000' && rgb.a === 0\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const source = typeof data === 'string' ? undefined : data.source\n\n return {\n hsl,\n hex: transparent ? 'transparent' : `#${hex}`,\n rgb,\n hsv,\n oldHue: incomingHue || oldHue || hsl.h,\n source: source ?? '',\n }\n}\n\nexport function isValidHex(hex: string): boolean {\n if (hex === 'transparent') {\n return true\n }\n // Disallow hex4 and hex8 (with alpha) to match the original behavior.\n const lh = hex.charAt(0) === '#' ? 1 : 0\n return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid()\n}\n","/**\n * Translates a pointer event over the hue track into a new hue value.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/hue.js | react-color's hue helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {HSLColor, HueColorResult, PickerEvent} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n direction: 'horizontal' | 'vertical' | undefined,\n hsl: HSLColor,\n container: HTMLElement,\n): HueColorResult | null {\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n const left = x - (container.getBoundingClientRect().left + window.scrollX)\n const top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (direction === 'vertical') {\n let h: number\n if (top < 0) {\n h = 359\n } else if (top > containerHeight) {\n h = 0\n } else {\n const percent = -((top * 100) / containerHeight) + 100\n h = (360 * percent) / 100\n }\n\n if (hsl.h !== h) {\n return {h, s: hsl.s, l: hsl.l, a: hsl.a ?? 1, source: 'hsl'}\n }\n return null\n }\n\n let h: number\n if (left < 0) {\n h = 0\n } else if (left > containerWidth) {\n h = 359\n } else {\n const percent = (left * 100) / containerWidth\n h = (360 * percent) / 100\n }\n\n if (hsl.h !== h) {\n return {h, s: hsl.s, l: hsl.l, a: hsl.a ?? 1, source: 'hsl'}\n }\n return null\n}\n","/**\n * Hue slider.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Hue.js | react-color's Hue}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). The upstream raw `<style>` tag holding the static hue gradient\n * has been replaced with a `styled-components` element, and `reactcss` removed.\n */\nimport {Component, createRef, type CSSProperties, type ReactElement} from 'react'\nimport {styled} from 'styled-components'\n\nimport * as hue from './helpers/hue'\nimport type {ColorChangeHandler, HSLColor, HueColorResult, PickerEvent} from './types'\n\nconst HueGradient = styled.div<{$direction: 'horizontal' | 'vertical'}>`\n background: ${({$direction}) =>\n $direction === 'vertical'\n ? 'linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)'\n : 'linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)'};\n`\n\nexport interface HueProps {\n hsl: HSLColor\n direction?: 'horizontal' | 'vertical' | undefined\n radius?: string | undefined\n shadow?: string | undefined\n onChange?: ColorChangeHandler<HueColorResult> | undefined\n}\n\nexport class Hue extends Component<HueProps> {\n private containerRef = createRef<HTMLDivElement | null>()\n private abortControllerRef = createRef<AbortController | null>()\n\n override componentWillUnmount(): void {\n this.abortControllerRef.current?.abort()\n }\n\n private readonly handleChange = (event: PickerEvent): void => {\n if (!this.containerRef.current) {\n return\n }\n const change = hue.calculateChange(\n event,\n this.props.direction,\n this.props.hsl,\n this.containerRef.current,\n )\n if (change && typeof this.props.onChange === 'function') {\n this.props.onChange(change)\n }\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n this.handleChange(event.nativeEvent)\n if (this.abortControllerRef.current) {\n this.abortControllerRef.current.abort()\n }\n this.abortControllerRef.current = new AbortController()\n const {signal} = this.abortControllerRef.current\n window.addEventListener('mousemove', this.handleChange, {signal})\n window.addEventListener('mouseup', this.handleMouseUp, {signal})\n }\n\n private readonly handleMouseUp = (): void => {\n this.abortControllerRef.current?.abort()\n }\n\n override render(): ReactElement {\n const {hsl, direction = 'horizontal', radius, shadow} = this.props\n const pointerStyle: CSSProperties =\n direction === 'vertical'\n ? {position: 'absolute', left: '0px', top: `${-((hsl.h * 100) / 360) + 100}%`}\n : {position: 'absolute', left: `${(hsl.h * 100) / 360}%`}\n\n return (\n <div style={{position: 'absolute', inset: 0, borderRadius: radius, boxShadow: shadow}}>\n <HueGradient\n $direction={direction}\n style={{padding: '0 2px', position: 'relative', height: '100%', borderRadius: radius}}\n ref={this.containerRef}\n onMouseDown={this.handleMouseDown}\n onTouchMove={this.handleChange}\n onTouchStart={this.handleChange}\n >\n <div style={pointerStyle}>\n <div\n style={{\n marginTop: '1px',\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n transform: 'translateX(-2px)',\n }}\n />\n </div>\n </HueGradient>\n </div>\n )\n }\n}\n","/**\n * Translates a pointer event over the saturation/value box into a new color.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/saturation.js | react-color's saturation helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {HSLColor, PickerEvent, SaturationColorResult} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n hsl: HSLColor,\n container: HTMLElement,\n): SaturationColorResult {\n const {width: containerWidth, height: containerHeight} = container.getBoundingClientRect()\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n let left = x - (container.getBoundingClientRect().left + window.scrollX)\n let top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (left < 0) {\n left = 0\n } else if (left > containerWidth) {\n left = containerWidth\n }\n\n if (top < 0) {\n top = 0\n } else if (top > containerHeight) {\n top = containerHeight\n }\n\n const saturation = left / containerWidth\n const bright = 1 - top / containerHeight\n\n return {h: hsl.h, s: saturation, v: bright, a: hsl.a ?? 1, source: 'hsv'}\n}\n","/**\n * Saturation / value box.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Saturation.js | react-color's Saturation}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). The upstream raw `<style>` tag holding the static white/black\n * gradients has been replaced with `styled-components` elements, `reactcss`\n * removed, and `lodash` swapped for `lodash-es`.\n */\nimport throttle from 'lodash-es/throttle'\nimport {Component, createRef, type CSSProperties, type ReactElement} from 'react'\nimport {styled} from 'styled-components'\n\nimport * as saturation from './helpers/saturation'\nimport type {\n ColorChangeHandler,\n HSLColor,\n HSVColor,\n PickerEvent,\n SaturationColorResult,\n} from './types'\n\ntype ThrottledChange = ReturnType<\n typeof throttle<\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult) => void\n >\n>\n\nconst SaturationWhite = styled.div`\n background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));\n`\n\nconst SaturationBlack = styled.div`\n background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));\n`\n\nexport interface SaturationProps {\n hsl: HSLColor\n hsv: HSVColor\n radius?: string | undefined\n shadow?: string | undefined\n onChange?: ColorChangeHandler<SaturationColorResult> | undefined\n}\n\nexport class Saturation extends Component<SaturationProps> {\n private containerRef = createRef<HTMLDivElement | null>()\n private abortControllerRef = createRef<AbortController | null>()\n\n private readonly throttle: ThrottledChange = throttle(\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult): void => {\n handler(data)\n },\n 50,\n )\n\n override componentWillUnmount(): void {\n this.throttle.cancel()\n this.abortControllerRef.current?.abort()\n }\n\n private getContainerRenderWindow(): Window {\n const {containerRef} = this\n let renderWindow: Window = window\n while (\n !renderWindow.document.contains(containerRef.current) &&\n renderWindow.parent !== renderWindow\n ) {\n renderWindow = renderWindow.parent\n }\n return renderWindow\n }\n\n private readonly handleChange = (event: PickerEvent): void => {\n if (!this.containerRef.current || typeof this.props.onChange !== 'function') {\n return\n }\n this.throttle(\n this.props.onChange,\n saturation.calculateChange(event, this.props.hsl, this.containerRef.current),\n )\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n this.handleChange(event.nativeEvent)\n const renderWindow = this.getContainerRenderWindow()\n if (this.abortControllerRef.current) {\n this.abortControllerRef.current.abort()\n }\n this.abortControllerRef.current = new AbortController()\n const {signal} = this.abortControllerRef.current\n renderWindow.addEventListener('mousemove', this.handleChange, {signal})\n renderWindow.addEventListener('mouseup', this.handleMouseUp, {signal})\n }\n\n private readonly handleMouseUp = (): void => {\n this.abortControllerRef.current?.abort()\n }\n\n override render(): ReactElement {\n const {hsl, hsv, radius, shadow} = this.props\n const pointerStyle: CSSProperties = {\n position: 'absolute',\n top: `${-(hsv.v * 100) + 100}%`,\n left: `${hsv.s * 100}%`,\n cursor: 'default',\n }\n\n return (\n // oxlint-disable-next-line jsx-a11y/no-static-element-interactions -- the picker surface is dragged via pointer coordinates, which have no keyboard equivalent\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background: `hsl(${hsl.h},100%, 50%)`,\n borderRadius: radius,\n }}\n ref={this.containerRef}\n onMouseDown={this.handleMouseDown}\n onTouchMove={this.handleChange}\n onTouchStart={this.handleChange}\n >\n <SaturationWhite style={{position: 'absolute', inset: 0, borderRadius: radius}}>\n <SaturationBlack\n style={{position: 'absolute', inset: 0, boxShadow: shadow, borderRadius: radius}}\n />\n <div style={pointerStyle}>\n <div\n style={{\n width: '4px',\n height: '4px',\n boxShadow:\n '0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4)',\n borderRadius: '50%',\n cursor: 'pointer',\n transform: 'translate(-2px, -2px)',\n }}\n />\n </div>\n </SaturationWhite>\n </div>\n )\n }\n}\n","import {Box, Flex, useTheme} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {\n type Color,\n type ColorChangeHandler,\n EditableInput,\n type EditableInputStyles,\n type HSLColor,\n isValidHex,\n type RGBColor,\n} from './react-color'\n\ninterface ColorPickerFieldsProps {\n rgb?: RGBColor\n hsl?: HSLColor\n hex?: string\n disableAlpha: boolean\n onChange: ColorChangeHandler<Color>\n}\n\nexport const ColorPickerFields = ({\n onChange,\n rgb,\n hsl,\n hex,\n disableAlpha,\n}: ColorPickerFieldsProps): React.JSX.Element => {\n const {sanity} = useTheme()\n\n const inputStyles: EditableInputStyles = useMemo(\n () => ({\n input: {\n width: '80%',\n padding: '4px 10% 3px',\n border: 'none',\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n boxShadow: `inset 0 0 0 1px ${sanity.color.input.default.enabled.border}`,\n // oxlint-disable-next-line typescript/no-deprecated\n color: sanity.color.input.default.enabled.fg,\n // oxlint-disable-next-line typescript/no-deprecated\n backgroundColor: sanity.color.input.default.enabled.bg,\n // oxlint-disable-next-line typescript/no-deprecated\n fontSize: sanity.fonts.text.sizes[0]?.fontSize,\n textAlign: 'center',\n },\n label: {\n display: 'block',\n textAlign: 'center',\n // oxlint-disable-next-line typescript/no-deprecated\n fontSize: sanity.fonts.label.sizes[0]?.fontSize,\n // oxlint-disable-next-line typescript/no-deprecated\n color: sanity.color.base.fg,\n paddingTop: '3px',\n paddingBottom: '4px',\n textTransform: 'capitalize',\n },\n }),\n [sanity],\n )\n\n const handleChange: ColorChangeHandler<Record<string, string>> = useCallback(\n (data) => {\n if ('hex' in data && data['hex'] && isValidHex(data['hex'])) {\n onChange({\n hex: data['hex'],\n source: 'hex',\n })\n } else if (\n rgb &&\n (('r' in data && data['r']) || ('g' in data && data['g']) || ('b' in data && data['b']))\n ) {\n onChange({\n r: Number(data['r']) || rgb.r,\n g: Number(data['g']) || rgb.g,\n b: Number(data['b']) || rgb.b,\n a: rgb.a,\n source: 'rgb',\n })\n } else if (hsl && 'a' in data && data['a']) {\n let alpha = Number(data['a'])\n if (alpha < 0) {\n alpha = 0\n } else if (alpha > 100) {\n alpha = 100\n }\n alpha /= 100\n\n onChange({\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: alpha,\n source: 'hsl',\n })\n }\n },\n [onChange, hsl, rgb],\n )\n\n return (\n <Flex>\n <Box flex={2} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"hex\"\n value={hex?.replace('#', '')}\n onChange={handleChange}\n />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"r\"\n value={rgb?.r}\n onChange={handleChange}\n dragLabel\n dragMax={255}\n />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"g\"\n value={rgb?.g}\n onChange={handleChange}\n dragLabel\n dragMax={255}\n />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"b\"\n value={rgb?.b}\n onChange={handleChange}\n dragLabel\n dragMax={255}\n />\n </Box>\n {!disableAlpha && (\n <Box flex={1}>\n <EditableInput\n style={inputStyles}\n label=\"a\"\n value={Math.round((rgb?.a ?? 1) * 100)}\n onChange={handleChange}\n dragLabel\n dragMax={100}\n />\n </Box>\n )}\n </Flex>\n )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Card, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {startTransition, useOptimistic, useRef} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {ColorList} from './ColorList'\nimport {ColorPickerFields} from './ColorPickerFields'\nimport {\n Alpha,\n Checkboard,\n type Color,\n type ColorState,\n Hue,\n Saturation,\n simpleCheckForValidColor,\n toState,\n} from './react-color'\nimport type {ColorSchemaType, ColorValue} from './types'\n\nconst ColorBox = styled(Box)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`\n\nconst ReadOnlyContainer = styled(Flex)`\n margin-top: 6rem;\n background-color: var(--card-bg-color);\n position: relative;\n width: 100%;\n`\n\ninterface ColorPickerProps {\n width?: string\n disableAlpha: boolean\n colorList?: Array<Color> | undefined\n readOnly?: boolean\n onChange: (color: ColorState) => void\n onUnset: () => void\n color: ColorValue\n}\n\nconst ColorPicker = (props: ColorPickerProps) => {\n const {\n width,\n color: {rgb, hex, hsv, hsl},\n onChange: onChangeProp,\n onUnset,\n disableAlpha,\n colorList,\n readOnly,\n } = props\n\n // Remembers the hue across achromatic colors (saturation 0), where the hue\n // can't be recovered from the color value itself. While the color is\n // chromatic the live `hsl` prop is authoritative — so external value changes\n // (undo, remote sync) are picked up — and the ref only bridges achromatic\n // spans. Adapted from react-color's `ColorWrap` HOC (MIT, Copyright (c) 2015\n // Case Sandberg).\n const oldHueRef = useRef(hsl?.h ?? 0)\n\n const onChange = (data: Color): void => {\n if (!simpleCheckForValidColor(data)) {\n return\n }\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const oldHue = hsl && hsl.s > 0 ? hsl.h : oldHueRef.current\n const nextColor = toState(data, incomingHue || oldHue)\n oldHueRef.current = nextColor.oldHue\n onChangeProp(nextColor)\n }\n\n if (!hsl || !hsv) {\n return null\n }\n\n return (\n <div style={{width}}>\n <Card padding={1} border radius={1}>\n <Stack gap={2}>\n {!readOnly && (\n <>\n <Card overflow=\"hidden\" style={{position: 'relative', height: '5em'}}>\n <Saturation onChange={onChange} hsl={hsl} hsv={hsv} />\n </Card>\n\n <Card\n shadow={1}\n radius={3}\n overflow=\"hidden\"\n style={{position: 'relative', height: '10px'}}\n >\n <Hue hsl={hsl} onChange={!readOnly && onChange} />\n </Card>\n\n {!disableAlpha && (\n <Card\n shadow={1}\n radius={3}\n overflow=\"hidden\"\n style={{position: 'relative', height: '10px', background: '#fff'}}\n >\n <Alpha rgb={rgb} hsl={hsl} onChange={onChange} />\n </Card>\n )}\n </>\n )}\n <Flex>\n <Card\n flex={1}\n radius={2}\n overflow=\"hidden\"\n style={{position: 'relative', minWidth: '4em', background: '#fff'}}\n >\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox\n style={{\n backgroundColor: `rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`,\n }}\n />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>\n\n {!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <Box style={{width: 200}}>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </Box>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )}\n </Flex>\n {colorList && <ColorList colors={colorList} onChange={onChange} />}\n </Stack>\n </Card>\n </div>\n )\n}\n\nconst DEFAULT_COLOR: ColorValue & {source: string} = {\n hex: '#24a3e3',\n hsl: {h: 200, s: 0.7732, l: 0.5156, a: 1},\n hsv: {h: 200, s: 0.8414, v: 0.8901, a: 1},\n rgb: {r: 46, g: 163, b: 227, a: 1},\n source: 'hex',\n}\n\nexport default function ColorInput(props: ObjectInputProps): React.JSX.Element {\n const {onChange, readOnly} = props\n // oxlint-disable-next-line no-unsafe-type-assertion\n const _value = props.value as ColorValue | undefined\n const [value, setColorOptimistic] = useOptimistic(_value)\n const type = props.schemaType as ColorSchemaType\n const focusRef = useRef<HTMLButtonElement>(null)\n\n function handleChange(nextColor: ColorValue) {\n const fieldPatches = type.fields\n .filter((field) => field.name in nextColor)\n .map((field) => {\n // oxlint-disable-next-line no-unsafe-type-assertion\n const nextFieldValue = nextColor[field.name as keyof ColorValue]\n const isObject = field.type.jsonType === 'object'\n return set(\n isObject ? Object.assign({_type: field.type.name}, nextFieldValue) : nextFieldValue,\n [field.name],\n )\n })\n\n onChange([\n setIfMissing({_type: type.name}),\n set(type.name, ['_type']),\n set(nextColor.rgb?.a, ['alpha']),\n ...fieldPatches,\n ])\n }\n\n return (\n <>\n {value && value.hex ? (\n <ColorPicker\n color={value}\n onChange={(nextColor) =>\n startTransition(() => {\n setColorOptimistic(nextColor)\n handleChange(nextColor)\n })\n }\n readOnly={readOnly || (typeof type.readOnly === 'boolean' && type.readOnly)}\n disableAlpha={!!type.options?.disableAlpha}\n colorList={type.options?.colorList}\n onUnset={() =>\n startTransition(() => {\n setColorOptimistic(undefined)\n onChange(unset())\n })\n }\n />\n ) : (\n <Button\n icon={AddIcon}\n mode=\"ghost\"\n text=\"Create color\"\n ref={focusRef}\n disabled={Boolean(readOnly)}\n onClick={() =>\n startTransition(() => {\n setColorOptimistic(DEFAULT_COLOR)\n handleChange(DEFAULT_COLOR)\n })\n }\n />\n )}\n </>\n )\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/react-color/types.ts","../src/types.ts","../src/schemas/color.tsx","../src/schemas/hslaColor.ts","../src/schemas/hsvaColor.ts","../src/schemas/rgbaColor.ts","../src/ColorInput.tsx","../src/LazyColorInput.tsx","../src/index.ts"],"mappings":";;UAeiB;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;KAGU,iBAAiB,WAAW,WAAW,WAAW;UCxC7C;EACf;EACA,KAAK;EACL,KAAK;EACL,KAAK;;UAGU,qBAAqB,KAAK;EACzC;EACA,YAAY,MAAM;;KAGR,kBAAkB,KAAK;EACjC,UAAU;;KAEA,kBAAkB,iBAAiB,YAAY;cCZrD;;;;UAKW,wBAAwB,KAAK;EAC5C,aAAa;EACb,UAAU;;;YAKO;IACf,OAAO;;;cAIE;;;;;;;;;;;cCtBA;;;;;;cCAA;;;;;;cCAA;;;;;;iBCmKW,aAAW,OAAO,mBAAmB,MAAM,IAAI;cCnK1D,4BAAU,2BAAV;cCKA,6BAAU"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/react-color/types.ts","../src/types.ts","../src/schemas/color.tsx","../src/schemas/hslaColor.ts","../src/schemas/hsvaColor.ts","../src/schemas/rgbaColor.ts","../src/ColorInput.tsx","../src/LazyColorInput.tsx","../src/index.ts"],"mappings":";;UAeiB;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA;;KAGU,iBAAiB,WAAW,WAAW,WAAW;UCxC7C;EACf;EACA,KAAK;EACL,KAAK;EACL,KAAK;;UAGU,qBAAqB,KAAK;EACzC;EACA,YAAY,MAAM;;KAGR,kBAAkB,KAAK;EACjC,UAAU;;KAEA,kBAAkB,iBAAiB,YAAY;cCZrD;;;;UAKW,wBAAwB,KAAK;EAC5C,aAAa;EACb,UAAU;;;YAKO;IACf,OAAO;;;cAIE;;;;;;;;;;;cCtBA;;;;;;cCAA;;;;;;cCAA;;;;;;iBCsLW,aAAW,OAAO,mBAAmB,MAAM,IAAI;cCtL1D,4BAAU,2BAAV;cCKA,6BAAU"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { definePlugin, defineType } from "sanity";
2
2
  import { lazy } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
- const ColorInput = lazy(() => import("./ColorInput-DVFi-Bal.js")), round = (val = 1) => Math.round(val * 100), color = defineType({
4
+ const ColorInput = lazy(() => import("./ColorInput-C2ZSNt70.js")), round = (val = 1) => Math.round(val * 100), color = defineType({
5
5
  name: "color",
6
6
  type: "object",
7
7
  title: "Color",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/color-input",
3
- "version": "6.0.16",
3
+ "version": "6.0.18",
4
4
  "description": "Color input",
5
5
  "keywords": [
6
6
  "cms",
@@ -32,14 +32,14 @@
32
32
  "./package.json": "./package.json"
33
33
  },
34
34
  "dependencies": {
35
- "@sanity/icons": "^5.1.0",
36
- "@sanity/ui": "^3.3.5",
35
+ "@sanity/icons": "^5.2.0",
36
+ "@sanity/ui": "^3.4.0",
37
37
  "lodash-es": "^4.18.1",
38
38
  "tinycolor2": "^1.6.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@sanity/tsconfig": "^2.2.1",
42
- "@sanity/tsdown-config": "^0.19.3",
42
+ "@sanity/tsdown-config": "^0.19.6",
43
43
  "@types/lodash-es": "^4.17.12",
44
44
  "@types/node": "^24.13.3",
45
45
  "@types/react": "^19.2.17",
@@ -47,8 +47,8 @@
47
47
  "babel-plugin-react-compiler": "^1.0.0",
48
48
  "react": "^19.2.7",
49
49
  "sanity": "^6.5.0",
50
- "styled-components": "^6.4.3",
51
- "tsdown": "^0.22.9"
50
+ "styled-components": "^6.4.4",
51
+ "tsdown": "^0.22.12"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "react": "^19.2",
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorInput-DVFi-Bal.js","names":["Flex","styled","tinycolor","Color","ColorChangeHandler","ColorListWrap","ColorBoxContainer","div","ColorBox","ValidatedColor","key","color","backgroundColor","ColorListProps","colors","Array","onChange","validateColors","seen","Set","reduce","cls","c","hex","isValid","toRgbString","JSON","stringify","has","add","push","ColorList","t0","$","_c","t1","t2","t3","background","map","checkboardCache","Record","render","c1","c2","size","serverCanvas","HTMLCanvasElement","document","canvas","createElement","width","height","ctx","getContext","fillStyle","fillRect","translate","toDataURL","get","key","cached","checkboard","ReactElement","checkboard","CheckboardRenderers","RenderersProps","EMPTY_RENDERERS","CheckboardProps","white","grey","size","borderRadius","boxShadow","Checkboard","t0","$","_c","t1","t2","t3","renderers","t4","undefined","t5","canvas","get","background","t6","t7","position","inset","AlphaColorResult","HSLColor","PickerEvent","calculateChange","e","hsl","direction","initialA","container","HTMLElement","containerWidth","clientWidth","containerHeight","clientHeight","x","touches","pageX","y","pageY","left","getBoundingClientRect","window","scrollX","top","scrollY","a","Math","round","h","s","l","source","Component","CSSProperties","ReactElement","Checkboard","alpha","AlphaColorResult","CheckboardRenderers","ColorChangeHandler","HSLColor","PickerEvent","RGBColor","AlphaProps","rgb","hsl","a","direction","radius","shadow","renderers","onChange","Alpha","container","HTMLDivElement","componentWillUnmount","unbindEventListeners","setContainerRef","node","handleChange","event","change","calculateChange","props","handleMouseDown","React","MouseEvent","nativeEvent","window","addEventListener","handleMouseUp","removeEventListener","render","alphaValue","gradient","r","g","b","pointerStyle","position","left","top","inset","borderRadius","overflow","background","boxShadow","height","margin","width","marginTop","transform","tinycolor","Color","ColorState","VALIDATION_KEYS","Set","PERCENT_PATTERN","simpleCheckForValidColor","data","checked","passed","key","value","Object","entries","has","Number","isNaN","test","String","toState","oldHue","instance","hex","hsl","toHsl","hsv","toHsv","rgb","toRgb","toHex","s","h","transparent","a","incomingHue","undefined","source","isValidHex","lh","charAt","length","isValid","PureComponent","ComponentType","ReactElement","simpleCheckForValidColor","toState","Color","ColorState","CustomPickerInjectedProps","CustomPickerProps","Diff","Pick","T","Exclude","U","DEFAULT_COLOR","h","s","l","a","CustomPicker","Picker","A","OuterProps","ColorPicker","getDerivedStateFromProps","nextProps","state","color","oldHue","constructor","props","handleChange","data","incomingHue","undefined","colors","setState","onChange","render","injected","hsl","hsv","rgb","hex","source","pickerProps","Component","ChangeEvent","CSSProperties","KeyboardEvent","ReactKeyboardEvent","ReactElement","EditableInputStyles","DEFAULT_ARROW_OFFSET","getNumberValue","value","Number","String","replace","idCounter","EditableInputEvent","HTMLInputElement","MouseEvent","EditableInputProps","label","style","arrowOffset","placeholder","hideLabel","dragLabel","dragMax","onChange","Record","event","EditableInputState","blurValue","EditableInput","inputId","input","constructor","props","initialValue","toUpperCase","state","componentDidUpdate","prevProps","prevState","nextValue","isFocused","document","activeElement","setState","componentWillUnmount","unbindEventListeners","setInputRef","getValueObjectWithLabel","getArrowOffset","setUpdatedValue","handleBlur","handleChange","target","handleKeyDown","currentTarget","isUp","key","isDown","isNaN","offset","updatedValue","handleDrag","numericValue","newValue","Math","round","movementX","undefined","handleMouseDown","React","HTMLLabelElement","preventDefault","nativeEvent","window","addEventListener","handleMouseUp","removeEventListener","render","wrapStyle","position","wrap","inputStyle","labelStyle","cursor","HSLColor","HueColorResult","PickerEvent","calculateChange","e","direction","hsl","container","HTMLElement","containerWidth","clientWidth","containerHeight","clientHeight","x","touches","pageX","y","pageY","left","getBoundingClientRect","window","scrollX","top","scrollY","h","percent","s","l","a","source","Component","CSSProperties","ReactElement","styled","hue","ColorChangeHandler","HSLColor","HueColorResult","PickerEvent","HueGradient","div","$direction","HueProps","hsl","direction","radius","shadow","onChange","Hue","container","HTMLDivElement","componentWillUnmount","unbindEventListeners","setContainerRef","node","handleChange","event","change","calculateChange","props","handleMouseDown","React","MouseEvent","nativeEvent","window","addEventListener","handleMouseUp","removeEventListener","render","pointerStyle","position","left","top","h","inset","borderRadius","boxShadow","padding","height","marginTop","width","background","transform","HSLColor","PickerEvent","SaturationColorResult","calculateChange","e","hsl","container","HTMLElement","width","containerWidth","height","containerHeight","getBoundingClientRect","x","touches","pageX","y","pageY","left","window","scrollX","top","scrollY","saturation","bright","h","s","v","a","source","throttle","Component","CSSProperties","ReactElement","styled","saturation","ColorChangeHandler","HSLColor","HSVColor","PickerEvent","SaturationColorResult","ThrottledChange","ReturnType","handler","data","SaturationWhite","div","SaturationBlack","SaturationProps","hsl","hsv","radius","shadow","onChange","Saturation","container","HTMLDivElement","componentWillUnmount","cancel","unbindEventListeners","setContainerRef","node","getContainerRenderWindow","Window","renderWindow","window","document","contains","parent","handleChange","event","props","calculateChange","handleMouseDown","React","MouseEvent","nativeEvent","addEventListener","handleMouseUp","removeEventListener","render","pointerStyle","position","top","v","left","s","cursor","inset","background","h","borderRadius","boxShadow","width","height","transform","Box","Flex","useTheme","useCallback","useMemo","Color","ColorChangeHandler","EditableInput","EditableInputStyles","HSLColor","isValidHex","RGBColor","ColorPickerFieldsProps","rgb","hsl","hex","disableAlpha","onChange","ColorPickerFields","t0","$","_c","sanity","t1","color","input","default","enabled","border","t2","fonts","text","sizes","fontSize","t3","bg","fg","width","padding","boxShadow","backgroundColor","textAlign","t4","label","t5","base","display","paddingTop","paddingBottom","textTransform","t6","inputStyles","t7","data","source","r","g","b","Number","a","alpha","h","s","l","handleChange","t8","replace","t9","t10","t11","t12","t13","t14","t15","t16","Math","round","t17","AddIcon","TrashIcon","Box","Button","Card","Flex","Inline","Stack","Text","startTransition","useOptimistic","useRef","ObjectInputProps","set","setIfMissing","unset","styled","ColorList","ColorPickerFields","Alpha","Checkboard","Color","CustomPicker","CustomPickerInjectedProps","Hue","Saturation","ColorSchemaType","ColorValue","ColorBox","ReadOnlyContainer","ColorPickerProps","width","disableAlpha","colorList","Array","readOnly","onUnset","color","ColorPickerInner","props","$","_c","t0","onChange","rgb","hex","hsv","hsl","t1","t2","position","height","background","t3","t4","Symbol","for","minWidth","t5","r","g","b","a","t6","backgroundColor","t7","h","l","s","Math","round","t8","t9","t10","t11","t12","t13","ColorPicker","DEFAULT_COLOR","source","v","ColorInput","_value","value","setColorOptimistic","type","schemaType","focusRef","handleChange","nextColor","fieldPatches","fields","filter","field","name","map","field_0","nextFieldValue","isObject","jsonType","Object","assign","_type","nextColor_0","options","undefined","Boolean"],"sources":["../src/ColorList.tsx","../src/react-color/helpers/checkboard.ts","../src/react-color/Checkboard.tsx","../src/react-color/helpers/alpha.ts","../src/react-color/Alpha.tsx","../src/react-color/helpers/color.ts","../src/react-color/ColorWrap.tsx","../src/react-color/EditableInput.tsx","../src/react-color/helpers/hue.ts","../src/react-color/Hue.tsx","../src/react-color/helpers/saturation.ts","../src/react-color/Saturation.tsx","../src/ColorPickerFields.tsx","../src/ColorInput.tsx"],"sourcesContent":["import {Flex} from '@sanity/ui'\nimport {styled} from 'styled-components'\nimport tinycolor from 'tinycolor2'\n\nimport type {Color, ColorChangeHandler} from './react-color'\n\nconst ColorListWrap = styled(Flex)`\n gap: 0.25em;\n`\n\nconst ColorBoxContainer = styled.div`\n width: 2.1em;\n height: 2.1em;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n border-radius: 3px;\n background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAADFJREFUOE9jZGBgEGHAD97gk2YcNYBhmIQBgWSAP52AwoAQwJvQRg1gACckQoC2gQgAIF8IscwEtKYAAAAASUVORK5CYII=')\n left center #fff;\n`\n\nconst ColorBox = styled.div`\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px var(--card-shadow-outline-color);\n content: '';\n position: absolute;\n inset: 0;\n z-index: 1;\n`\n\ninterface ValidatedColor {\n key: string\n color: Color\n backgroundColor: string\n}\n\ninterface ColorListProps {\n colors?: Array<Color>\n onChange: ColorChangeHandler<Color>\n}\n\nconst validateColors = (colors: Array<Color>) => {\n const seen = new Set<string>()\n return colors.reduce((cls: Array<ValidatedColor>, c) => {\n // @ts-expect-error fix types later\n const color = c.hex ? tinycolor(c.hex) : tinycolor(c)\n if (color.isValid()) {\n const backgroundColor = color.toRgbString()\n const key = JSON.stringify({color: c, backgroundColor})\n if (!seen.has(key)) {\n seen.add(key)\n cls.push({key, color: c, backgroundColor})\n }\n }\n return cls\n }, [])\n}\n\nexport function ColorList({colors, onChange}: ColorListProps): React.JSX.Element | null {\n if (!colors) return null\n return (\n <ColorListWrap wrap=\"wrap\">\n {validateColors(colors).map(({key, color, backgroundColor}) => (\n <ColorBoxContainer\n key={key}\n onClick={() => {\n onChange(color)\n }}\n >\n <ColorBox style={{background: backgroundColor}} />\n </ColorBoxContainer>\n ))}\n </ColorListWrap>\n )\n}\n","/**\n * Renders a checkerboard pattern as a data URL, used as the transparency backdrop.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/checkboard.js | react-color's checkboard helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\n\nconst checkboardCache: Record<string, string | null> = {}\n\nfunction render(\n c1: string,\n c2: string,\n size: number,\n serverCanvas?: new () => HTMLCanvasElement,\n): string | null {\n if (typeof document === 'undefined' && !serverCanvas) {\n return null\n }\n const canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas')\n canvas.width = size * 2\n canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n // If no context can be found, return early.\n return null\n }\n ctx.fillStyle = c1\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = c2\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nexport function get(\n c1: string,\n c2: string,\n size: number,\n serverCanvas?: new () => HTMLCanvasElement,\n): string | null {\n const key = `${c1}-${c2}-${size}${serverCanvas ? '-server' : ''}`\n const cached = checkboardCache[key]\n if (cached) {\n return cached\n }\n const checkboard = render(c1, c2, size, serverCanvas)\n checkboardCache[key] = checkboard\n return checkboard\n}\n","/**\n * Checkerboard transparency backdrop.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Checkboard.js | react-color's Checkboard}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE. The upstream\n * `children` cloning branch is dropped as it is unused here.\n */\nimport type {ReactElement} from 'react'\n\nimport * as checkboard from './helpers/checkboard'\nimport type {CheckboardRenderers, RenderersProps} from './types'\n\nconst EMPTY_RENDERERS: CheckboardRenderers = {}\n\nexport interface CheckboardProps extends RenderersProps {\n white?: string | undefined\n grey?: string | undefined\n size?: number | undefined\n borderRadius?: string | undefined\n boxShadow?: string | undefined\n}\n\nexport function Checkboard({\n white = 'transparent',\n grey = 'rgba(0,0,0,.08)',\n size = 8,\n renderers = EMPTY_RENDERERS,\n borderRadius,\n boxShadow,\n}: CheckboardProps): ReactElement {\n const background = checkboard.get(white, grey, size, renderers.canvas)\n return (\n <div\n style={{\n borderRadius,\n boxShadow,\n position: 'absolute',\n inset: 0,\n background: background ? `url(${background}) center left` : undefined,\n }}\n />\n )\n}\n","/**\n * Translates a pointer event over the alpha track into a new alpha value.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/alpha.js | react-color's alpha helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {AlphaColorResult, HSLColor, PickerEvent} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n hsl: HSLColor,\n direction: 'horizontal' | 'vertical' | undefined,\n initialA: number | undefined,\n container: HTMLElement,\n): AlphaColorResult | null {\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n const left = x - (container.getBoundingClientRect().left + window.scrollX)\n const top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (direction === 'vertical') {\n let a: number\n if (top < 0) {\n a = 0\n } else if (top > containerHeight) {\n a = 1\n } else {\n a = Math.round((top * 100) / containerHeight) / 100\n }\n\n if (hsl.a !== a) {\n return {h: hsl.h, s: hsl.s, l: hsl.l, a, source: 'rgb'}\n }\n return null\n }\n\n let a: number\n if (left < 0) {\n a = 0\n } else if (left > containerWidth) {\n a = 1\n } else {\n a = Math.round((left * 100) / containerWidth) / 100\n }\n\n if (initialA !== a) {\n return {h: hsl.h, s: hsl.s, l: hsl.l, a, source: 'rgb'}\n }\n return null\n}\n","/**\n * Alpha (transparency) slider.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Alpha.js | react-color's Alpha}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). `reactcss` has been removed in favor of plain inline styles,\n * and the unused custom `pointer` slot dropped.\n */\nimport {Component} from 'react'\nimport type {CSSProperties, ReactElement} from 'react'\n\nimport {Checkboard} from './Checkboard'\nimport * as alpha from './helpers/alpha'\nimport type {\n AlphaColorResult,\n CheckboardRenderers,\n ColorChangeHandler,\n HSLColor,\n PickerEvent,\n RGBColor,\n} from './types'\n\nexport interface AlphaProps {\n rgb: RGBColor\n hsl: HSLColor\n a?: number | undefined\n direction?: 'horizontal' | 'vertical' | undefined\n radius?: string | undefined\n shadow?: string | undefined\n renderers?: CheckboardRenderers | undefined\n onChange?: ColorChangeHandler<AlphaColorResult> | undefined\n}\n\nexport class Alpha extends Component<AlphaProps> {\n private container: HTMLDivElement | null = null\n\n override componentWillUnmount(): void {\n this.unbindEventListeners()\n }\n\n private readonly setContainerRef = (node: HTMLDivElement | null): void => {\n this.container = node\n }\n\n private readonly handleChange = (event: PickerEvent): void => {\n if (!this.container) {\n return\n }\n const change = alpha.calculateChange(\n event,\n this.props.hsl,\n this.props.direction,\n this.props.a,\n this.container,\n )\n if (change && typeof this.props.onChange === 'function') {\n this.props.onChange(change)\n }\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n this.handleChange(event.nativeEvent)\n window.addEventListener('mousemove', this.handleChange)\n window.addEventListener('mouseup', this.handleMouseUp)\n }\n\n private readonly handleMouseUp = (): void => {\n this.unbindEventListeners()\n }\n\n private readonly unbindEventListeners = (): void => {\n window.removeEventListener('mousemove', this.handleChange)\n window.removeEventListener('mouseup', this.handleMouseUp)\n }\n\n override render(): ReactElement {\n const {rgb, direction, radius, shadow, renderers} = this.props\n const alphaValue = rgb.a ?? 1\n const gradient =\n direction === 'vertical'\n ? `linear-gradient(to bottom, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`\n : `linear-gradient(to right, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`\n const pointerStyle: CSSProperties =\n direction === 'vertical'\n ? {position: 'absolute', left: 0, top: `${alphaValue * 100}%`}\n : {position: 'absolute', left: `${alphaValue * 100}%`}\n\n return (\n <div style={{position: 'absolute', inset: 0, borderRadius: radius}}>\n <div style={{position: 'absolute', inset: 0, overflow: 'hidden', borderRadius: radius}}>\n <Checkboard renderers={renderers} />\n </div>\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background: gradient,\n boxShadow: shadow,\n borderRadius: radius,\n }}\n />\n {/* oxlint-disable-next-line jsx-a11y/no-static-element-interactions -- the slider surface is dragged via pointer coordinates, which have no keyboard equivalent */}\n <div\n style={{position: 'relative', height: '100%', margin: '0 3px'}}\n ref={this.setContainerRef}\n onMouseDown={this.handleMouseDown}\n onTouchMove={this.handleChange}\n onTouchStart={this.handleChange}\n >\n <div style={pointerStyle}>\n <div\n style={{\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n marginTop: '1px',\n transform: 'translateX(-2px)',\n }}\n />\n </div>\n </div>\n </div>\n )\n }\n}\n","/**\n * Color conversion and validation helpers built on `tinycolor2`.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/color.js | react-color's color helpers}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport tinycolor from 'tinycolor2'\n\nimport type {Color, ColorState} from '../types'\n\nconst VALIDATION_KEYS = new Set(['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'])\nconst PERCENT_PATTERN = /^\\d+%$/\n\nexport function simpleCheckForValidColor(data: Color): Color | false {\n if (typeof data === 'string') {\n return data\n }\n\n let checked = 0\n let passed = 0\n for (const [key, value] of Object.entries(data)) {\n if (!VALIDATION_KEYS.has(key) || !value) {\n continue\n }\n checked += 1\n if (!Number.isNaN(Number(value))) {\n passed += 1\n }\n if ((key === 's' || key === 'l') && PERCENT_PATTERN.test(String(value))) {\n passed += 1\n }\n }\n\n return checked === passed ? data : false\n}\n\nexport function toState(data: Color, oldHue?: number): ColorState {\n const instance =\n typeof data === 'string'\n ? tinycolor(data)\n : 'hex' in data\n ? tinycolor(data.hex)\n : tinycolor(data)\n const hsl = instance.toHsl()\n const hsv = instance.toHsv()\n const rgb = instance.toRgb()\n const hex = instance.toHex()\n\n if (hsl.s === 0) {\n hsl.h = oldHue ?? 0\n hsv.h = oldHue ?? 0\n }\n\n const transparent = hex === '000000' && rgb.a === 0\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const source = typeof data === 'string' ? undefined : data.source\n\n return {\n hsl,\n hex: transparent ? 'transparent' : `#${hex}`,\n rgb,\n hsv,\n oldHue: incomingHue || oldHue || hsl.h,\n source: source ?? '',\n }\n}\n\nexport function isValidHex(hex: string): boolean {\n if (hex === 'transparent') {\n return true\n }\n // Disallow hex4 and hex8 (with alpha) to match the original behavior.\n const lh = hex.charAt(0) === '#' ? 1 : 0\n return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid()\n}\n","/**\n * `CustomPicker` higher-order component: manages color state and injects the\n * normalized color (`hsl`/`hsv`/`rgb`/`hex`) plus an `onChange` handler into the\n * wrapped picker.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/ColorWrap.js | react-color's ColorWrap}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). `prop-types` and the unused `lodash` `debounce` of\n * `onChangeComplete` have been removed.\n */\nimport {PureComponent} from 'react'\nimport type {ComponentType, ReactElement} from 'react'\n\nimport {simpleCheckForValidColor, toState} from './helpers/color'\nimport type {Color, ColorState, CustomPickerInjectedProps, CustomPickerProps} from './types'\n\ntype Diff<T, U> = Pick<T, Exclude<keyof T, keyof U>>\n\nconst DEFAULT_COLOR: Color = {h: 250, s: 0.5, l: 0.2, a: 1}\n\nexport function CustomPicker<A extends object>(\n Picker: ComponentType<A & CustomPickerInjectedProps>,\n): ComponentType<Diff<A, CustomPickerProps> & CustomPickerProps> {\n type OuterProps = Diff<A, CustomPickerProps> & CustomPickerProps\n\n class ColorPicker extends PureComponent<OuterProps, ColorState> {\n static getDerivedStateFromProps(nextProps: CustomPickerProps, state: ColorState): ColorState {\n return {...toState(nextProps.color ?? DEFAULT_COLOR, state.oldHue)}\n }\n\n constructor(props: OuterProps) {\n super(props)\n this.state = {...toState(props.color ?? DEFAULT_COLOR, 0)}\n }\n\n private readonly handleChange = (data: Color): void => {\n if (!simpleCheckForValidColor(data)) {\n return\n }\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const colors = toState(data, incomingHue || this.state.oldHue)\n this.setState(colors)\n this.props.onChange?.(colors)\n }\n\n override render(): ReactElement {\n const injected: CustomPickerInjectedProps = {\n hsl: this.state.hsl,\n hsv: this.state.hsv,\n rgb: this.state.rgb,\n hex: this.state.hex,\n oldHue: this.state.oldHue,\n source: this.state.source,\n onChange: this.handleChange,\n }\n // The merged props satisfy the wrapped picker's contract at runtime, but the\n // generic `Diff` plumbing can't be expressed to the type-checker.\n // oxlint-disable-next-line no-unsafe-type-assertion\n const pickerProps = {...this.props, ...injected} as A & CustomPickerInjectedProps\n return <Picker {...pickerProps} />\n }\n }\n\n return ColorPicker\n}\n","/**\n * Labeled text input with arrow-key stepping and drag-to-change support.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/EditableInput.js | react-color's EditableInput}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round; converting to a function component\n * (with `useId`, `useRef`, etc.) is deferred to a follow-up PR. `reactcss` and\n * `prop-types` have been removed, and deprecated `keyCode` checks replaced with\n * `event.key`.\n */\nimport {Component} from 'react'\nimport type {\n ChangeEvent,\n CSSProperties,\n KeyboardEvent as ReactKeyboardEvent,\n ReactElement,\n} from 'react'\n\nimport type {EditableInputStyles} from './types'\n\nconst DEFAULT_ARROW_OFFSET = 1\n\nconst getNumberValue = (value: string | number): number => Number(String(value).replace(/%/g, ''))\n\nlet idCounter = 1\n\ntype EditableInputEvent =\n | ChangeEvent<HTMLInputElement>\n | ReactKeyboardEvent<HTMLInputElement>\n | MouseEvent\n\nexport interface EditableInputProps {\n label: string\n value?: string | number | undefined\n style?: EditableInputStyles | undefined\n arrowOffset?: number | undefined\n placeholder?: string | undefined\n hideLabel?: boolean | undefined\n dragLabel?: boolean | undefined\n dragMax?: number | undefined\n onChange?: ((value: Record<string, string>, event: EditableInputEvent) => void) | undefined\n}\n\ninterface EditableInputState {\n value: string\n blurValue: string\n}\n\nexport class EditableInput extends Component<EditableInputProps, EditableInputState> {\n private readonly inputId: string\n private input: HTMLInputElement | null = null\n\n constructor(props: EditableInputProps) {\n super(props)\n const initialValue = String(props.value ?? '').toUpperCase()\n this.state = {value: initialValue, blurValue: initialValue}\n this.inputId = `rc-editable-input-${idCounter++}`\n }\n\n override componentDidUpdate(prevProps: EditableInputProps, prevState: EditableInputState): void {\n if (\n this.props.value !== this.state.value &&\n (prevProps.value !== this.props.value || prevState.value !== this.state.value)\n ) {\n const nextValue = String(this.props.value ?? '').toUpperCase()\n const isFocused = this.input === document.activeElement\n // Sync the controlled value into local state, but only when the input is\n // not focused so we don't clobber what the user is typing. This needs a\n // post-update `activeElement` check that `getDerivedStateFromProps` can't do.\n // oxlint-disable-next-line react/no-did-update-set-state\n this.setState(\n isFocused\n ? {blurValue: nextValue}\n : {value: nextValue, blurValue: this.state.blurValue ? '' : nextValue},\n )\n }\n }\n\n override componentWillUnmount(): void {\n this.unbindEventListeners()\n }\n\n private readonly setInputRef = (input: HTMLInputElement | null): void => {\n this.input = input\n }\n\n private readonly getValueObjectWithLabel = (value: string | number): Record<string, string> => {\n return {[this.props.label]: String(value)}\n }\n\n private readonly getArrowOffset = (): number => this.props.arrowOffset ?? DEFAULT_ARROW_OFFSET\n\n private readonly setUpdatedValue = (value: string | number, event: EditableInputEvent): void => {\n this.props.onChange?.(this.getValueObjectWithLabel(value), event)\n this.setState({value: String(value)})\n }\n\n private readonly handleBlur = (): void => {\n if (this.state.blurValue) {\n this.setState({value: this.state.blurValue, blurValue: ''})\n }\n }\n\n private readonly handleChange = (event: ChangeEvent<HTMLInputElement>): void => {\n this.setUpdatedValue(event.target.value, event)\n }\n\n private readonly handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>): void => {\n // If `event.target.value` is a percentage, drop the `%` before stepping.\n // https://github.com/casesandberg/react-color/issues/383\n const value = getNumberValue(event.currentTarget.value)\n const isUp = event.key === 'ArrowUp'\n const isDown = event.key === 'ArrowDown'\n if (!Number.isNaN(value) && (isUp || isDown)) {\n const offset = this.getArrowOffset()\n const updatedValue = isUp ? value + offset : value - offset\n this.setUpdatedValue(updatedValue, event)\n }\n }\n\n private readonly handleDrag = (event: MouseEvent): void => {\n if (!this.props.dragLabel) {\n return\n }\n const {dragMax, value} = this.props\n const numericValue = typeof value === 'number' ? value : Number(value)\n const newValue = Math.round(numericValue + event.movementX)\n if (dragMax !== undefined && newValue >= 0 && newValue <= dragMax) {\n this.props.onChange?.(this.getValueObjectWithLabel(newValue), event)\n }\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLLabelElement>): void => {\n if (!this.props.dragLabel) {\n return\n }\n event.preventDefault()\n this.handleDrag(event.nativeEvent)\n window.addEventListener('mousemove', this.handleDrag)\n window.addEventListener('mouseup', this.handleMouseUp)\n }\n\n private readonly handleMouseUp = (): void => {\n this.unbindEventListeners()\n }\n\n private readonly unbindEventListeners = (): void => {\n window.removeEventListener('mousemove', this.handleDrag)\n window.removeEventListener('mouseup', this.handleMouseUp)\n }\n\n override render(): ReactElement {\n const style = this.props.style ?? {}\n const wrapStyle: CSSProperties = {position: 'relative', ...style.wrap}\n const inputStyle: CSSProperties = {...style.input}\n const labelStyle: CSSProperties = {\n ...style.label,\n ...(this.props.dragLabel ? {cursor: 'ew-resize'} : null),\n }\n\n return (\n <div style={wrapStyle}>\n <input\n id={this.inputId}\n style={inputStyle}\n ref={this.setInputRef}\n value={this.state.value}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n onBlur={this.handleBlur}\n placeholder={this.props.placeholder}\n spellCheck=\"false\"\n />\n {this.props.label && !this.props.hideLabel ? (\n // oxlint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the label is a drag affordance using pointer coordinates; the input also supports arrow-key stepping\n <label htmlFor={this.inputId} style={labelStyle} onMouseDown={this.handleMouseDown}>\n {this.props.label}\n </label>\n ) : null}\n </div>\n )\n }\n}\n","/**\n * Translates a pointer event over the hue track into a new hue value.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/hue.js | react-color's hue helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {HSLColor, HueColorResult, PickerEvent} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n direction: 'horizontal' | 'vertical' | undefined,\n hsl: HSLColor,\n container: HTMLElement,\n): HueColorResult | null {\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n const left = x - (container.getBoundingClientRect().left + window.scrollX)\n const top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (direction === 'vertical') {\n let h: number\n if (top < 0) {\n h = 359\n } else if (top > containerHeight) {\n h = 0\n } else {\n const percent = -((top * 100) / containerHeight) + 100\n h = (360 * percent) / 100\n }\n\n if (hsl.h !== h) {\n return {h, s: hsl.s, l: hsl.l, a: hsl.a ?? 1, source: 'hsl'}\n }\n return null\n }\n\n let h: number\n if (left < 0) {\n h = 0\n } else if (left > containerWidth) {\n h = 359\n } else {\n const percent = (left * 100) / containerWidth\n h = (360 * percent) / 100\n }\n\n if (hsl.h !== h) {\n return {h, s: hsl.s, l: hsl.l, a: hsl.a ?? 1, source: 'hsl'}\n }\n return null\n}\n","/**\n * Hue slider.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Hue.js | react-color's Hue}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). The upstream raw `<style>` tag holding the static hue gradient\n * has been replaced with a `styled-components` element, and `reactcss` removed.\n */\nimport {Component} from 'react'\nimport type {CSSProperties, ReactElement} from 'react'\nimport {styled} from 'styled-components'\n\nimport * as hue from './helpers/hue'\nimport type {ColorChangeHandler, HSLColor, HueColorResult, PickerEvent} from './types'\n\nconst HueGradient = styled.div<{$direction: 'horizontal' | 'vertical'}>`\n background: ${({$direction}) =>\n $direction === 'vertical'\n ? 'linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)'\n : 'linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)'};\n`\n\nexport interface HueProps {\n hsl: HSLColor\n direction?: 'horizontal' | 'vertical' | undefined\n radius?: string | undefined\n shadow?: string | undefined\n onChange?: ColorChangeHandler<HueColorResult> | undefined\n}\n\nexport class Hue extends Component<HueProps> {\n private container: HTMLDivElement | null = null\n\n override componentWillUnmount(): void {\n this.unbindEventListeners()\n }\n\n private readonly setContainerRef = (node: HTMLDivElement | null): void => {\n this.container = node\n }\n\n private readonly handleChange = (event: PickerEvent): void => {\n if (!this.container) {\n return\n }\n const change = hue.calculateChange(event, this.props.direction, this.props.hsl, this.container)\n if (change && typeof this.props.onChange === 'function') {\n this.props.onChange(change)\n }\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n this.handleChange(event.nativeEvent)\n window.addEventListener('mousemove', this.handleChange)\n window.addEventListener('mouseup', this.handleMouseUp)\n }\n\n private readonly handleMouseUp = (): void => {\n this.unbindEventListeners()\n }\n\n private readonly unbindEventListeners = (): void => {\n window.removeEventListener('mousemove', this.handleChange)\n window.removeEventListener('mouseup', this.handleMouseUp)\n }\n\n override render(): ReactElement {\n const {hsl, direction = 'horizontal', radius, shadow} = this.props\n const pointerStyle: CSSProperties =\n direction === 'vertical'\n ? {position: 'absolute', left: '0px', top: `${-((hsl.h * 100) / 360) + 100}%`}\n : {position: 'absolute', left: `${(hsl.h * 100) / 360}%`}\n\n return (\n <div style={{position: 'absolute', inset: 0, borderRadius: radius, boxShadow: shadow}}>\n <HueGradient\n $direction={direction}\n style={{padding: '0 2px', position: 'relative', height: '100%', borderRadius: radius}}\n ref={this.setContainerRef}\n onMouseDown={this.handleMouseDown}\n onTouchMove={this.handleChange}\n onTouchStart={this.handleChange}\n >\n <div style={pointerStyle}>\n <div\n style={{\n marginTop: '1px',\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n transform: 'translateX(-2px)',\n }}\n />\n </div>\n </HueGradient>\n </div>\n )\n }\n}\n","/**\n * Translates a pointer event over the saturation/value box into a new color.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/saturation.js | react-color's saturation helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {HSLColor, PickerEvent, SaturationColorResult} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n hsl: HSLColor,\n container: HTMLElement,\n): SaturationColorResult {\n const {width: containerWidth, height: containerHeight} = container.getBoundingClientRect()\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n let left = x - (container.getBoundingClientRect().left + window.scrollX)\n let top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (left < 0) {\n left = 0\n } else if (left > containerWidth) {\n left = containerWidth\n }\n\n if (top < 0) {\n top = 0\n } else if (top > containerHeight) {\n top = containerHeight\n }\n\n const saturation = left / containerWidth\n const bright = 1 - top / containerHeight\n\n return {h: hsl.h, s: saturation, v: bright, a: hsl.a ?? 1, source: 'hsv'}\n}\n","/**\n * Saturation / value box.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Saturation.js | react-color's Saturation}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Kept as a class component for this round (function-component conversion is a\n * follow-up PR). The upstream raw `<style>` tag holding the static white/black\n * gradients has been replaced with `styled-components` elements, `reactcss`\n * removed, and `lodash` swapped for `lodash-es`.\n */\nimport throttle from 'lodash-es/throttle'\nimport {Component} from 'react'\nimport type {CSSProperties, ReactElement} from 'react'\nimport {styled} from 'styled-components'\n\nimport * as saturation from './helpers/saturation'\nimport type {\n ColorChangeHandler,\n HSLColor,\n HSVColor,\n PickerEvent,\n SaturationColorResult,\n} from './types'\n\ntype ThrottledChange = ReturnType<\n typeof throttle<\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult) => void\n >\n>\n\nconst SaturationWhite = styled.div`\n background: linear-gradient(to right, #fff, rgba(255, 255, 255, 0));\n`\n\nconst SaturationBlack = styled.div`\n background: linear-gradient(to top, #000, rgba(0, 0, 0, 0));\n`\n\nexport interface SaturationProps {\n hsl: HSLColor\n hsv: HSVColor\n radius?: string | undefined\n shadow?: string | undefined\n onChange?: ColorChangeHandler<SaturationColorResult> | undefined\n}\n\nexport class Saturation extends Component<SaturationProps> {\n private container: HTMLDivElement | null = null\n\n private readonly throttle: ThrottledChange = throttle(\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult): void => {\n handler(data)\n },\n 50,\n )\n\n override componentWillUnmount(): void {\n this.throttle.cancel()\n this.unbindEventListeners()\n }\n\n private readonly setContainerRef = (node: HTMLDivElement | null): void => {\n this.container = node\n }\n\n private getContainerRenderWindow(): Window {\n const {container} = this\n let renderWindow: Window = window\n while (!renderWindow.document.contains(container) && renderWindow.parent !== renderWindow) {\n renderWindow = renderWindow.parent\n }\n return renderWindow\n }\n\n private readonly handleChange = (event: PickerEvent): void => {\n if (!this.container || typeof this.props.onChange !== 'function') {\n return\n }\n this.throttle(\n this.props.onChange,\n saturation.calculateChange(event, this.props.hsl, this.container),\n )\n }\n\n private readonly handleMouseDown = (event: React.MouseEvent<HTMLDivElement>): void => {\n this.handleChange(event.nativeEvent)\n const renderWindow = this.getContainerRenderWindow()\n renderWindow.addEventListener('mousemove', this.handleChange)\n renderWindow.addEventListener('mouseup', this.handleMouseUp)\n }\n\n private readonly handleMouseUp = (): void => {\n this.unbindEventListeners()\n }\n\n private readonly unbindEventListeners = (): void => {\n const renderWindow = this.getContainerRenderWindow()\n renderWindow.removeEventListener('mousemove', this.handleChange)\n renderWindow.removeEventListener('mouseup', this.handleMouseUp)\n }\n\n override render(): ReactElement {\n const {hsl, hsv, radius, shadow} = this.props\n const pointerStyle: CSSProperties = {\n position: 'absolute',\n top: `${-(hsv.v * 100) + 100}%`,\n left: `${hsv.s * 100}%`,\n cursor: 'default',\n }\n\n return (\n // oxlint-disable-next-line jsx-a11y/no-static-element-interactions -- the picker surface is dragged via pointer coordinates, which have no keyboard equivalent\n <div\n style={{\n position: 'absolute',\n inset: 0,\n background: `hsl(${hsl.h},100%, 50%)`,\n borderRadius: radius,\n }}\n ref={this.setContainerRef}\n onMouseDown={this.handleMouseDown}\n onTouchMove={this.handleChange}\n onTouchStart={this.handleChange}\n >\n <SaturationWhite style={{position: 'absolute', inset: 0, borderRadius: radius}}>\n <SaturationBlack\n style={{position: 'absolute', inset: 0, boxShadow: shadow, borderRadius: radius}}\n />\n <div style={pointerStyle}>\n <div\n style={{\n width: '4px',\n height: '4px',\n boxShadow:\n '0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4)',\n borderRadius: '50%',\n cursor: 'pointer',\n transform: 'translate(-2px, -2px)',\n }}\n />\n </div>\n </SaturationWhite>\n </div>\n )\n }\n}\n","import {Box, Flex, useTheme} from '@sanity/ui'\nimport {useCallback, useMemo} from 'react'\n\nimport {\n type Color,\n type ColorChangeHandler,\n EditableInput,\n type EditableInputStyles,\n type HSLColor,\n isValidHex,\n type RGBColor,\n} from './react-color'\n\ninterface ColorPickerFieldsProps {\n rgb?: RGBColor\n hsl?: HSLColor\n hex?: string\n disableAlpha: boolean\n onChange: ColorChangeHandler<Color>\n}\n\nexport const ColorPickerFields = ({\n onChange,\n rgb,\n hsl,\n hex,\n disableAlpha,\n}: ColorPickerFieldsProps): React.JSX.Element => {\n const {sanity} = useTheme()\n\n const inputStyles: EditableInputStyles = useMemo(\n () => ({\n input: {\n width: '80%',\n padding: '4px 10% 3px',\n border: 'none',\n // TODO: when upgrading to @sanity/ui@4 start using the new tokens\n // oxlint-disable-next-line typescript/no-deprecated\n boxShadow: `inset 0 0 0 1px ${sanity.color.input.default.enabled.border}`,\n // oxlint-disable-next-line typescript/no-deprecated\n color: sanity.color.input.default.enabled.fg,\n // oxlint-disable-next-line typescript/no-deprecated\n backgroundColor: sanity.color.input.default.enabled.bg,\n // oxlint-disable-next-line typescript/no-deprecated\n fontSize: sanity.fonts.text.sizes[0]?.fontSize,\n textAlign: 'center',\n },\n label: {\n display: 'block',\n textAlign: 'center',\n // oxlint-disable-next-line typescript/no-deprecated\n fontSize: sanity.fonts.label.sizes[0]?.fontSize,\n // oxlint-disable-next-line typescript/no-deprecated\n color: sanity.color.base.fg,\n paddingTop: '3px',\n paddingBottom: '4px',\n textTransform: 'capitalize',\n },\n }),\n [sanity],\n )\n\n const handleChange: ColorChangeHandler<Record<string, string>> = useCallback(\n (data) => {\n if ('hex' in data && data['hex'] && isValidHex(data['hex'])) {\n onChange({\n hex: data['hex'],\n source: 'hex',\n })\n } else if (\n rgb &&\n (('r' in data && data['r']) || ('g' in data && data['g']) || ('b' in data && data['b']))\n ) {\n onChange({\n r: Number(data['r']) || rgb.r,\n g: Number(data['g']) || rgb.g,\n b: Number(data['b']) || rgb.b,\n a: rgb.a,\n source: 'rgb',\n })\n } else if (hsl && 'a' in data && data['a']) {\n let alpha = Number(data['a'])\n if (alpha < 0) {\n alpha = 0\n } else if (alpha > 100) {\n alpha = 100\n }\n alpha /= 100\n\n onChange({\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: alpha,\n source: 'hsl',\n })\n }\n },\n [onChange, hsl, rgb],\n )\n\n return (\n <Flex>\n <Box flex={2} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"hex\"\n value={hex?.replace('#', '')}\n onChange={handleChange}\n />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"r\"\n value={rgb?.r}\n onChange={handleChange}\n dragLabel\n dragMax={255}\n />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"g\"\n value={rgb?.g}\n onChange={handleChange}\n dragLabel\n dragMax={255}\n />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput\n style={inputStyles}\n label=\"b\"\n value={rgb?.b}\n onChange={handleChange}\n dragLabel\n dragMax={255}\n />\n </Box>\n {!disableAlpha && (\n <Box flex={1}>\n <EditableInput\n style={inputStyles}\n label=\"a\"\n value={Math.round((rgb?.a ?? 1) * 100)}\n onChange={handleChange}\n dragLabel\n dragMax={100}\n />\n </Box>\n )}\n </Flex>\n )\n}\n","import {AddIcon} from '@sanity/icons/Add'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Card, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {startTransition, useOptimistic, useRef} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset} from 'sanity'\nimport {styled} from 'styled-components'\n\nimport {ColorList} from './ColorList'\nimport {ColorPickerFields} from './ColorPickerFields'\nimport {\n Alpha,\n Checkboard,\n type Color,\n CustomPicker,\n type CustomPickerInjectedProps,\n Hue,\n Saturation,\n} from './react-color'\nimport type {ColorSchemaType, ColorValue} from './types'\n\nconst ColorBox = styled(Box)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n`\n\nconst ReadOnlyContainer = styled(Flex)`\n margin-top: 6rem;\n background-color: var(--card-bg-color);\n position: relative;\n width: 100%;\n`\n\ninterface ColorPickerProps extends CustomPickerInjectedProps<Color> {\n width?: string\n disableAlpha: boolean\n colorList?: Array<Color> | undefined\n readOnly?: boolean\n onUnset: () => void\n color: ColorValue\n}\n\nconst ColorPickerInner = (props: ColorPickerProps) => {\n const {\n width,\n color: {rgb, hex, hsv, hsl},\n onChange,\n onUnset,\n disableAlpha,\n colorList,\n readOnly,\n } = props\n\n if (!hsl || !hsv) {\n return null\n }\n\n return (\n <div style={{width}}>\n <Card padding={1} border radius={1}>\n <Stack gap={2}>\n {!readOnly && (\n <>\n <Card overflow=\"hidden\" style={{position: 'relative', height: '5em'}}>\n <Saturation onChange={onChange} hsl={hsl} hsv={hsv} />\n </Card>\n\n <Card\n shadow={1}\n radius={3}\n overflow=\"hidden\"\n style={{position: 'relative', height: '10px'}}\n >\n <Hue hsl={hsl} onChange={!readOnly && onChange} />\n </Card>\n\n {!disableAlpha && (\n <Card\n shadow={1}\n radius={3}\n overflow=\"hidden\"\n style={{position: 'relative', height: '10px', background: '#fff'}}\n >\n <Alpha rgb={rgb} hsl={hsl} onChange={onChange} />\n </Card>\n )}\n </>\n )}\n <Flex>\n <Card\n flex={1}\n radius={2}\n overflow=\"hidden\"\n style={{position: 'relative', minWidth: '4em', background: '#fff'}}\n >\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox\n style={{\n backgroundColor: `rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`,\n }}\n />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>\n\n {!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <Box style={{width: 200}}>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </Box>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )}\n </Flex>\n {colorList && <ColorList colors={colorList} onChange={onChange} />}\n </Stack>\n </Card>\n </div>\n )\n}\n\nconst ColorPicker = CustomPicker(ColorPickerInner)\n\nconst DEFAULT_COLOR: ColorValue & {source: string} = {\n hex: '#24a3e3',\n hsl: {h: 200, s: 0.7732, l: 0.5156, a: 1},\n hsv: {h: 200, s: 0.8414, v: 0.8901, a: 1},\n rgb: {r: 46, g: 163, b: 227, a: 1},\n source: 'hex',\n}\n\nexport default function ColorInput(props: ObjectInputProps): React.JSX.Element {\n const {onChange, readOnly} = props\n // oxlint-disable-next-line no-unsafe-type-assertion\n const _value = props.value as ColorValue | undefined\n const [value, setColorOptimistic] = useOptimistic(_value)\n const type = props.schemaType as ColorSchemaType\n const focusRef = useRef<HTMLButtonElement>(null)\n\n function handleChange(nextColor: ColorValue) {\n const fieldPatches = type.fields\n .filter((field) => field.name in nextColor)\n .map((field) => {\n // oxlint-disable-next-line no-unsafe-type-assertion\n const nextFieldValue = nextColor[field.name as keyof ColorValue]\n const isObject = field.type.jsonType === 'object'\n return set(\n isObject ? Object.assign({_type: field.type.name}, nextFieldValue) : nextFieldValue,\n [field.name],\n )\n })\n\n onChange([\n setIfMissing({_type: type.name}),\n set(type.name, ['_type']),\n set(nextColor.rgb?.a, ['alpha']),\n ...fieldPatches,\n ])\n }\n\n return (\n <>\n {value && value.hex ? (\n <ColorPicker\n color={value}\n onChange={(nextColor) =>\n startTransition(() => {\n setColorOptimistic(nextColor)\n handleChange(nextColor)\n })\n }\n readOnly={readOnly || (typeof type.readOnly === 'boolean' && type.readOnly)}\n disableAlpha={!!type.options?.disableAlpha}\n colorList={type.options?.colorList}\n onUnset={() =>\n startTransition(() => {\n setColorOptimistic(undefined)\n onChange(unset())\n })\n }\n />\n ) : (\n <Button\n icon={AddIcon}\n mode=\"ghost\"\n text=\"Create color\"\n ref={focusRef}\n disabled={Boolean(readOnly)}\n onClick={() =>\n startTransition(() => {\n setColorOptimistic(DEFAULT_COLOR)\n handleChange(DEFAULT_COLOR)\n })\n }\n />\n )}\n </>\n )\n}\n"],"mappings":"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"}