UNPKG

@gravity-ui/uikit

Version:

Gravity UI base styling and components

117 lines (116 loc) 4.09 kB
"use strict"; 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