UNPKG

wakeb-starter-cli

Version:

A powerful CLI tool for generating CRUD modules, common modules, and components with Vue 3 form schemas, featuring intelligent field detection and automatic schema generation

63 lines (51 loc) 1.93 kB
export function generateDarkerShades(baseColor, shadeCount = 5) { function hexToHsl(hex) { hex = hex.replace(/^#/, ""); if (hex.length === 3) { hex = hex.split("").map(char => char + char).join(""); } const r = parseInt(hex.substring(0, 2), 16) / 255; const g = parseInt(hex.substring(2, 4), 16) / 255; const b = parseInt(hex.substring(4, 6), 16) / 255; const max = Math.max(r, g, b); const min = Math.min(r, g, b); const l = (max + min) / 2; let h = 0, s = 0; if (max !== min) { const d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); switch (max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)]; } function hslToHex(h, s, l) { s /= 100; l /= 100; const chroma = (1 - Math.abs(2 * l - 1)) * s; const x = chroma * (1 - Math.abs((h / 60) % 2 - 1)); const m = l - chroma / 2; let r = 0, g = 0, b = 0; if (h < 60) [r, g, b] = [chroma, x, 0]; else if (h < 120) [r, g, b] = [x, chroma, 0]; else if (h < 180) [r, g, b] = [0, chroma, x]; else if (h < 240) [r, g, b] = [0, x, chroma]; else if (h < 300) [r, g, b] = [x, 0, chroma]; else [r, g, b] = [chroma, 0, x]; r = Math.round((r + m) * 255).toString(16).padStart(2, "0"); g = Math.round((g + m) * 255).toString(16).padStart(2, "0"); b = Math.round((b + m) * 255).toString(16).padStart(2, "0"); return `#${r}${g}${b}`; } const [h, s, l] = hexToHsl(baseColor); const shades = []; for (let i = 1; i <= shadeCount; i++) { const darkerLightness = Math.max(0, l - i * 10); shades.push(hslToHex(h, s, darkerLightness)); } return shades; }