50 lines
1.2 KiB
PHP
50 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Domain\Marketing;
|
|
|
|
/**
|
|
* Closed catalog of icon keys available for wedding modality detail
|
|
* sections (benefits strip and included items).
|
|
*
|
|
* Keys are stable kebab-case identifiers rendered as inline SVGs by the
|
|
* public Blade components. Admin selection is constrained to this catalog
|
|
* so arbitrary SVG markup can never reach the public page.
|
|
*/
|
|
final class PackageIconCatalog
|
|
{
|
|
/**
|
|
* @return array<string, string> map of icon_key => pt-BR label
|
|
*/
|
|
public static function labels(): array
|
|
{
|
|
return [
|
|
'calendar' => 'Calendário',
|
|
'checklist' => 'Checklist',
|
|
'users' => 'Casais',
|
|
'map' => 'Mapa e fornecedores',
|
|
'heart' => 'Cuidado',
|
|
'spark' => 'Detalhes',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @return list<string>
|
|
*/
|
|
public static function keys(): array
|
|
{
|
|
return array_keys(self::labels());
|
|
}
|
|
|
|
public static function isValid(string $iconKey): bool
|
|
{
|
|
return isset(self::labels()[$iconKey]);
|
|
}
|
|
|
|
public static function labelFor(string $iconKey): ?string
|
|
{
|
|
return self::labels()[$iconKey] ?? null;
|
|
}
|
|
}
|