v1.0.3
PriviMetrics 2
- <?php
-
- declare(strict_types=1);
-
- function fontOptions(string $group = ''): array
- {
- return [
- 'space-grotesk' => ['label' => 'Space Grotesk', 'family' => "'Space Grotesk'", 'file' => 'SpaceGrotesk.ttf', 'fallback' => 'sans-serif'],
- 'space-grotesk-qwantium' => ['label' => 'Space Grotesk Qwantium', 'family' => "'Space Grotesk Qwantium'", 'file' => 'SpaceGroteskQu.ttf', 'fallback' => 'sans-serif'],
- 'museomoderno' => ['label' => 'MuseoModerno', 'family' => "'MuseoModerno'", 'file' => 'MuseoModerno.ttf', 'fallback' => 'sans-serif'],
- 'kumar-one-outline' => ['label' => 'Kumar One Outline', 'family' => "'Kumar One Outline'", 'file' => 'KumarOne.ttf', 'fallback' => 'sans-serif'],
- 'inter' => ['label' => 'Inter', 'family' => "'Inter'", 'file' => 'Inter.ttf', 'fallback' => 'sans-serif'],
- 'ibm-plex-sans' => ['label' => 'IBM Plex Sans', 'family' => "'IBM Plex Sans'", 'file' => 'IBMPlexSans.ttf', 'fallback' => 'sans-serif'],
- 'poppins' => ['label' => 'Poppins', 'family' => "'Poppins'", 'file' => 'Poppins.ttf', 'fallback' => 'sans-serif'],
- 'unbounded' => ['label' => 'Unbounded', 'family' => "'Unbounded'", 'file' => 'Unbounded.ttf', 'fallback' => 'sans-serif'],
- 'orbit' => ['label' => 'Orbit', 'family' => "'Orbit'", 'file' => 'Orbit.ttf', 'fallback' => 'sans-serif'],
- 'righteous' => ['label' => 'Righteous', 'family' => "'Righteous'", 'file' => 'Righteous.ttf', 'fallback' => 'sans-serif'],
- 'jetbrains-mono' => ['label' => 'JetBrains Mono', 'family' => "'JetBrains Mono'", 'file' => 'JetBrainsMono.ttf', 'fallback' => 'monospace'],
- 'system' => ['label' => 'System default', 'family' => '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto', 'file' => '', 'fallback' => 'sans-serif'],
- ];
- }
-
- function fontDefaultSlug(string $group): string
- {
- return match ($group) {
- 'body' => 'space-grotesk-qwantium',
- 'heading' => 'orbit',
- 'value' => 'kumar-one-outline',
- default => 'system',
- };
- }
-
- function fontSlug(string $group): string
- {
- $envKey = 'FONT_' . strtoupper($group);
- $slug = env($envKey, fontDefaultSlug($group));
- $options = fontOptions();
- return isset($options[$slug]) ? $slug : fontDefaultSlug($group);
- }
-
- function fontFamilyCss(string $group): string
- {
- $opt = fontOptions()[fontSlug($group)];
- return $opt['family'] . ', ' . $opt['fallback'];
- }
-
- function fontFaceStyleTag(): string
- {
- $options = fontOptions();
- $seen = [];
- $css = '';
- foreach (['body', 'heading', 'value'] as $group) {
- $opt = $options[fontSlug($group)];
- if ($opt['file'] === '' || isset($seen[$opt['file']])) {
- continue;
- }
- $seen[$opt['file']] = true;
- $family = str_replace(['"', '<', '>'], '', $opt['family']);
- $file = preg_replace('/[^A-Za-z0-9._-]/', '', $opt['file']);
- $css .= '@font-face{font-family:' . $family . ';src:url("assets/fonts/' . $file . '") format("truetype");font-display:swap;}';
- }
- if ($css === '') {
- return '';
- }
- return '<style>' . $css . '</style>';
- }
-