text: import { mix } from "./mix";
  import { hsla, rgba, hex } from "style-value-types";
  import { invariant } from "hey-listen";
  import { hslaToRgba } from "./hsla-to-rgba";
  export const mixLinearColor = (from, to, v) => {
      const fromExpo = from * from;
      const toExpo = to * to;
      return Math.sqrt(Math.max(0, v * (toExpo - fromExpo) + fromExpo));
  };
  const colorTypes = [hex, rgba, hsla];
  const getColorType = (v) => colorTypes.find((type) => type.test(v));
  const notAnimatable = (color) => `'${color}' is not an animatable color. Use the equivalent color code instead.`;
  export const mixColor = (from, to) => {
      let fromColorType = getColorType(from);
      let toColorType = getColorType(to);
      invariant(!!fromColorType, notAnimatable(from));
      invariant(!!toColorType, notAnimatable(to));
      let fromColor = fromColorType.parse(from);
      let toColor = toColorType.parse(to);
      if (fromColorType === hsla) {
          fromColor = hslaToRgba(fromColor);
          fromColorType = rgba;
      }
      if (toColorType === hsla) {
          toColor = hslaToRgba(toColor);
          toColorType = rgba;
      }
      const blended = Object.assign({}, fromColor);
      return (v) => {
          for (const key in blended) {
              if (key !== "alpha") {
                  blended[key] = mixLinearColor(fromColor[key], toColor[key], v);
              }
          }
          blended.alpha = mix(fromColor.alpha, toColor.alpha, v);
          return fromColorType.transform(blended);
      };
  };
  //# sourceMappingURL=mix-color.js.map