104fd306cSNickeau<?php 204fd306cSNickeau 304fd306cSNickeaunamespace ComboStrap; 404fd306cSNickeau 504fd306cSNickeau/** 604fd306cSNickeau * Static method of color calculation 704fd306cSNickeau */ 804fd306cSNickeauclass ColorSystem 904fd306cSNickeau{ 1004fd306cSNickeau 1104fd306cSNickeau const CANONICAL = "color-system"; 1204fd306cSNickeau 1304fd306cSNickeau /** 1404fd306cSNickeau * Return a color suitable for reading (that has a good ratio) 1504fd306cSNickeau * @param ColorRgb $colorRgb 1604fd306cSNickeau * @return ColorRgb 1704fd306cSNickeau */ 1804fd306cSNickeau public static function toTextColor(ColorRgb $colorRgb): ColorRgb 1904fd306cSNickeau { 2004fd306cSNickeau try { 2104fd306cSNickeau return $colorRgb 2204fd306cSNickeau ->toHsl() 2304fd306cSNickeau ->setSaturation(30) 2404fd306cSNickeau ->setLightness(40) 2504fd306cSNickeau ->toRgb() 2604fd306cSNickeau ->toMinimumContrastRatioAgainstWhite(); 2704fd306cSNickeau } catch (ExceptionCompile $e) { 2804fd306cSNickeau LogUtility::error("Error while calculating the primary text color. {$e->getMessage()}", self::CANONICAL, $e); 2904fd306cSNickeau return $colorRgb; 3004fd306cSNickeau } 3104fd306cSNickeau 3204fd306cSNickeau } 3304fd306cSNickeau 3404fd306cSNickeau /** 3504fd306cSNickeau * Calculate a color for a text hover that has: 3604fd306cSNickeau * * more lightness than the text 3704fd306cSNickeau * * and a good contrast ratio 3804fd306cSNickeau * 3904fd306cSNickeau * @param ColorRgb $colorRgb 4004fd306cSNickeau * @return ColorRgb 41*46021406Sgerardnico * 42*46021406Sgerardnico * Default Link Color 43*46021406Sgerardnico * Saturation and lightness comes from the 44*46021406Sgerardnico * Note: 45*46021406Sgerardnico * * blue color of Bootstrap #0d6efd s: 98, l: 52 46*46021406Sgerardnico * * blue color of twitter #1d9bf0 s: 88, l: 53 47*46021406Sgerardnico * * reddit gray with s: 16, l : 31 48*46021406Sgerardnico * * the text is s: 11, l: 15 49*46021406Sgerardnico * We choose the gray/tone rendering to be close to black 50*46021406Sgerardnico * the color of the text 5104fd306cSNickeau */ 5204fd306cSNickeau public static function toTextHoverColor(ColorRgb $colorRgb): ColorRgb 5304fd306cSNickeau { 5404fd306cSNickeau try { 5504fd306cSNickeau return $colorRgb 5604fd306cSNickeau ->toHsl() 5704fd306cSNickeau ->setSaturation(88) 5804fd306cSNickeau ->setLightness(53) 5904fd306cSNickeau ->toRgb() 6004fd306cSNickeau ->toMinimumContrastRatioAgainstWhite(); 6104fd306cSNickeau } catch (ExceptionCompile $e) { 6204fd306cSNickeau LogUtility::error("Error while calculating the color text hover color. {$e->getMessage()}", self::CANONICAL, $e); 6304fd306cSNickeau return $colorRgb; 6404fd306cSNickeau } 6504fd306cSNickeau } 6604fd306cSNickeau 6704fd306cSNickeau /** 6804fd306cSNickeau * 6904fd306cSNickeau * @throws ExceptionCompile when the color could not be calculated 7004fd306cSNickeau */ 7104fd306cSNickeau public static function toBackgroundColor(ColorRgb $primaryColor): ColorRgb 7204fd306cSNickeau { 7304fd306cSNickeau return $primaryColor 7404fd306cSNickeau ->toHsl() 7504fd306cSNickeau ->setLightness(98) 7604fd306cSNickeau ->toRgb() 7704fd306cSNickeau ->toMinimumContrastRatioAgainstWhite(1.1, 1); 7804fd306cSNickeau } 7904fd306cSNickeau 8004fd306cSNickeau} 81