@gravity-ui/uikit
Version:
Gravity UI base styling and components
117 lines (116 loc) • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeInputColorForMode = exports.parseColorToHsva = exports.getTextValueByMode = exports.isValidHsva = void 0;
exports.formatRgbaString = formatRgbaString;
const react_color_1 = require("@uiw/react-color");
const types_1 = require("./types.js");
const DEFAULT_HSVA = { h: 0, s: 0, v: 0, a: 1 };
const POSSIBLE_HEX_RE = /^(?:#)?(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
const normalizePossibleHexInput = (value) => {
const trimmed = value.trim();
if (!trimmed) {
return trimmed;
}
if (POSSIBLE_HEX_RE.test(trimmed) && !trimmed.startsWith('#')) {
return `#${trimmed}`;
}
return trimmed;
};
const normalizeAlpha = (hsva, withAlpha) => {
return withAlpha ? hsva : { ...hsva, a: 1 };
};
const getInvalidResult = () => ({
hsva: { ...DEFAULT_HSVA },
formattedValue: '',
isValid: false,
});
const isValidHsva = (value) => {
return (Number.isFinite(value.h) &&
Number.isFinite(value.s) &&
Number.isFinite(value.v) &&
Number.isFinite(value.a) &&
value.h >= 0 &&
value.h <= 360 &&
value.s >= 0 &&
value.s <= 100 &&
value.v >= 0 &&
value.v <= 100 &&
value.a >= 0 &&
value.a <= 1);
};
exports.isValidHsva = isValidHsva;
const parseStringToHsva = (value) => {
const trimmed = value.trim();
if (!trimmed) {
return null;
}
const normalizedHex = normalizePossibleHexInput(trimmed);
if ((0, react_color_1.validHex)(normalizedHex)) {
const hsva = (0, react_color_1.hexToHsva)(normalizedHex);
return (0, exports.isValidHsva)(hsva) ? hsva : null;
}
if (/^rgba?\(/i.test(trimmed)) {
const hsva = (0, react_color_1.rgbaStringToHsva)(trimmed);
return (0, exports.isValidHsva)(hsva) ? hsva : null;
}
if (/^hsla?\(/i.test(trimmed)) {
const hsva = (0, react_color_1.hslaStringToHsva)(trimmed);
return (0, exports.isValidHsva)(hsva) ? hsva : null;
}
if (/^hsva?\(/i.test(trimmed)) {
const hsva = (0, react_color_1.hsvaStringToHsva)(trimmed);
return (0, exports.isValidHsva)(hsva) ? hsva : null;
}
return null;
};
const getTextValueByMode = (hsva, mode, withAlpha) => {
const normalizedHsva = normalizeAlpha(hsva, withAlpha);
switch (mode) {
case types_1.Modes.Hex:
return withAlpha ? (0, react_color_1.hsvaToHexa)(normalizedHsva) : (0, react_color_1.hsvaToHex)(normalizedHsva);
case types_1.Modes.Rgb:
return withAlpha ? (0, react_color_1.hsvaToRgbaString)(normalizedHsva) : (0, react_color_1.hsvaToRgbString)(normalizedHsva);
default:
return withAlpha ? (0, react_color_1.hsvaToHexa)(normalizedHsva) : (0, react_color_1.hsvaToHex)(normalizedHsva);
}
};
exports.getTextValueByMode = getTextValueByMode;
const parseColorToHsva = (value, withAlpha) => {
const parsed = parseStringToHsva(value);
if (!parsed) {
return {
hsva: { ...DEFAULT_HSVA },
isValid: false,
};
}
const hsva = normalizeAlpha(parsed, withAlpha);
if (!(0, exports.isValidHsva)(hsva)) {
return {
hsva: { ...DEFAULT_HSVA },
isValid: false,
};
}
return {
hsva,
isValid: true,
};
};
exports.parseColorToHsva = parseColorToHsva;
const normalizeInputColorForMode = (value, selectedMode, withAlpha) => {
const parsed = (0, exports.parseColorToHsva)(value, withAlpha);
if (!parsed.isValid) {
return getInvalidResult();
}
return {
hsva: parsed.hsva,
formattedValue: (0, exports.getTextValueByMode)(parsed.hsva, selectedMode, withAlpha),
isValid: true,
};
};
exports.normalizeInputColorForMode = normalizeInputColorForMode;
function formatRgbaString(rgba) {
const { r, g, b, a } = rgba;
const roundedA = Math.round(a * 100) / 100;
return `rgba(${r},${g},${b},${roundedA})`;
}
//# sourceMappingURL=utils.js.map