UNPKG

@zag-js/color-utils

Version:

Color utilities for zag.js

75 lines (73 loc) 2.05 kB
import "./chunk-QZ7TP4HQ.mjs"; // src/area-gradient.ts import { generateRGB_R, generateRGB_G, generateRGB_B, generateHSL_H, generateHSB_H, generateHSL_S, generateHSB_S, generateHSB_B, generateHSL_L } from "./color-format-gradient.mjs"; function getColorAreaGradient(color, options) { const { xChannel, yChannel, dir: dirProp = "ltr" } = options; const { zChannel } = color.getColorAxes({ xChannel, yChannel }); const zValue = color.getChannelValue(zChannel); const { minValue: zMin, maxValue: zMax } = color.getChannelRange(zChannel); const orientation = ["top", dirProp === "rtl" ? "left" : "right"]; let dir = false; let background = { areaStyles: {}, areaGradientStyles: {} }; let alphaValue = (zValue - zMin) / (zMax - zMin); let isHSL = color.getFormat() === "hsla"; switch (zChannel) { case "red": { dir = xChannel === "green"; background = generateRGB_R(orientation, dir, zValue); break; } case "green": { dir = xChannel === "red"; background = generateRGB_G(orientation, dir, zValue); break; } case "blue": { dir = xChannel === "red"; background = generateRGB_B(orientation, dir, zValue); break; } case "hue": { dir = xChannel !== "saturation"; if (isHSL) { background = generateHSL_H(orientation, dir, zValue); } else { background = generateHSB_H(orientation, dir, zValue); } break; } case "saturation": { dir = xChannel === "hue"; if (isHSL) { background = generateHSL_S(orientation, dir, alphaValue); } else { background = generateHSB_S(orientation, dir, alphaValue); } break; } case "brightness": { dir = xChannel === "hue"; background = generateHSB_B(orientation, dir, alphaValue); break; } case "lightness": { dir = xChannel === "hue"; background = generateHSL_L(orientation, dir, zValue); break; } } return background; } export { getColorAreaGradient };