kartovitskii/laracolor

A Laravel package for generating consistent colors from strings

Maintainers

Package info

github.com/kartovitskii/Laracolor

pkg:composer/kartovitskii/laracolor

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v1.1.0 2026-03-06 10:59 UTC

This package is auto-updated.

Last update: 2026-05-06 11:32:03 UTC


README

Latest Version on Packagist Total Downloads License PHP Version

Laracolor - это элегантный пакет для Laravel, который генерирует консистентные цвета на основе любой строки. Идеально подходит для создания цветных аватарок, тегов, категорий и других элементов интерфейса.

✨ Особенности

  • 🎯 Консистентная генерация - одинаковый ввод всегда дает одинаковый цвет
  • 🎨 8 готовых палитр - от пастельных до ярких
  • ⚙️ Гибкая настройка - кастомные диапазоны saturation и lightness
  • 🌈 HSL и RGB поддержка - работайте с цветами в любом формате
  • 🎭 Контрастные цвета - автоматический подбор цвета текста
  • 📊 Генерация градиентов - создавайте цветовые схемы
  • 🚀 Кэширование - оптимизация производительности
  • 🔧 Configurable - настройка через .env и конфиг

📦 Установка

Установите пакет через Composer:

composer require kartovitskii/laracolor

Публикация конфигурации

php artisan vendor:publish --provider="Kartovitskii\Laracolor\ColorServiceProvider" --tag="laracolor-config"

🚀 Быстрый старт

Базовое использование

use Kartovitskii\Laracolor\Facades\Laracolor;

// Генерация цвета для пользователя
$color = Laracolor::fromString('john.doe@example.com');
// Результат: #d4b8b8 (пастельно-розовый)

// Для аватарок пользователей
$userColor = Laracolor::fromString(auth()->user()->email);

В Blade шаблонах

<div class="user-avatar" style="background-color: {{ Laracolor::fromString($user->email) }}">
    {{ substr($user->name, 0, 1) }}
</div>

<!-- С контрастным текстом -->
<div class="user-avatar" style="background-color: {{ Laracolor::fromString($user->email) }}; 
    color: {{ Laracolor::getContrastColor($user->email) }}">
    {{ substr($user->name, 0, 1) }}
</div>

🎨 Палитры

Laracolor поддерживает 8 различных палитр:

Палитра Описание Пример
pastel Мягкие, приглушенные тона 🎨 #d4b8b8, #b8d4c8
vibrant Насыщенные, яркие цвета 🎨 #ff6b6b, #4ecdc4
dark Темные, глубокие оттенки 🎨 #2c3e50, #34495e
light Светлые, воздушные тона 🎨 #f8f9fa, #e9ecef
muted Спокойные, неброские цвета 🎨 #95a5a6, #7f8c8d
warm Теплые оттенки (красные, оранжевые) 🎨 #e67e22, #d35400
cold Холодные тона (синие, фиолетовые) 🎨 #3498db, #9b59b6
random Полностью случайные цвета

Использование палитр

// Пастельные тона (по умолчанию)
$pastel = Laracolor::fromString('user1');

// Яркие цвета
$vibrant = Laracolor::setPalette('vibrant')->fromString('user2');

// Теплые оттенки
$warm = Laracolor::setPalette('warm')->fromString('user3');

📚 Документация

fromString(string $string): string

Генерирует HEX-цвет на основе строки.

$hex = Laracolor::fromString('hello world'); // #c4d4b8

toRgb(string $string): array

Возвращает RGB значения.

$rgb = Laracolor::toRgb('hello world');
// ['red' => 196, 'green' => 212, 'blue' => 184]

toHsl(string $string): array

Возвращает HSL значения.

$hsl = Laracolor::toHsl('hello world');
// ['hue' => 85.71, 'saturation' => 45.5, 'lightness' => 82.5]

Дополнительные методы

getContrastColor(string $string): string

Возвращает черный или белый цвет для контрастного текста.

$bgColor = Laracolor::fromString('user');
$textColor = Laracolor::getContrastColor('user');
// Используйте $textColor для текста на фоне $bgColor

getGradient(string $string, int $steps = 5): array

Генерирует градиент из указанного количества цветов.

$gradient = Laracolor::getGradient('brand', 5);
// ['#8ba3c7', '#9bb3d7', '#abc3e7', '#bbd3f7', '#cbe3ff']

Настройка палитр

Через методы

$customColor = Laracolor::setSaturationRange(40, 60)
    ->setLightnessRange(50, 70)
    ->setHueOffset(120) // смещение оттенка
    ->fromString('custom');

Через конфигурацию

// config/laracolor.php
'custom_ranges' => [
    'saturation' => [
        'min' => 40,
        'max' => 60,
    ],
    'lightness' => [
        'min' => 50,
        'max' => 70,
    ],
],

⚡ Кэширование

Включите кэширование для улучшения производительности:

LARACOLOR_CACHE_ENABLED=true
LARACOLOR_CACHE_TTL=3600