@wistia/ui 0.14.6 → 0.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
 
2
2
  /*
3
- * @license @wistia/ui v0.14.6
3
+ * @license @wistia/ui v0.14.7
4
4
  *
5
5
  * Copyright (c) 2024-2025, Wistia, Inc. and its affiliates.
6
6
  *
@@ -9501,7 +9501,7 @@ import styled32 from "styled-components";
9501
9501
  import { Root as RadioGroupRoot } from "@radix-ui/react-radio-group";
9502
9502
 
9503
9503
  // src/components/ColorPicker/ColorPickerContext.tsx
9504
- import { createContext as createContext5, useCallback as useCallback9, useContext as useContext4, useMemo as useMemo8, useState as useState12 } from "react";
9504
+ import { createContext as createContext5, useCallback as useCallback9, useContext as useContext4, useEffect as useEffect10, useMemo as useMemo8, useState as useState12 } from "react";
9505
9505
  import { formatHex as formatHex2 } from "culori/fn";
9506
9506
 
9507
9507
  // src/components/ColorPicker/color-conversion-utils.ts
@@ -9900,6 +9900,7 @@ var ColorPickerProvider = ({
9900
9900
  value: valueAsHex
9901
9901
  }) => {
9902
9902
  const [isTransitioning, setIsTransitioning] = useState12(false);
9903
+ const [isDragging, setIsDragging] = useState12(false);
9903
9904
  const [nonDerivedValueAsHsv, setNonDerivedValueAsHsv] = useState12(convertToHsv(valueAsHex));
9904
9905
  const [valueAsHsv, setValueAsHsv] = useState12(convertToHsv(valueAsHex));
9905
9906
  const [shouldEnforceMinContrast, setShouldEnforceMinContrast] = useState12(false);
@@ -9972,23 +9973,41 @@ var ColorPickerProvider = ({
9972
9973
  valueAsHsv
9973
9974
  ]
9974
9975
  );
9975
- const whatValueAsHexShouldBe = formatHex2(valueAsHsv);
9976
- if (whatValueAsHexShouldBe !== valueAsHex && !isTransitioning) {
9977
- setValueAsHsv(convertToHsv(valueAsHex));
9976
+ const accessibleHsvFromValueAsHex = getAccessibleDerivativeColor(valueAsHex);
9977
+ const whatValueAsHexShouldBe = shouldEnforceMinContrast ? formatHex2(accessibleHsvFromValueAsHex) : valueAsHex;
9978
+ const valueAsHsvConvertedToHex = formatHex2(valueAsHsv);
9979
+ if (whatValueAsHexShouldBe !== valueAsHsvConvertedToHex && !isTransitioning && !isDragging) {
9980
+ setValueAsHsv(
9981
+ shouldEnforceMinContrast ? getAccessibleDerivativeColor(valueAsHex) : convertToHsv(valueAsHex)
9982
+ );
9978
9983
  setNonDerivedValueAsHsv(convertToHsv(valueAsHex));
9979
9984
  }
9985
+ useEffect10(() => {
9986
+ if (valueAsHex !== valueAsHsvConvertedToHex && !isTransitioning && !isDragging) {
9987
+ onValueChange(whatValueAsHexShouldBe);
9988
+ }
9989
+ }, [
9990
+ isDragging,
9991
+ isTransitioning,
9992
+ onValueChange,
9993
+ valueAsHex,
9994
+ valueAsHsvConvertedToHex,
9995
+ whatValueAsHexShouldBe
9996
+ ]);
9980
9997
  const contextValue = useMemo8(
9981
9998
  () => ({
9982
9999
  colorForComparison,
9983
10000
  currentContrastRatio,
9984
10001
  getAccessibleDerivativeColor,
9985
10002
  hasAccessibleDerivatives: hasAccessibleDerivativesValue,
10003
+ isDragging,
9986
10004
  isTransitioning,
9987
10005
  minimumContrastRatio,
9988
10006
  nonDerivedValueAsHex: formatHex2(nonDerivedValueAsHsv),
9989
10007
  nonDerivedValueAsHsv,
9990
10008
  onChangeNonDerivedValueAsHsv,
9991
10009
  opacityForContrastCalculation,
10010
+ setIsDragging,
9992
10011
  setShouldEnforceMinContrast: setShouldEnforceMinContrastWrapped,
9993
10012
  shouldEnforceMinContrast,
9994
10013
  valueAsHex,
@@ -9999,6 +10018,7 @@ var ColorPickerProvider = ({
9999
10018
  currentContrastRatio,
10000
10019
  getAccessibleDerivativeColor,
10001
10020
  hasAccessibleDerivativesValue,
10021
+ isDragging,
10002
10022
  isTransitioning,
10003
10023
  minimumContrastRatio,
10004
10024
  nonDerivedValueAsHsv,
@@ -10959,7 +10979,7 @@ var ContrastControls = () => {
10959
10979
  ContrastControls.displayName = "ContrastControls_UI";
10960
10980
 
10961
10981
  // src/components/ColorPicker/HexColorInput.tsx
10962
- import { useCallback as useCallback13, useEffect as useEffect10, useRef as useRef10, useState as useState13 } from "react";
10982
+ import { useCallback as useCallback13, useEffect as useEffect11, useRef as useRef10, useState as useState13 } from "react";
10963
10983
  import { parseHex as parseHex2 } from "culori/fn";
10964
10984
 
10965
10985
  // src/components/Input/Input.tsx
@@ -11295,7 +11315,7 @@ var HexColorInput = ({ autoFocus = true }) => {
11295
11315
  }
11296
11316
  selectAllButTheHash();
11297
11317
  }, [selectAllButTheHash]);
11298
- useEffect10(() => {
11318
+ useEffect11(() => {
11299
11319
  if (!autoFocus) {
11300
11320
  return;
11301
11321
  }
@@ -11306,7 +11326,7 @@ var HexColorInput = ({ autoFocus = true }) => {
11306
11326
  inputElem.focus();
11307
11327
  selectAllButTheHash();
11308
11328
  }, [autoFocus, selectAllButTheHash]);
11309
- useEffect10(() => {
11329
+ useEffect11(() => {
11310
11330
  setTextInputValue(valueAsHex);
11311
11331
  }, [valueAsHex]);
11312
11332
  return /* @__PURE__ */ jsx247(
@@ -11342,7 +11362,7 @@ import styled46 from "styled-components";
11342
11362
  import { formatHex as formatHex6 } from "culori/fn";
11343
11363
 
11344
11364
  // src/components/ColorPicker/HSVHueCanvas.tsx
11345
- import { useEffect as useEffect11, useRef as useRef11 } from "react";
11365
+ import { useEffect as useEffect12, useRef as useRef11 } from "react";
11346
11366
  import styled45 from "styled-components";
11347
11367
  import { formatHex as formatHex5 } from "culori/fn";
11348
11368
  import { jsx as jsx248 } from "react/jsx-runtime";
@@ -11353,7 +11373,7 @@ var Canvas = styled45.canvas`
11353
11373
  `;
11354
11374
  var HSVHueCanvas = ({ hsv }) => {
11355
11375
  const canvasRef = useRef11(null);
11356
- useEffect11(() => {
11376
+ useEffect12(() => {
11357
11377
  const canvas = canvasRef.current;
11358
11378
  if (!canvas) {
11359
11379
  return;
@@ -11473,11 +11493,11 @@ var HueSlider = () => {
11473
11493
  HueSlider.displayName = "HueSlider_UI";
11474
11494
 
11475
11495
  // src/components/ColorPicker/SaturationAndValuePicker.tsx
11476
- import { useCallback as useCallback15, useEffect as useEffect13, useLayoutEffect as useLayoutEffect4, useMemo as useMemo10, useRef as useRef13, useState as useState14 } from "react";
11496
+ import { useCallback as useCallback15, useEffect as useEffect14, useLayoutEffect as useLayoutEffect4, useMemo as useMemo10, useRef as useRef13, useState as useState14 } from "react";
11477
11497
  import styled48 from "styled-components";
11478
11498
 
11479
11499
  // src/components/ColorPicker/HSVSaturationValueCanvas.tsx
11480
- import { useEffect as useEffect12, useRef as useRef12 } from "react";
11500
+ import { useEffect as useEffect13, useRef as useRef12 } from "react";
11481
11501
  import styled47 from "styled-components";
11482
11502
 
11483
11503
  // src/components/ColorPicker/canvas-utils.ts
@@ -11568,7 +11588,7 @@ var HSVSaturationValueCanvas = ({
11568
11588
  opacityForContrastCalculation
11569
11589
  }) => {
11570
11590
  const canvasRef = useRef12(null);
11571
- useEffect12(() => {
11591
+ useEffect13(() => {
11572
11592
  const canvas = canvasRef.current;
11573
11593
  if (!canvas) {
11574
11594
  return;
@@ -11660,11 +11680,13 @@ var SaturationAndValuePicker = ({
11660
11680
  }) => {
11661
11681
  const {
11662
11682
  colorForComparison,
11683
+ isDragging,
11663
11684
  isTransitioning,
11664
11685
  minimumContrastRatio,
11665
11686
  nonDerivedValueAsHsv,
11666
11687
  onChangeNonDerivedValueAsHsv,
11667
11688
  opacityForContrastCalculation,
11689
+ setIsDragging,
11668
11690
  shouldEnforceMinContrast,
11669
11691
  valueAsHex,
11670
11692
  valueAsHsv
@@ -11714,7 +11736,6 @@ var SaturationAndValuePicker = ({
11714
11736
  },
11715
11737
  [nonDerivedValueAsHsv, onChangeNonDerivedValueAsHsv]
11716
11738
  );
11717
- const [isDragging, setIsDragging] = useState14(false);
11718
11739
  const updateSaturationAndValueFromCoordinates = useCallback15(
11719
11740
  (clientX, clientY) => {
11720
11741
  const container = containerRef.current;
@@ -11741,7 +11762,7 @@ var SaturationAndValuePicker = ({
11741
11762
  setIsDragging(true);
11742
11763
  updateSaturationAndValueFromCoordinates(event.clientX, event.clientY);
11743
11764
  },
11744
- [updateSaturationAndValueFromCoordinates, thumbRef]
11765
+ [setIsDragging, updateSaturationAndValueFromCoordinates]
11745
11766
  );
11746
11767
  const onThumbMouseDown = useCallback15(
11747
11768
  (event) => {
@@ -11749,7 +11770,7 @@ var SaturationAndValuePicker = ({
11749
11770
  thumbRef.current?.focus();
11750
11771
  setIsDragging(true);
11751
11772
  },
11752
- [thumbRef]
11773
+ [setIsDragging]
11753
11774
  );
11754
11775
  const onThumbKeyDown = useCallback15(
11755
11776
  (event) => {
@@ -11784,8 +11805,8 @@ var SaturationAndValuePicker = ({
11784
11805
  },
11785
11806
  [isDragging, updateSaturationAndValueFromCoordinates]
11786
11807
  );
11787
- const onWindowMouseUp = useCallback15(() => setIsDragging(false), []);
11788
- useEffect13(() => {
11808
+ const onWindowMouseUp = useCallback15(() => setIsDragging(false), [setIsDragging]);
11809
+ useEffect14(() => {
11789
11810
  window.addEventListener("mousemove", onWindowMouseMove);
11790
11811
  window.addEventListener("mouseup", onWindowMouseUp);
11791
11812
  return () => {
@@ -11851,7 +11872,7 @@ import {
11851
11872
  useRef as useRef14,
11852
11873
  useState as useState15,
11853
11874
  useTransition,
11854
- useEffect as useEffect14,
11875
+ useEffect as useEffect15,
11855
11876
  Children as Children5,
11856
11877
  isValidElement as isValidElement2
11857
11878
  } from "react";
@@ -12166,7 +12187,7 @@ var Combobox2 = ({
12166
12187
  const [wrapperWidth, setWrapperWidth] = useState15("auto");
12167
12188
  const comboboxWrapperRef = useRef14(null);
12168
12189
  const options = useMemo11(() => extractOptions(children), [children]);
12169
- useEffect14(() => {
12190
+ useEffect15(() => {
12170
12191
  const comboboxWrapper = comboboxWrapperRef.current;
12171
12192
  if (comboboxWrapper) {
12172
12193
  const updateWidthVariable = () => {
@@ -13064,7 +13085,7 @@ var Grid = makePolymorphic(GridComponent);
13064
13085
 
13065
13086
  // src/components/InputClickToCopy/InputClickToCopy.tsx
13066
13087
  import styled59 from "styled-components";
13067
- import { forwardRef as forwardRef18, useEffect as useEffect15, useState as useState18 } from "react";
13088
+ import { forwardRef as forwardRef18, useEffect as useEffect16, useState as useState18 } from "react";
13068
13089
  import { isFunction as isFunction3 } from "@wistia/type-guards";
13069
13090
  import { jsx as jsx264 } from "react/jsx-runtime";
13070
13091
  var StyledInput2 = styled59(Input)`
@@ -13080,7 +13101,7 @@ var COPY_SUCCESS_DURATION = 2e3;
13080
13101
  var InputClickToCopy = forwardRef18(
13081
13102
  ({ value, onCopy, ...props }, ref) => {
13082
13103
  const [isCopied, setIsCopied] = useState18(false);
13083
- useEffect15(() => {
13104
+ useEffect16(() => {
13084
13105
  if (isCopied) {
13085
13106
  const timeout = setTimeout(() => {
13086
13107
  setIsCopied(false);
@@ -14138,14 +14159,14 @@ import styled70, { css as css35, keyframes as keyframes4 } from "styled-componen
14138
14159
  import { Content as DialogContent } from "@radix-ui/react-dialog";
14139
14160
 
14140
14161
  // src/private/hooks/useFocusRestore/useFocusRestore.ts
14141
- import { useRef as useRef18, useEffect as useEffect16 } from "react";
14162
+ import { useRef as useRef18, useEffect as useEffect17 } from "react";
14142
14163
  import { isNotNil as isNotNil28 } from "@wistia/type-guards";
14143
14164
  var useFocusRestore = () => {
14144
14165
  const previouslyFocusedRef = useRef18(null);
14145
- useEffect16(() => {
14166
+ useEffect17(() => {
14146
14167
  previouslyFocusedRef.current = document.activeElement;
14147
14168
  }, []);
14148
- useEffect16(() => {
14169
+ useEffect17(() => {
14149
14170
  return () => {
14150
14171
  if (isNotNil28(previouslyFocusedRef.current)) {
14151
14172
  setTimeout(() => {
@@ -15271,7 +15292,7 @@ var SegmentedControl = forwardRef29(
15271
15292
  SegmentedControl.displayName = "SegmentedControl_UI";
15272
15293
 
15273
15294
  // src/components/SegmentedControl/SegmentedControlItem.tsx
15274
- import { forwardRef as forwardRef30, useEffect as useEffect17, useRef as useRef19 } from "react";
15295
+ import { forwardRef as forwardRef30, useEffect as useEffect18, useRef as useRef19 } from "react";
15275
15296
  import styled82, { css as css42 } from "styled-components";
15276
15297
  import { Item as ToggleGroupItem2 } from "@radix-ui/react-toggle-group";
15277
15298
  import { isNotNil as isNotNil33 } from "@wistia/type-guards";
@@ -15359,7 +15380,7 @@ var SegmentedControlItem = forwardRef30(
15359
15380
  event.preventDefault();
15360
15381
  }
15361
15382
  };
15362
- useEffect17(() => {
15383
+ useEffect18(() => {
15363
15384
  const buttonElem = buttonRef.current;
15364
15385
  if (!buttonElem) {
15365
15386
  return void 0;
@@ -15961,7 +15982,7 @@ var TabsList = ({ children, fullWidth = true, ...props }) => {
15961
15982
  TabsList.displayName = "TabsList_UI";
15962
15983
 
15963
15984
  // src/components/Tabs/TabsTrigger.tsx
15964
- import { forwardRef as forwardRef33, useEffect as useEffect18, useRef as useRef20 } from "react";
15985
+ import { forwardRef as forwardRef33, useEffect as useEffect19, useRef as useRef20 } from "react";
15965
15986
  import { isNotNil as isNotNil36 } from "@wistia/type-guards";
15966
15987
 
15967
15988
  // src/components/Tabs/StyledRadixTabsTrigger.tsx
@@ -15983,7 +16004,7 @@ var TabsTrigger = forwardRef33(
15983
16004
  const { setSelectedItemMeasurements } = useSelectedItemStyle();
15984
16005
  const buttonRef = useRef20(null);
15985
16006
  const combinedRef = mergeRefs([buttonRef, forwardedRef]);
15986
- useEffect18(() => {
16007
+ useEffect19(() => {
15987
16008
  const buttonElem = buttonRef.current;
15988
16009
  if (!buttonElem) {
15989
16010
  return void 0;
@@ -16786,7 +16807,7 @@ var InputPassword = forwardRef35(
16786
16807
  InputPassword.displayName = "InputPassword_UI";
16787
16808
 
16788
16809
  // src/components/ContextMenu/ContextMenu.tsx
16789
- import { useEffect as useEffect19, useState as useState24 } from "react";
16810
+ import { useEffect as useEffect20, useState as useState24 } from "react";
16790
16811
  import { isNil as isNil18, isNotNil as isNotNil42 } from "@wistia/type-guards";
16791
16812
  import { jsx as jsx313 } from "react/jsx-runtime";
16792
16813
  var ContextMenu = ({
@@ -16797,7 +16818,7 @@ var ContextMenu = ({
16797
16818
  }) => {
16798
16819
  const [isRightClicked, setIsRightClicked] = useState24(false);
16799
16820
  const [menuPosition, setMenuPosition] = useState24(position ?? { x: 0, y: 0 });
16800
- useEffect19(() => {
16821
+ useEffect20(() => {
16801
16822
  if (isNil18(position)) {
16802
16823
  const onContextMenu = (event) => {
16803
16824
  event.preventDefault();