-
-
Notifications
You must be signed in to change notification settings - Fork 89
/
Tailwind.php
96 lines (73 loc) · 2.48 KB
/
Tailwind.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
namespace App\Services;
use Spatie\Color\Hex;
use Spatie\Color\Rgb;
use Illuminate\Support\Str;
class Tailwind
{
public array $shades = [];
protected array $intensityMap = [
50 => 0.95,
100 => 0.9,
200 => 0.75,
300 => 0.6,
400 => 0.3,
600 => 0.9,
700 => 0.75,
800 => 0.6,
900 => 0.49,
];
public function __construct(public string $name, public string $baseColor)
{
$this->shades = $this->generateColorShades($name, $this->baseColor);
}
public function getCssFormat(): string
{
$output = '<style>' . PHP_EOL;
$output .= ':root {' . PHP_EOL;
foreach ($this->shades as $shade => $color) {
if ($this->name === 'primary') {
$color = Str::between($color, '(', ')');
}
$output .= "\t--color-{$shade}: {$color};" . PHP_EOL;
}
$output .= '}' . PHP_EOL;
$output .= '</style>';
return $output;
}
public function generateColorShades(string $name, ?string $baseColor): array
{
$baseColor = Hex::fromString($baseColor);
$colors = [];
$lightShades = [50, 100, 200, 300, 400];
$darkShades = [600, 700, 800, 900];
// LightShades
foreach ($lightShades as $shade) {
$color = $this->lighten($baseColor, $this->intensityMap[$shade]);
$colors[$name . '-' . $shade] = (string)$color;
}
$colors[$name . '-500'] = (string)Hex::fromString($baseColor)->toRgb();
// DarkShades
foreach ($darkShades as $shade) {
$color = $this->darken($baseColor, $this->intensityMap[$shade]);
$colors[$name . '-' . $shade] = (string)$color;
}
return $colors;
}
protected function lighten(Hex $hex, float $intensity): Rgb
{
$color = $hex->toRgb();
$r = round($color->red() + (255 - $color->red()) * $intensity);
$g = round($color->green() + (255 - $color->green()) * $intensity);
$b = round($color->blue() + (255 - $color->blue()) * $intensity);
return Rgb::fromString("rgb({$r}, {$g}, {$b})");
}
protected function darken(Hex $hex, float $intensity): Rgb
{
$color = $hex->toRgb();
$r = round($color->red() * $intensity);
$g = round($color->green() * $intensity);
$b = round($color->blue() * $intensity);
return Rgb::fromString("rgb({$r}, {$g}, {$b})");
}
}