{"version":3,"file":"sixbell-telco-sdk-utils-theme.mjs","sources":["../../../projects/sdk/utils/theme/src/constants.ts","../../../projects/sdk/utils/theme/src/utils/utils.ts","../../../projects/sdk/utils/theme/src/theme-storage/theme-storage.service.ts","../../../projects/sdk/utils/theme/src/theme-assets/theme-assets.service.ts","../../../projects/sdk/utils/theme/src/theme-dom/theme-dom.service.ts","../../../projects/sdk/utils/theme/src/theme-scheme/theme-scheme.service.ts","../../../projects/sdk/utils/theme/src/theme.service.ts","../../../projects/sdk/utils/theme/src/providers/theme.provider.ts","../../../projects/sdk/utils/theme/sixbell-telco-sdk-utils-theme.ts"],"sourcesContent":["/**\n * Theme Constants and Injection Tokens\n * Centralized configuration values and DI tokens following Single Responsibility Principle\n */\n\nimport { RuntimeThemeConfig } from './models/theme';\n\n/**\n * Default base theme - always available unless explicitly excluded\n * This is the foundational theme that comes with the SDK\n */\nexport const DEFAULT_BASE_THEME = 'sixbell_telco' as const;\n\n/**\n * List of default themes available out of the box\n */\nexport const DEFAULT_THEMES = [DEFAULT_BASE_THEME] as const;\n\n/**\n * Type-safe default theme codes for IDE IntelliSense\n */\nexport const DEFAULT_THEME_CODES = [DEFAULT_BASE_THEME] as const;\n\n/**\n * Type representing valid default theme codes\n */\nexport type DefaultThemeCode = (typeof DEFAULT_THEME_CODES)[number];\n\n/**\n * LocalStorage key for persisting selected theme\n */\nexport const THEME_STORAGE_THEME_KEY = 'selectedTheme' as const;\n\n/**\n * LocalStorage key for persisting selected scheme\n */\nexport const THEME_STORAGE_SCHEME_KEY = 'selectedScheme' as const;\n\n/**\n * Namespace for storage keys to prevent collisions with other apps\n */\nexport const THEME_STORAGE_NAMESPACE = 'theme:' as const;\n\n/**\n * HTML attribute name for setting the active theme on document body\n */\nexport const THEME_ATTRIBUTE_NAME = 'data-theme' as const;\n\n/**\n * Separator used when combining theme name and scheme into a theme identifier\n * @example \"sixbell_telco__light\" (theme__scheme format)\n */\nexport const THEME_SCHEME_SEPARATOR = '__' as const;\n\n/**\n * Default theme scheme preference\n */\nexport const DEFAULT_SCHEME = 'system' as const;\n\n/**\n * Schema version for runtime theme configuration payloads.\n * Bump this when the JSON structure changes in a breaking way.\n */\nexport const THEME_SCHEMA_VERSION = '2' as const;\n\n/**\n * All valid scheme values\n */\nexport const VALID_SCHEMES = ['system', 'light', 'dark'] as const;\n\n/**\n * Minimal runtime configuration used as a resilient fallback when remote loading fails\n */\nexport const FALLBACK_RUNTIME_THEME_CONFIG: RuntimeThemeConfig = {\n\tmeta: {\n\t\tname: DEFAULT_BASE_THEME,\n\t\tupdatedAt: new Date().toISOString(),\n\t\thash: 'fallback-hash',\n\t\tschemaVersion: THEME_SCHEMA_VERSION,\n\t},\n\tfonts: [\n\t\t{\n\t\t\tfamily: 'Poppins',\n\t\t\tfaces: [\n\t\t\t\t{ weight: 400, style: 'normal', src: '/assets/fonts/Poppins-Regular.ttf' },\n\t\t\t\t{ weight: 500, style: 'normal', src: '/assets/fonts/Poppins-Medium.ttf' },\n\t\t\t\t{ weight: 600, style: 'normal', src: '/assets/fonts/Poppins-SemiBold.ttf' },\n\t\t\t\t{ weight: 700, style: 'normal', src: '/assets/fonts/Poppins-Bold.ttf' },\n\t\t\t\t{ weight: 800, style: 'normal', src: '/assets/fonts/Poppins-ExtraBold.ttf' },\n\t\t\t\t{ weight: 900, style: 'normal', src: '/assets/fonts/Poppins-Black.ttf' },\n\t\t\t],\n\t\t},\n\t],\n\tthemes: {\n\t\tlight: {\n\t\t\tvariables: {\n\t\t\t\tcolors: {\n\t\t\t\t\t'--color-base-100': 'oklch(96.65% 0.0045 258.32)',\n\t\t\t\t\t'--color-base-200': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-base-300': 'oklch(92.88% 0.0126 255.51)',\n\t\t\t\t\t'--color-base-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-primary': 'oklch(65.64% 0.1155 219.3)',\n\t\t\t\t\t'--color-primary-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-secondary': 'oklch(86.57% 0.0064 255.48)',\n\t\t\t\t\t'--color-secondary-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-accent': 'oklch(70.45% 0.1926 39.23)',\n\t\t\t\t\t'--color-accent-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-neutral': 'oklch(92.08% 0.0063 255.48)',\n\t\t\t\t\t'--color-neutral-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-info': 'oklch(55.86% 0.1907 256)',\n\t\t\t\t\t'--color-info-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-success': 'oklch(73.79% 0.2409 140.89)',\n\t\t\t\t\t'--color-success-content': 'oklch(36.22% 0.1147 140.02)',\n\t\t\t\t\t'--color-warning': 'oklch(85.44% 0.1839 108.37)',\n\t\t\t\t\t'--color-warning-content': 'oklch(46.41% 0.0998 109)',\n\t\t\t\t\t'--color-error': 'oklch(65.92% 0.2275 29.05)',\n\t\t\t\t\t'--color-error-content': 'oklch(25.91% 0.0904 29.25)',\n\t\t\t\t\t'--color-base-50': 'color-mix(in oklch, var(--color-base-200), #000 7%)',\n\t\t\t\t\t'--color-primary-light': 'color-mix(in oklch, var(--color-primary) 75%, #fff)',\n\t\t\t\t\t'--color-primary-gradient': 'color-mix(in oklch, var(--color-primary) 60%, #121212)',\n\t\t\t\t\t'--color-primary-gradient-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-secondary-gradient': 'color-mix(in oklch, var(--color-secondary) 60%, #121212)',\n\t\t\t\t\t'--color-secondary-gradient-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-tertiary-gradient': 'color-mix(in oklch, var(--color-tertiary) 60%, #121212)',\n\t\t\t\t\t'--color-tertiary-gradient-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-accent-gradient': 'color-mix(in oklch, var(--color-accent) 60%, #121212)',\n\t\t\t\t\t'--color-accent-gradient-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-tertiary': 'oklch(72.52% 0 0)',\n\t\t\t\t\t'--color-tertiary-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-neutral-secondary': 'oklch(73.97% 0.0115 280.4)',\n\t\t\t\t\t'--color-neutral-secondary-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-neutral-tertiary': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-neutral-tertiary-content': 'oklch(73.97% 0.0115 280.4)',\n\t\t\t\t\t'--color-base-placeholder': 'oklch(51.6% 0.0073 255.51)',\n\t\t\t\t\t'--color-backdrop': 'oklch(0% 0 0/ 0.4)',\n\t\t\t\t\t'--color-shadow-primary': 'oklch(0.8975 0 0)',\n\t\t\t\t\t'--color-shadow-backdrop': 'oklch(0% 0 0/ 0.25)',\n\t\t\t\t\t'--color-metrics-increase': 'oklch(74.59% 0.1812 152.33)',\n\t\t\t\t\t'--color-metrics-decrease': 'oklch(63.07% 0.194 29.44)',\n\t\t\t\t\t'--color-metrics-neutral': 'oklch(62.99% 0.0152 202.37)',\n\t\t\t\t\t'--color-metrics-intensity-highest': 'oklch(65.64% 0.1155 219.3)',\n\t\t\t\t\t'--color-metrics-intensity-high': 'oklch(68.62% 0.0925 226.08)',\n\t\t\t\t\t'--color-metrics-intensity-medium': 'oklch(68.62% 0.0925 226.08)',\n\t\t\t\t\t'--color-metrics-intensity-low': 'oklch(76.18% 0.0656 213.66)',\n\t\t\t\t\t'--color-metrics-intensity-lowest': 'oklch(78% 0.0473 211.88)',\n\t\t\t\t\t'--color-scroll-thumb': 'oklch(75% 0 0)',\n\t\t\t\t},\n\t\t\t\tradius: {\n\t\t\t\t\t'--radius-selector': '0.5rem',\n\t\t\t\t\t'--radius-field': '0.25rem',\n\t\t\t\t\t'--radius-box': '0.5rem',\n\t\t\t\t},\n\t\t\t\tsizes: {\n\t\t\t\t\t'--size-selector': '0.25rem',\n\t\t\t\t\t'--size-field': '0.25rem',\n\t\t\t\t},\n\t\t\t\teffects: {\n\t\t\t\t\t'--border': '1px',\n\t\t\t\t\t'--depth': '0',\n\t\t\t\t\t'--noise': '0',\n\t\t\t\t},\n\t\t\t\tothers: {\n\t\t\t\t\t'--font-poppins': 'Poppins, sans-serif',\n\t\t\t\t\t'--font-heading': 'Poppins, sans-serif',\n\t\t\t\t\t'--font-body': 'Poppins, sans-serif',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tdark: {\n\t\t\tvariables: {\n\t\t\t\tcolors: {\n\t\t\t\t\t'--color-base-100': 'oklch(18.22% 0 0)',\n\t\t\t\t\t'--color-base-200': 'oklch(23.5% 0 0)',\n\t\t\t\t\t'--color-base-300': 'oklch(28.5% 0 0)',\n\t\t\t\t\t'--color-base-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-primary': 'oklch(65.64% 0.1155 219.3)',\n\t\t\t\t\t'--color-primary-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-secondary': 'oklch(48.72% 0.0161 276.78)',\n\t\t\t\t\t'--color-secondary-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-accent': 'oklch(70.45% 0.1926 39.23)',\n\t\t\t\t\t'--color-accent-content': 'oklch(23.5% 0 0)',\n\t\t\t\t\t'--color-neutral': 'oklch(49.26% 0 0)',\n\t\t\t\t\t'--color-neutral-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-info': 'oklch(55.86% 0.1907 256)',\n\t\t\t\t\t'--color-info-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-success': 'oklch(73.79% 0.2409 140.89)',\n\t\t\t\t\t'--color-success-content': 'oklch(36.22% 0.1147 140.02)',\n\t\t\t\t\t'--color-warning': 'oklch(85.44% 0.1839 108.37)',\n\t\t\t\t\t'--color-warning-content': 'oklch(46.41% 0.0998 109)',\n\t\t\t\t\t'--color-error': 'oklch(65.92% 0.2275 29.05)',\n\t\t\t\t\t'--color-error-content': 'oklch(25.91% 0.0904 29.25)',\n\t\t\t\t\t'--color-base-50': 'color-mix(in oklch, var(--color-base-200), #000 7%)',\n\t\t\t\t\t'--color-primary-light': 'color-mix(in oklch, var(--color-primary) 75%, #000)',\n\t\t\t\t\t'--color-primary-gradient': 'color-mix(in oklch, var(--color-primary) 60%, #121212)',\n\t\t\t\t\t'--color-primary-gradient-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-secondary-gradient': 'color-mix(in oklch, var(--color-secondary) 60%, #121212)',\n\t\t\t\t\t'--color-secondary-gradient-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-tertiary-gradient': 'color-mix(in oklch, var(--color-tertiary) 60%, #121212)',\n\t\t\t\t\t'--color-tertiary-gradient-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-accent-gradient': 'color-mix(in oklch, var(--color-accent) 60%, #121212)',\n\t\t\t\t\t'--color-accent-gradient-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-tertiary': 'oklch(72.52% 0 0)',\n\t\t\t\t\t'--color-tertiary-content': 'oklch(13.49% 0.0024 286.07)',\n\t\t\t\t\t'--color-neutral-secondary': 'oklch(73.97% 0.0115 280.4)',\n\t\t\t\t\t'--color-neutral-secondary-content': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-neutral-tertiary': 'oklch(100% 0 0)',\n\t\t\t\t\t'--color-neutral-tertiary-content': 'oklch(73.97% 0.0115 280.4)',\n\t\t\t\t\t'--color-base-placeholder': 'oklch(51.6% 0.0073 255.51)',\n\t\t\t\t\t'--color-backdrop': 'oklch(0% 0 0/ 0.4)',\n\t\t\t\t\t'--color-shadow-primary': 'oklch(0 0 0)',\n\t\t\t\t\t'--color-shadow-backdrop': 'oklch(0% 0 0/ 0.25)',\n\t\t\t\t\t'--color-metrics-increase': 'oklch(74.59% 0.1812 152.33)',\n\t\t\t\t\t'--color-metrics-decrease': 'oklch(63.07% 0.194 29.44)',\n\t\t\t\t\t'--color-metrics-neutral': 'oklch(62.99% 0.0152 202.37)',\n\t\t\t\t\t'--color-metrics-intensity-highest': 'oklch(65.64% 0.1155 219.3)',\n\t\t\t\t\t'--color-metrics-intensity-high': 'oklch(68.62% 0.0925 226.08)',\n\t\t\t\t\t'--color-metrics-intensity-medium': 'oklch(68.62% 0.0925 226.08)',\n\t\t\t\t\t'--color-metrics-intensity-low': 'oklch(76.18% 0.0656 213.66)',\n\t\t\t\t\t'--color-metrics-intensity-lowest': 'oklch(78% 0.0473 211.88)',\n\t\t\t\t\t'--color-scroll-thumb': 'oklch(35% 0 0)',\n\t\t\t\t},\n\t\t\t\tradius: {\n\t\t\t\t\t'--radius-selector': '0.5rem',\n\t\t\t\t\t'--radius-field': '0.25rem',\n\t\t\t\t\t'--radius-box': '0.5rem',\n\t\t\t\t},\n\t\t\t\tsizes: {\n\t\t\t\t\t'--size-selector': '0.25rem',\n\t\t\t\t\t'--size-field': '0.25rem',\n\t\t\t\t},\n\t\t\t\teffects: {\n\t\t\t\t\t'--border': '1px',\n\t\t\t\t\t'--depth': '0',\n\t\t\t\t\t'--noise': '0',\n\t\t\t\t},\n\t\t\t\tothers: {\n\t\t\t\t\t'--font-poppins': 'Poppins, sans-serif',\n\t\t\t\t\t'--font-heading': 'Poppins, sans-serif',\n\t\t\t\t\t'--font-body': 'Poppins, sans-serif',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\tassets: [\n\t\t{\n\t\t\tname: 'logo',\n\t\t\tlight: '/assets/logos/sixbell-logo-light-mode.svg',\n\t\t\tdark: '/assets/logos/sixbell-logo-dark-mode.svg',\n\t\t},\n\t],\n};\n\n/**\n * CSS class name applied to document when dark theme is detected\n */\nexport const DARK_THEME_CLASS = 'dark' as const;\n\n/**\n * Media query for detecting system dark mode preference\n */\nexport const DARK_MODE_MEDIA_QUERY = '(prefers-color-scheme: dark)' as const;\n","/**\n * Theme Utility Functions\n * Pure, side-effect-free utilities for theme logic\n */\n\nimport { DEFAULT_BASE_THEME, VALID_SCHEMES } from '../constants';\nimport { ThemeStateConfig } from '../models/theme';\n\n/**\n * Validates that a given value is a valid theme scheme\n * @param value - The value to validate\n * @returns True if the value is a valid scheme ('system', 'light', or 'dark')\n */\nexport function isValidScheme(value: unknown): value is (typeof VALID_SCHEMES)[number] {\n\treturn typeof value === 'string' && (VALID_SCHEMES as readonly string[]).includes(value);\n}\n\n/**\n * Builds the final theme identifier by combining theme name and scheme\n * @param themeName - The name of the theme\n * @param scheme - The scheme variant (light or dark)\n * @returns Combined identifier (e.g., \"sixbell_telco__light\")\n */\nexport function buildThemeIdentifier(themeName: string, scheme: string): string {\n\treturn `${themeName}__${scheme}`;\n}\n\n/**\n * Extracts theme name and scheme from a combined identifier\n * @param identifier - The combined identifier (e.g., \"sixbell_telco__light\")\n * @returns Object with extracted themeName and scheme\n */\nexport function parseThemeIdentifier(identifier: string): { themeName: string; scheme: string } {\n\tconst [themeName, scheme] = identifier.split('__');\n\treturn { themeName, scheme };\n}\n\n/**\n * Determines the effective default theme from configuration\n * Ensures the default theme is in the available themes list\n * Falls back to first available theme if default is not available\n * @param defaultTheme - Configured default theme\n * @param availableThemes - List of available themes\n * @returns The effective default theme to use\n */\nexport function resolveDefaultTheme(defaultTheme: string | undefined, availableThemes: string[]): string {\n\t// Use provided default if valid\n\tif (defaultTheme && availableThemes.includes(defaultTheme)) {\n\t\treturn defaultTheme;\n\t}\n\n\t// Check if base theme is available\n\tif (availableThemes.includes(DEFAULT_BASE_THEME)) {\n\t\treturn DEFAULT_BASE_THEME;\n\t}\n\n\t// Fallback to first available\n\treturn availableThemes[0] || DEFAULT_BASE_THEME;\n}\n\n/**\n * Validates that a given theme exists in the available themes\n * @param theme - Theme name to validate\n * @param availableThemes - List of available themes\n * @returns True if theme is available\n */\nexport function isThemeAvailable(theme: string, availableThemes: string[]): boolean {\n\treturn availableThemes.includes(theme);\n}\n\n/**\n * Validates the configuration and logs warnings for invalid states\n * Returns true if configuration is valid for use\n * @param config - Configuration to validate\n * @param configName - Name of config for logging purposes\n * @returns True if configuration is valid\n */\nexport function validateThemeConfig(config: ThemeStateConfig, configName: string = 'ThemeConfig'): boolean {\n\tconst errors: string[] = [];\n\n\tif (!config.availableThemes || config.availableThemes.length === 0) {\n\t\terrors.push('availableThemes must be a non-empty array');\n\t}\n\n\tif (!config.defaultTheme) {\n\t\terrors.push('defaultTheme must be defined');\n\t}\n\n\tif (config.defaultTheme && !config.availableThemes.includes(config.defaultTheme)) {\n\t\terrors.push(`defaultTheme '${config.defaultTheme}' not in availableThemes`);\n\t}\n\n\tif (errors.length > 0) {\n\t\tconsole.error(`${configName} validation failed:`, errors.join(', '));\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n\n/**\n * Formats a theme name for display to users\n * Converts snake_case to Title Case\n * @param theme - Theme name to format\n * @returns Formatted theme name\n */\nexport function formatThemeName(theme: string): string {\n\treturn theme.replace(/_/g, ' ').replace(/\\b\\w/g, (l) => l.toUpperCase());\n}\n\n/**\n * Formats a scheme name for display to users\n * Capitalizes first letter\n * @param scheme - Scheme name to format\n * @returns Formatted scheme name\n */\nexport function formatSchemeName(scheme: string): string {\n\treturn scheme.charAt(0).toUpperCase() + scheme.slice(1);\n}\n\n/**\n * Checks if the browser supports the matchMedia API\n * Safe to call in non-browser environments\n * @returns True if matchMedia is available\n */\nexport function supportsMediaQuery(): boolean {\n\treturn typeof window !== 'undefined' && typeof window.matchMedia === 'function';\n}\n\n/**\n * Checks if localStorage is available in the current environment\n * Safe to call in non-browser environments\n * @returns True if localStorage is accessible\n */\nexport function hasLocalStorage(): boolean {\n\ttry {\n\t\treturn typeof window !== 'undefined' && typeof localStorage !== 'undefined' && localStorage !== null;\n\t} catch {\n\t\treturn false;\n\t}\n}\n","/**\n * Theme Storage Service\n * Handles persistent theme preferences using localStorage\n */\n\nimport { Injectable, inject } from '@angular/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { THEME_STORAGE_NAMESPACE, THEME_STORAGE_SCHEME_KEY, THEME_STORAGE_THEME_KEY } from '../constants';\nimport { ThemeScheme } from '../models/theme';\nimport { hasLocalStorage } from '../utils/utils';\n\n/**\n * Service for managing theme preferences in local storage\n * Provides safe access to localStorage with error handling\n * Works gracefully in non-browser environments (SSR)\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeStorageService {\n\tprivate readonly logger = inject(LoggerService);\n\t/**\n\t * Retrieves the saved theme preference from localStorage\n\t * Returns null if no saved preference or storage unavailable\n\t * @returns Saved theme name or null\n\t */\n\tgetSavedTheme(): string | null {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(THEME_STORAGE_THEME_KEY);\n\t\t\treturn localStorage.getItem(key);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to retrieve saved theme', error as Error, {\n\t\t\t\tcomponent: 'ThemeStorageService',\n\t\t\t\taction: 'getSavedTheme',\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Saves the current theme preference to localStorage\n\t * Fails silently if storage is unavailable\n\t * @param theme - Theme name to save\n\t */\n\tsaveTheme(theme: string): void {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(THEME_STORAGE_THEME_KEY);\n\t\t\tlocalStorage.setItem(key, theme);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to save theme', error as Error, {\n\t\t\t\tcomponent: 'ThemeStorageService',\n\t\t\t\taction: 'saveTheme',\n\t\t\t\ttheme,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Retrieves the saved scheme preference from localStorage\n\t * Returns null if no saved preference or storage unavailable\n\t * @returns Saved scheme ('system', 'light', 'dark') or null\n\t */\n\tgetSavedScheme(): ThemeScheme | null {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(THEME_STORAGE_SCHEME_KEY);\n\t\t\treturn localStorage.getItem(key) as ThemeScheme | null;\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to retrieve saved scheme', error as Error, {\n\t\t\t\tcomponent: 'ThemeStorageService',\n\t\t\t\taction: 'getSavedScheme',\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Saves the current scheme preference to localStorage\n\t * Fails silently if storage is unavailable\n\t * @param scheme - Scheme to save\n\t */\n\tsaveScheme(scheme: ThemeScheme): void {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst key = this.getStorageKey(THEME_STORAGE_SCHEME_KEY);\n\t\t\tlocalStorage.setItem(key, scheme);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to save scheme', error as Error, {\n\t\t\t\tcomponent: 'ThemeStorageService',\n\t\t\t\taction: 'saveScheme',\n\t\t\t\tscheme,\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Clears all saved theme preferences from localStorage\n\t * Useful for resetting to defaults\n\t */\n\tclear(): void {\n\t\ttry {\n\t\t\tif (!hasLocalStorage()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst themeKey = this.getStorageKey(THEME_STORAGE_THEME_KEY);\n\t\t\tconst schemeKey = this.getStorageKey(THEME_STORAGE_SCHEME_KEY);\n\n\t\t\tlocalStorage.removeItem(themeKey);\n\t\t\tlocalStorage.removeItem(schemeKey);\n\t\t} catch (error) {\n\t\t\tthis.logger.error('Failed to clear storage', error as Error, {\n\t\t\t\tcomponent: 'ThemeStorageService',\n\t\t\t\taction: 'clear',\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Constructs a namespaced storage key to avoid collisions\n\t * @param key - The base storage key\n\t * @returns Namespaced key (e.g., \"theme:selectedTheme\")\n\t */\n\tprivate getStorageKey(key: string): string {\n\t\treturn `${THEME_STORAGE_NAMESPACE}${key}`;\n\t}\n}\n","/**\n * Theme Assets Service\n * Manages dynamic asset loading and retrieval based on selected theme and color scheme\n *\n * Responsibilities:\n * - Retrieve assets (images, logos, illustrations) for current theme\n * - Provide scheme-aware asset variants (light/dark)\n * - Cache asset references with config-based resilience strategy\n * - Validate asset availability and provide graceful fallback through memory layers\n *\n * Multi-Layer Caching Strategy (Like Theme Config Persistence):\n * - Layer 1: Current config assets (read from active RuntimeThemeConfig)\n * - Layer 2: Last working asset config (in-memory, persists across config updates)\n * - Falls back to last complete working config if current config breaks\n *\n * This matches the runtime-config and ThemeService pattern where:\n * - User preferences/working configs are stored in memory layers\n * - When new config fails, the last working config is used automatically\n * - Handles asset removal, name changes, path changes, config resets\n */\n\nimport { inject, Injectable, signal } from '@angular/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { AssetDefinition, ResolvedThemeScheme, RuntimeThemeConfig, ThemeAsset, ThemeAssets } from '../models/theme';\nimport { CachedAsset } from './theme-assets.types';\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class ThemeAssetsService {\n\t/**\n\t * Signal holding current runtime configuration reference\n\t * Used to look up asset definitions for the active theme\n\t */\n\tprivate config = signal<RuntimeThemeConfig | null>(null);\n\tprivate themeConfigs = new Map<string, RuntimeThemeConfig>();\n\n\t/**\n\t * Layer 1: In-memory cache of resolved assets\n\t * Maps \"themeName:assetKey\" to CachedAsset for fast retrieval\n\t * Cleared when setConfig() is called to force re-resolution from new config\n\t */\n\tprivate assetCacheByTheme = new Map<string, Map<string, CachedAsset>>();\n\n\t/**\n\t * Layer 2: Last working config storage (memory-based)\n\t * Stores the most recent RuntimeThemeConfig that successfully resolved assets\n\t * Persists across config updates as a complete fallback mechanism\n\t * Similar to ThemeService's multi-layer config persistence\n\t *\n\t * When current config fails to provide an asset:\n\t * - Falls back to the last complete working config\n\t * - Handles asset removal, name changes, path changes\n\t * - Automatically restores working state on config resets\n\t * - No individual URL tracking - entire config stored once per successful load\n\t */\n\tprivate lastWorkingConfigLayer: RuntimeThemeConfig | null = null;\n\n\tprivate logger = inject(LoggerService);\n\n\tconstructor() {}\n\n\t/**\n\t * Initialize service with runtime configuration\n\t * Called by ThemeService after loading configuration\n\t *\n\t * If new config successfully resolves assets, it becomes the new fallback layer.\n\t * Otherwise, previous working config persists.\n\t *\n\t * Only updates Layer 2 if:\n\t * - Config has no PARTIAL/BROKEN assets (missing variants)\n\t * - Themes can be removed entirely (that's intentional)\n\t * - But existing assets must be COMPLETE (both light and dark)\n\t *\n\t * This ensures that accidental removals of variants trigger fallback\n\t * while intentional complete removals are allowed.\n\t *\n\t * @param config - Runtime configuration containing asset definitions\n\t */\n\tsetConfig(config: RuntimeThemeConfig): void {\n\t\tthis.config.set(config);\n\n\t\tconst hasPartialAssets = this.hasPartialAssets(config);\n\t\tconst hasValid = !hasPartialAssets;\n\n\t\tthis.logger.debug('setConfig called', {\n\t\t\tcomponent: 'ThemeAssetsService',\n\t\t\taction: 'setConfig',\n\t\t\thasPartialAssets,\n\t\t\thasValidAssets: hasValid,\n\t\t\tassets: config?.assets ? config.assets.map((asset) => asset.name) : [],\n\t\t\thasLastWorking: !!this.lastWorkingConfigLayer,\n\t\t});\n\n\t\t// Only store as last working config if it has NO partial/broken assets\n\t\tif (hasValid) {\n\t\t\tthis.logger.debug('Storing config as last working config', {\n\t\t\t\tcomponent: 'ThemeAssetsService',\n\t\t\t\taction: 'setConfig',\n\t\t\t});\n\t\t\tthis.lastWorkingConfigLayer = config;\n\t\t} else {\n\t\t\tthis.logger.debug('Config has partial/broken assets - keeping previous last working config', {\n\t\t\t\tcomponent: 'ThemeAssetsService',\n\t\t\t\taction: 'setConfig',\n\t\t\t});\n\t\t}\n\n\t\tthis.clearCache();\n\t}\n\n\tsetThemeConfig(themeName: string, config: RuntimeThemeConfig): void {\n\t\tthis.themeConfigs.set(themeName, config);\n\t\tthis.config.set(config);\n\t\tthis.lastWorkingConfigLayer = config;\n\t\tthis.clearCache(themeName);\n\t}\n\n\t/**\n\t * Internal: Check if config has any PARTIAL/BROKEN assets\n\t * Returns true if ANY asset is incomplete (missing light or dark variant)\n\t *\n\t * A partial asset is invalid:\n\t * - { name: \"logo\", light: \"...\" } ← missing dark\n\t * - { name: \"logo\", dark: \"...\" } ← missing light\n\t * - { name: \"logo\" } ← missing both\n\t *\n\t * Complete removals are OK:\n\t * - [] ← no assets at all (intentional)\n\t * - theme: {} ← theme removed (intentional)\n\t *\n\t * @private\n\t * @param config - Config to check\n\t * @returns True if config has partial/broken assets, false if all complete or intentionally removed\n\t */\n\tprivate hasPartialAssets(config: RuntimeThemeConfig | null): boolean {\n\t\tif (!config?.assets) return false;\n\n\t\treturn this.themeHasProblematicAssets(config.assets);\n\t}\n\n\t/**\n\t * Internal: Check if a theme asset list has ANY problematic assets\n\t * Problematic assets are:\n\t * - Partial assets: missing light or dark variant\n\t * - Empty assets: no variants at all\n\t *\n\t * NOT problematic:\n\t * - Completely empty list: [] (all assets intentionally removed - OK to accept)\n\t *\n\t * @private\n\t * @param obj - Theme's asset object to check\n\t * @returns True if object has problematic assets\n\t */\n\tprivate themeHasProblematicAssets(assets: ThemeAssets): boolean {\n\t\tif (!assets.length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (const asset of assets) {\n\t\t\tif (this.isPartialAsset(asset)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Internal: Check if object is a PARTIAL asset (incomplete)\n\t * Partial means it LOOKS LIKE an asset (has some scheme keys) but is missing variants\n\t *\n\t * @private\n\t * @param obj - Object to check\n\t * @returns True if object is a partial/incomplete asset\n\t */\n\tprivate isPartialAsset(asset: AssetDefinition): boolean {\n\t\tconst hasLight = typeof asset.light === 'string';\n\t\tconst hasDark = typeof asset.dark === 'string';\n\t\tif (!hasLight && !hasDark) {\n\t\t\treturn true;\n\t\t}\n\t\treturn !hasLight || !hasDark;\n\t}\n\n\t/**\n\t * Get asset URL for the specified scheme\n\t * Retrieves a specific asset variant (light or dark) with config-based fallback\n\t *\n\t * Resolution Strategy (in order):\n\t * 1. Try to get the requested scheme variant from current config\n\t * 2. If not available, use last working config from memory layer\n\t * 3. If no last working config, return null\n\t *\n\t * This ensures:\n\t * - Graceful degradation when assets are removed from config\n\t * - Support for asset name changes, path changes, config resets\n\t * - Automatic restoration when config is fixed\n\t * - No automatic scheme switching (stays on requested scheme)\n\t * - Similar to ThemeService's config persistence pattern\n\t *\n\t * @param themeName - Name of the theme (e.g., 'sixbell_telco', 'wom')\n\t * @param assetKey - Asset identifier path (e.g., 'logo', 'banners.hero', 'illustrations.empty')\n\t * @param scheme - Color scheme ('light' or 'dark')\n\t * @returns Asset URL for the specified scheme, or from last working config, or null if not found\n\t *\n\t * @example\n\t * // Current config has dark - returns requested variant\n\t * getAssetUrl('wom', 'logo', 'dark')\n\t * // Returns: '/assets/logos/logo_wom_dark.svg'\n\t *\n\t * // Current config missing dark - returns from last working config\n\t * getAssetUrl('wom', 'logo', 'dark')\n\t * // Returns: '/assets/logos/logo_wom_dark.svg' (from last working config layer)\n\t *\n\t * // Never existed - no working config\n\t * getAssetUrl('wom', 'nonexistent', 'dark')\n\t * // Returns: null\n\t */\n\tgetAssetUrl(themeName: string, assetKey: string, scheme: ResolvedThemeScheme): string | null {\n\t\tconst cacheKey = `${themeName}:${assetKey}`;\n\t\tconst themeCache = this.assetCacheByTheme.get(themeName);\n\t\tconst cached = themeCache?.get(cacheKey);\n\t\tif (cached) {\n\t\t\treturn scheme === 'light' ? cached.light : cached.dark;\n\t\t}\n\t\t// Layer 1: Try to resolve from current config\n\t\tconst configToUse = this.themeConfigs.get(themeName) ?? this.config();\n\t\tconst url = this.resolveAssetUrl(themeName, assetKey, scheme, configToUse);\n\t\tif (url) {\n\t\t\tthis.logger.debug('Asset resolved from current config', {\n\t\t\t\tcomponent: 'ThemeAssetsService',\n\t\t\t\taction: 'getAssetUrl',\n\t\t\t\tassetKey,\n\t\t\t\tscheme,\n\t\t\t\turl,\n\t\t\t});\n\t\t\tthis.cacheAsset(themeName, assetKey, configToUse);\n\t\t\treturn url;\n\t\t}\n\n\t\t// Layer 2: Try to resolve from last working config\n\t\tif (this.lastWorkingConfigLayer) {\n\t\t\tconst lastWorkingUrl = this.resolveAssetUrl(themeName, assetKey, scheme, this.lastWorkingConfigLayer);\n\t\t\tif (lastWorkingUrl) {\n\t\t\t\tthis.logger.debug('Asset resolved from last working config (fallback)', {\n\t\t\t\t\tcomponent: 'ThemeAssetsService',\n\t\t\t\t\taction: 'getAssetUrl',\n\t\t\t\t\tfallback: true,\n\t\t\t\t\tassetKey,\n\t\t\t\t\tscheme,\n\t\t\t\t\turl: lastWorkingUrl,\n\t\t\t\t});\n\t\t\t\tthis.cacheAsset(themeName, assetKey, this.lastWorkingConfigLayer);\n\t\t\t\treturn lastWorkingUrl;\n\t\t\t}\n\t\t}\n\n\t\t// Layer 3: No URL available\n\t\tthis.logger.debug('Asset not found in any layer', {\n\t\t\tcomponent: 'ThemeAssetsService',\n\t\t\taction: 'getAssetUrl',\n\t\t\tassetKey,\n\t\t\tscheme,\n\t\t\thasLastWorking: !!this.lastWorkingConfigLayer,\n\t\t});\n\t\treturn null;\n\t}\n\n\t/**\n\t * Internal: Resolve asset URL from a specific config\n\t * Helper method to resolve URL from current or last working config\n\t *\n\t * Returns null if:\n\t * - Asset not found\n\t * - Asset is incomplete (missing either light or dark variant)\n\t * - Requested scheme variant not available\n\t *\n\t * @private\n\t * @param themeName - Theme name\n\t * @param assetKey - Asset key path\n\t * @param scheme - Scheme variant\n\t * @param configToUse - Config to resolve from (current or lastWorking)\n\t * @returns URL if found and complete, null otherwise\n\t */\n\tprivate resolveAssetUrl(themeName: string, assetKey: string, scheme: ResolvedThemeScheme, configToUse: RuntimeThemeConfig | null): string | null {\n\t\tif (!configToUse?.assets) return null;\n\t\tif (configToUse.meta?.name && configToUse.meta.name !== themeName) return null;\n\n\t\tconst asset = this.findAsset(configToUse.assets, assetKey);\n\t\tif (!asset || !this.isThemeAsset(asset)) return null;\n\t\tconst url = scheme === 'light' ? asset.light : asset.dark;\n\n\t\t// Return null if variant is missing (indicates incomplete asset)\n\t\treturn url || null;\n\t}\n\n\t/**\n\t * Get both light and dark variants of an asset\n\t * Returns an object with both scheme variants for easy access\n\t *\n\t * @param themeName - Name of the theme\n\t * @param assetKey - Asset identifier path\n\t * @returns Object with light and dark URLs, or null if asset not found\n\t *\n\t * @example\n\t * getAsset('wom', 'logo')\n\t * // Returns: { light: '/assets/logos/logo_wom_light.svg', dark: '/assets/logos/logo_wom_dark.svg' }\n\t */\n\tgetAsset(themeName: string, assetKey: string): ThemeAsset | null {\n\t\t// Try current config first\n\t\tconst configToUse = this.themeConfigs.get(themeName) ?? this.config();\n\t\tlet light = this.resolveAssetUrl(themeName, assetKey, 'light', configToUse);\n\t\tlet dark = this.resolveAssetUrl(themeName, assetKey, 'dark', configToUse);\n\n\t\t// If not available in current config, try last working config\n\t\tif ((!light || !dark) && this.lastWorkingConfigLayer) {\n\t\t\tif (!light) light = this.resolveAssetUrl(themeName, assetKey, 'light', this.lastWorkingConfigLayer);\n\t\t\tif (!dark) dark = this.resolveAssetUrl(themeName, assetKey, 'dark', this.lastWorkingConfigLayer);\n\t\t}\n\n\t\t// Return asset if at least one variant found\n\t\tif (light || dark) {\n\t\t\tthis.cacheAsset(themeName, assetKey, configToUse ?? this.lastWorkingConfigLayer);\n\t\t\treturn { light: light || undefined, dark: dark || undefined };\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t/**\n\t * Check if an asset exists in the specified theme\n\t * Useful for conditional rendering or fallback handling\n\t *\n\t * @param themeName - Name of the theme\n\t * @param assetKey - Asset identifier path\n\t * @returns True if the asset exists, false otherwise\n\t *\n\t * @example\n\t * hasAsset('wom', 'logo') // true\n\t * hasAsset('wom', 'nonexistent') // false\n\t */\n\thasAsset(themeName: string, assetKey: string): boolean {\n\t\t// Check if asset exists in current config\n\t\tconst configToUse = this.themeConfigs.get(themeName) ?? this.config();\n\t\tif (this.resolveAssetUrl(themeName, assetKey, 'light', configToUse) || this.resolveAssetUrl(themeName, assetKey, 'dark', configToUse)) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Check if asset exists in last working config\n\t\tif (this.lastWorkingConfigLayer) {\n\t\t\tif (\n\t\t\t\tthis.resolveAssetUrl(themeName, assetKey, 'light', this.lastWorkingConfigLayer) ||\n\t\t\t\tthis.resolveAssetUrl(themeName, assetKey, 'dark', this.lastWorkingConfigLayer)\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get all assets for a specific theme\n\t * Returns the complete asset set for further processing\n\t *\n\t * @param themeName - Name of the theme\n\t * @returns All assets for the theme, or null if theme has no assets\n\t */\n\tgetThemeAssets(themeName: string): ThemeAssets | null {\n\t\tconst cfg = this.themeConfigs.get(themeName) ?? this.config();\n\t\tif (!cfg?.assets) return null;\n\t\tif (cfg.meta?.name && cfg.meta.name !== themeName) return null;\n\t\treturn cfg.assets;\n\t}\n\n\t/**\n\t * Manually clear the asset cache\n\t * Typically called automatically by setConfig(), but can be used for:\n\t * - Testing and debugging\n\t * - Force cache refresh in special scenarios\n\t *\n\t * Note: The last-working-config layer is NOT cleared - only the config cache\n\t * This allows the fallback mechanism to persist across manual cache clears\n\t *\n\t * @example\n\t * // In tests\n\t * assetsService.clearCache();\n\t *\n\t * @example\n\t * // Force refresh (if config doesn't change but images do)\n\t * assetsService.clearCache();\n\t * assetsService.setConfig(currentConfig);\n\t */\n\tpublic clearCache(themeName?: string): void {\n\t\tif (themeName) {\n\t\t\tthis.assetCacheByTheme.delete(themeName);\n\t\t\treturn;\n\t\t}\n\t\tthis.assetCacheByTheme.clear();\n\t}\n\n\tpublic async prefetchAssets(themeName: string): Promise<void> {\n\t\tconst cfg = this.themeConfigs.get(themeName) ?? this.config();\n\t\tif (!cfg?.assets) {\n\t\t\treturn;\n\t\t}\n\t\tif (cfg.meta?.name && cfg.meta.name !== themeName) {\n\t\t\treturn;\n\t\t}\n\t\tconst urls = new Set<string>();\n\t\tthis.collectAssetUrls(cfg.assets, urls);\n\t\tawait Promise.allSettled(\n\t\t\t[...urls].map((url) =>\n\t\t\t\tfetch(url, {\n\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\tcache: 'no-store',\n\t\t\t\t}).catch(() => undefined),\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * Internal: Type guard to validate ThemeAsset structure\n\t * Requires BOTH light and dark variants to be present\n\t * Partial assets (missing either variant) are considered incomplete/broken\n\t *\n\t * Why both required:\n\t * - Assets are designed to work with both light and dark themes\n\t * - Missing variant indicates incomplete config (likely accidental removal)\n\t * - Triggers fallback to last complete working config\n\t * - Prevents partially broken configs from overwriting good state\n\t *\n\t * @private\n\t * @param obj - Object to validate\n\t * @returns True if object is a valid ThemeAsset (has BOTH light and dark)\n\t */\n\tprivate isThemeAsset(obj: unknown): obj is ThemeAsset {\n\t\tif (typeof obj !== 'object' || obj === null) return false;\n\n\t\tconst record = obj as Record<string, unknown>;\n\t\tconst hasLight = typeof record['light'] === 'string';\n\t\tconst hasDark = typeof record['dark'] === 'string';\n\n\t\t// Valid only if BOTH variants are present\n\t\treturn hasLight && hasDark;\n\t}\n\n\tprivate collectAssetUrls(assets: ThemeAssets, urls: Set<string>): void {\n\t\tfor (const asset of assets) {\n\t\t\tif (!this.isThemeAsset(asset)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (asset.light) urls.add(asset.light);\n\t\t\tif (asset.dark) urls.add(asset.dark);\n\t\t}\n\t}\n\n\tprivate findAsset(assets: ThemeAssets, assetKey: string): ThemeAsset | null {\n\t\treturn assets.find((asset) => asset.name === assetKey) ?? null;\n\t}\n\n\tprivate cacheAsset(themeName: string, assetKey: string, config: RuntimeThemeConfig | null): void {\n\t\tif (!config) {\n\t\t\treturn;\n\t\t}\n\t\tconst light = this.resolveAssetUrl(themeName, assetKey, 'light', config);\n\t\tconst dark = this.resolveAssetUrl(themeName, assetKey, 'dark', config);\n\t\tif (!light && !dark) {\n\t\t\treturn;\n\t\t}\n\t\tconst cacheKey = `${themeName}:${assetKey}`;\n\t\tif (!this.assetCacheByTheme.has(themeName)) {\n\t\t\tthis.assetCacheByTheme.set(themeName, new Map());\n\t\t}\n\t\tthis.assetCacheByTheme.get(themeName)?.set(cacheKey, {\n\t\t\tthemeName,\n\t\t\tassetKey,\n\t\t\tlight: light ?? null,\n\t\t\tdark: dark ?? null,\n\t\t});\n\t}\n}\n","/**\n * DOM and CSS Injection Service\n * Handles all DOM manipulation and CSS variable injection\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { THEME_ATTRIBUTE_NAME, THEME_SCHEME_SEPARATOR } from '../constants';\nimport { FontDefinition, FontFaceDefinition, ThemeVariablesByCategory, ThemeVariants } from '../models/theme';\n\n/**\n * Service responsible for all DOM manipulation and CSS injection\n * Decouples DOM operations from business logic\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeDomService {\n\tprivate readonly renderer: Renderer2;\n\n\tconstructor(\n\t\tprivate readonly rendererFactory: RendererFactory2,\n\t\t@Inject(DOCUMENT) private readonly document: Document,\n\t) {\n\t\tthis.renderer = this.rendererFactory.createRenderer(null, null);\n\t}\n\n\t/**\n\t * Injects font-face declarations into the document head\n\t * Creates a single style tag containing all font face definitions\n\t * @param fonts - Array of font definitions with faces\n\t */\n\tinjectFonts(fonts: FontDefinition[]): void {\n\t\tconst styleContent = this.buildFontFaceStyles(fonts);\n\n\t\tif (styleContent) {\n\t\t\tthis.appendStyleToHead(styleContent);\n\t\t}\n\t}\n\n\t/**\n\t * Injects global CSS variables as root-level custom properties\n\t * Sets variables directly on the document element\n\t * @param variables - Record of CSS variable names to values\n\t */\n\tinjectGlobalVariables(variables: Record<string, string>): void {\n\t\tconst root = this.document.documentElement || this.document.body;\n\n\t\tObject.entries(variables).forEach(([key, value]) => {\n\t\t\tthis.renderer.setStyle(root, key, value);\n\t\t});\n\t}\n\n\t/**\n\t * Injects theme-specific CSS variables as data-theme selectors\n\t * Creates styles for each theme variant (light/dark)\n\t * @param themes - Theme definitions with variants\n\t */\n\tinjectThemeStyles(themes: Record<string, ThemeVariants>): void {\n\t\tconst styleContent = this.buildThemeStyles(themes);\n\n\t\tif (styleContent) {\n\t\t\tthis.appendStyleToHead(styleContent);\n\t\t}\n\t}\n\n\t/**\n\t * Injects CSS variables for a single theme only\n\t * @param themeName - Theme key\n\t * @param variants - Theme variants to inject\n\t */\n\tinjectSingleThemeStyles(themeName: string, variants: ThemeVariants): void {\n\t\tconst styleBlocks = this.buildThemeVariantStyles(themeName, variants);\n\t\tconst styleContent = styleBlocks.filter((content) => content.length > 0).join('\\n\\n');\n\t\tif (styleContent) {\n\t\t\tthis.replaceThemeStyle(themeName, styleContent);\n\t\t}\n\t}\n\n\t/**\n\t * Sets the active theme on the document body\n\t * Uses data-theme attribute for CSS theme targeting\n\t * @param themeIdentifier - Theme identifier (e.g., \"sixbell_telco__light\")\n\t */\n\tsetActiveTheme(themeIdentifier: string): void {\n\t\tthis.renderer.setAttribute(this.document.body, THEME_ATTRIBUTE_NAME, themeIdentifier);\n\t}\n\n\t/**\n\t * Builds @font-face CSS rules from font definitions\n\t * Private helper to construct font-face declarations\n\t * @param fonts - Array of font definitions\n\t * @returns CSS content string with @font-face rules\n\t */\n\tprivate buildFontFaceStyles(fonts: FontDefinition[]): string {\n\t\treturn fonts\n\t\t\t.map((font) => this.buildFontFaceForFamily(font))\n\t\t\t.filter((content) => content.length > 0)\n\t\t\t.join('\\n');\n\t}\n\n\t/**\n\t * Builds @font-face rules for a single font family\n\t * @param font - Font definition with faces\n\t * @returns CSS content string with all faces for this family\n\t */\n\tprivate buildFontFaceForFamily(font: FontDefinition): string {\n\t\treturn font.faces.map((face) => this.buildFontFaceRule(font.family, face)).join('\\n');\n\t}\n\n\t/**\n\t * Builds a single @font-face rule\n\t * @param fontFamily - Font family name\n\t * @param face - Font face definition\n\t * @returns @font-face CSS rule\n\t */\n\tprivate buildFontFaceRule(fontFamily: string, face: FontFaceDefinition): string {\n\t\treturn `@font-face {\n\tfont-family: '${fontFamily}';\n\tfont-weight: ${face.weight};\n\tfont-style: ${face.style};\n\tsrc: url('${face.src}');\n}`;\n\t}\n\n\t/**\n\t * Builds theme style definitions as CSS custom properties\n\t * Creates selectors for each theme variant\n\t * @param themes - Theme definitions mapped by theme code\n\t * @returns CSS content string with theme definitions\n\t */\n\tprivate buildThemeStyles(themes: Record<string, ThemeVariants>): string {\n\t\tconst styleBlocks = Object.entries(themes)\n\t\t\t.flatMap(([themeName, variants]) => this.buildThemeVariantStyles(themeName, variants))\n\t\t\t.filter((content) => content.length > 0);\n\n\t\treturn styleBlocks.join('\\n\\n');\n\t}\n\n\t/**\n\t * Builds CSS rules for light and dark variants of a theme\n\t * @param themeName - Name of the theme\n\t * @param variants - Light and dark variants\n\t * @returns Array of CSS rules for each variant\n\t */\n\tprivate buildThemeVariantStyles(themeName: string, variants: ThemeVariants): string[] {\n\t\tconst styles: string[] = [];\n\n\t\tif (variants.light) {\n\t\t\tstyles.push(this.buildThemeVariantRule(themeName, 'light', variants.light.variables));\n\t\t}\n\n\t\tif (variants.dark) {\n\t\t\tstyles.push(this.buildThemeVariantRule(themeName, 'dark', variants.dark.variables));\n\t\t}\n\n\t\treturn styles;\n\t}\n\n\t/**\n\t * Builds a single theme variant CSS rule\n\t * @param themeName - Name of the theme\n\t * @param scheme - Scheme variant ('light' or 'dark')\n\t * @param variables - CSS variables for this variant\n\t * @returns CSS rule string\n\t */\n\tprivate buildThemeVariantRule(themeName: string, scheme: string, variables: ThemeVariablesByCategory): string {\n\t\tconst selector = `[${THEME_ATTRIBUTE_NAME}=\"${themeName}${THEME_SCHEME_SEPARATOR}${scheme}\"]`;\n\t\tconst flattened = this.flattenVariables(variables);\n\t\tconst declarations = Object.entries(flattened)\n\t\t\t.map(([key, value]) => `\\t${key}: ${value};`)\n\t\t\t.join('\\n');\n\n\t\treturn `${selector} {\n${declarations}\n}`;\n\t}\n\n\t/**\n\t * Appends a style tag to the document head\n\t * Helper to inject CSS into the document\n\t * @param content - CSS content to inject\n\t */\n\tprivate appendStyleToHead(content: string): void {\n\t\tconst style = this.renderer.createElement('style');\n\t\tstyle.textContent = content;\n\t\tthis.renderer.appendChild(this.document.head, style);\n\t}\n\n\tprivate flattenVariables(variables: ThemeVariablesByCategory): Record<string, string> {\n\t\treturn {\n\t\t\t...variables.colors,\n\t\t\t...variables.radius,\n\t\t\t...variables.sizes,\n\t\t\t...variables.effects,\n\t\t\t...variables.others,\n\t\t};\n\t}\n\n\tprivate replaceThemeStyle(themeName: string, content: string): void {\n\t\tconst existing = this.document.head.querySelector(`style[data-theme-style=\"${themeName}\"]`);\n\t\tif (existing) {\n\t\t\texisting.textContent = content;\n\t\t\treturn;\n\t\t}\n\t\tconst style = this.renderer.createElement('style');\n\t\tstyle.textContent = content;\n\t\tstyle.setAttribute('data-theme-style', themeName);\n\t\tthis.renderer.appendChild(this.document.head, style);\n\t}\n}\n","/**\n * Theme Scheme Resolver Service\n * Handles scheme detection and resolution (system -> light/dark)\n */\n\nimport { Injectable } from '@angular/core';\nimport { DARK_MODE_MEDIA_QUERY } from '../constants';\nimport { ResolvedThemeScheme, ThemeScheme } from '../models/theme';\nimport { supportsMediaQuery } from '../utils/utils';\n\n/**\n * Service for resolving and detecting color schemes\n * Handles system preference detection and scheme validation\n * Separates scheme logic from the main service\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeSchemeService {\n\t/**\n\t * Media query list for detecting dark mode preference\n\t * Cached to avoid repeated queries\n\t */\n\tprivate darkModeMediaQuery: MediaQueryList | null = null;\n\n\t/**\n\t * Resolves a theme scheme to its actual light/dark value\n\t * If scheme is 'system', detects the OS preference\n\t * If scheme is already 'light' or 'dark', returns it as-is\n\t * @param scheme - The scheme to resolve\n\t * @returns Resolved scheme ('light' or 'dark')\n\t */\n\tresolveScheme(scheme: ThemeScheme): ResolvedThemeScheme {\n\t\tif (scheme === 'system') {\n\t\t\treturn this.detectSystemScheme();\n\t\t}\n\n\t\treturn scheme as ResolvedThemeScheme;\n\t}\n\n\t/**\n\t * Detects the system's preferred color scheme\n\t * Uses CSS media query (prefers-color-scheme: dark)\n\t * Safely handles environments where matchMedia is not available\n\t * @returns 'dark' if system prefers dark, 'light' otherwise\n\t */\n\tdetectSystemScheme(): ResolvedThemeScheme {\n\t\tif (!supportsMediaQuery()) {\n\t\t\t// Fallback to light in non-browser environments\n\t\t\treturn 'light';\n\t\t}\n\n\t\t// Use cached media query list if available\n\t\tif (!this.darkModeMediaQuery) {\n\t\t\tthis.darkModeMediaQuery = this.createMediaQuery();\n\t\t}\n\n\t\treturn this.darkModeMediaQuery.matches ? 'dark' : 'light';\n\t}\n\n\t/**\n\t * Listens for changes in system color scheme preference\n\t * Allows components to react to OS theme changes\n\t * @param listener - Callback function when scheme changes\n\t * @returns Unsubscribe function to remove listener\n\t */\n\tlistenToSystemSchemeChanges(listener: (scheme: ResolvedThemeScheme) => void): () => void {\n\t\tif (!supportsMediaQuery()) {\n\t\t\t// Return no-op unsubscribe function if matchMedia not available\n\t\t\treturn () => {};\n\t\t}\n\n\t\tconst mediaQuery = this.createMediaQuery();\n\n\t\tconst handleChange = (e: MediaQueryListEvent) => {\n\t\t\tlistener(e.matches ? 'dark' : 'light');\n\t\t};\n\n\t\t// Use addEventListener for modern browsers\n\t\tif (mediaQuery.addEventListener) {\n\t\t\tmediaQuery.addEventListener('change', handleChange);\n\n\t\t\treturn () => mediaQuery.removeEventListener('change', handleChange);\n\t\t}\n\n\t\t// Fallback for older browsers using addListener (deprecated but supported)\n\t\tconst legacyMediaQuery = mediaQuery as MediaQueryList & {\n\t\t\taddListener?: (listener: (e: MediaQueryListEvent) => void) => void;\n\t\t\tremoveListener?: (listener: (e: MediaQueryListEvent) => void) => void;\n\t\t};\n\t\tlegacyMediaQuery.addListener?.(handleChange);\n\n\t\treturn () => legacyMediaQuery.removeListener?.(handleChange);\n\t}\n\n\t/**\n\t * Creates a media query for detecting dark mode\n\t * Extracted method to make testing easier\n\t * @returns MediaQueryList for dark mode preference\n\t */\n\tprivate createMediaQuery(): MediaQueryList {\n\t\treturn window.matchMedia(DARK_MODE_MEDIA_QUERY);\n\t}\n}\n","import { computed, inject, Injectable, signal } from '@angular/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { RuntimeConfigLoader, RuntimeConfigLoadResult, RuntimeUpdateEvent } from '@sixbell-telco/sdk/utils/runtime-config';\nimport { TranslationService } from '@sixbell-telco/sdk/utils/translation';\nimport { DEFAULT_BASE_THEME, DEFAULT_SCHEME, VALID_SCHEMES } from './constants';\nimport {\n\tFontDefinition,\n\tResolvedThemeScheme,\n\tRuntimeThemeConfig,\n\tRuntimeThemeConfigFile,\n\tThemeScheme,\n\tThemeStateConfig,\n\tThemeStyleDefinition,\n\tThemeVariablesByCategory,\n} from './models/theme';\nimport { ThemeAssetsService } from './theme-assets/theme-assets.service';\nimport { ThemeDomService } from './theme-dom/theme-dom.service';\nimport { ThemeSchemeService } from './theme-scheme/theme-scheme.service';\nimport { ThemeStorageService } from './theme-storage/theme-storage.service';\nimport { buildThemeIdentifier, formatSchemeName, formatThemeName, isThemeAvailable, isValidScheme, validateThemeConfig } from './utils/utils';\n\nexport { DEFAULT_BASE_THEME, FALLBACK_RUNTIME_THEME_CONFIG } from './constants';\nexport type {\n\tFontDefinition,\n\tResolvedThemeScheme,\n\tRuntimeThemeConfig,\n\tRuntimeThemeConfigFile,\n\tThemeScheme,\n\tThemeStyleDefinition,\n\tThemeVariablesByCategory,\n};\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n\tprivate readonly translationService = inject(TranslationService);\n\tprivate readonly domService = inject(ThemeDomService);\n\tprivate readonly storageService = inject(ThemeStorageService);\n\tprivate readonly schemeResolver = inject(ThemeSchemeService);\n\tprivate readonly assetsService = inject(ThemeAssetsService);\n\tprivate readonly logger = inject(LoggerService);\n\n\tprivate isUsingFallbackConfig = false;\n\tprivate runtimeHash: string | null = null;\n\tprivate runtimeLoader?: RuntimeConfigLoader<RuntimeThemeConfigFile>;\n\tprivate runtimeThemes = new Map<string, RuntimeThemeConfig['themes']>();\n\tprivate runtimeEventHashes = new Map<string, string>();\n\tprivate pendingUpdatedThemes = new Set<string>();\n\tprivate appliedThemeNames = new Set<string>();\n\tprivate refreshHandler?: (themes: string[]) => Promise<void>;\n\tpublic readonly updateAvailable = signal(false);\n\tpublic readonly lastRefreshFailed = signal(false);\n\n\tprivate config: ThemeStateConfig = {\n\t\tavailableThemes: [DEFAULT_BASE_THEME],\n\t\tdefaultTheme: DEFAULT_BASE_THEME,\n\t\tdefaultScheme: DEFAULT_SCHEME,\n\t};\n\n\tpublic readonly selectedTheme = signal<string>(this.config.defaultTheme);\n\tpublic readonly selectedScheme = signal<ThemeScheme>(this.config.defaultScheme);\n\n\tpublic readonly resolvedScheme = computed(() => {\n\t\tconst scheme = this.selectedScheme();\n\t\treturn this.schemeResolver.resolveScheme(scheme);\n\t});\n\n\tpublic readonly isDarkTheme = computed(() => this.resolvedScheme() === 'dark');\n\n\tpublic readonly finalTheme = computed(() => {\n\t\tconst theme = this.selectedTheme();\n\t\tconst scheme = this.resolvedScheme();\n\t\treturn buildThemeIdentifier(theme, scheme);\n\t});\n\n\tconstructor() {}\n\n\tpublic async configureRuntime(config: RuntimeThemeConfig, themeName: string, options?: { blocking?: boolean }): Promise<void> {\n\t\tif (!config.themes) {\n\t\t\tthis.logger.error('Invalid runtime config - no themes defined', undefined, {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'configureRuntime',\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (config.fonts && config.fonts.length > 0) {\n\t\t\tthis.domService.injectFonts(config.fonts);\n\t\t\tif (options?.blocking) {\n\t\t\t\tawait this.waitForFonts();\n\t\t\t}\n\t\t}\n\n\t\tthis.assetsService.setThemeConfig(themeName, config);\n\t\tconst themeVariants = config.themes;\n\t\tthis.runtimeThemes.set(themeName, themeVariants);\n\t\tthis.domService.injectSingleThemeStyles(themeName, themeVariants);\n\t\tthis.appliedThemeNames.add(themeName);\n\n\t\tif (options?.blocking) {\n\t\t\tawait this.assetsService.prefetchAssets(themeName);\n\t\t} else {\n\t\t\tvoid this.assetsService.prefetchAssets(themeName);\n\t\t}\n\t}\n\n\tpublic applyRuntimeConfig(config: ThemeStateConfig, source: RuntimeConfigLoadResult<RuntimeThemeConfigFile>['source']): void {\n\t\tthis.isUsingFallbackConfig = source === 'fallback';\n\t\tthis.config = config;\n\t\tvalidateThemeConfig(this.config, 'ThemeService.applyRuntimeConfig');\n\t\tthis.selectedTheme.set(this.config.defaultTheme);\n\t\tthis.selectedScheme.set(this.config.defaultScheme);\n\t\tthis.initializeFromStorage();\n\t\tthis.applyTheme();\n\t}\n\n\tpublic setTheme(theme: string): void {\n\t\tif (isThemeAvailable(theme, this.config.availableThemes)) {\n\t\t\tthis.selectedTheme.set(theme);\n\t\t\tthis.applyTheme();\n\t\t} else {\n\t\t\tthis.logger.warn(`Theme '${theme}' not available. Using default '${this.config.defaultTheme}'`, {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'setTheme',\n\t\t\t\trequestedTheme: theme,\n\t\t\t\tdefaultTheme: this.config.defaultTheme,\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic setScheme(scheme: ThemeScheme): void {\n\t\tif (isValidScheme(scheme) && (VALID_SCHEMES as readonly ThemeScheme[]).includes(scheme)) {\n\t\t\tthis.selectedScheme.set(scheme);\n\t\t\tthis.applyTheme();\n\t\t} else {\n\t\t\tthis.logger.warn(`Scheme '${scheme}' is invalid. Using default '${this.config.defaultScheme}'`, {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'setScheme',\n\t\t\t\trequestedScheme: scheme,\n\t\t\t\tdefaultScheme: this.config.defaultScheme,\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic getAvailableThemes(): string[] {\n\t\treturn this.config.availableThemes;\n\t}\n\n\tpublic getAvailableSchemes(): ThemeScheme[] {\n\t\treturn ['system', 'light', 'dark'];\n\t}\n\n\tpublic getDefaultTheme(): string {\n\t\treturn this.config.defaultTheme;\n\t}\n\n\tpublic getDefaultScheme(): ThemeScheme {\n\t\treturn this.config.defaultScheme;\n\t}\n\n\tpublic getLocalizedSchemeName(scheme: string): string {\n\t\tconst translationKey = `sdk.theme.schemes.${scheme}`;\n\t\tconst translatedName = this.translationService.instant(translationKey);\n\n\t\tif (translatedName && translatedName !== translationKey) {\n\t\t\treturn translatedName;\n\t\t}\n\n\t\treturn formatSchemeName(scheme);\n\t}\n\n\tpublic getLocalizedThemeName(theme: string): string {\n\t\tconst translationKey = `sdk.theme.themes.${theme}`;\n\t\tconst translatedName = this.translationService.instant(translationKey);\n\n\t\tif (translatedName && translatedName !== translationKey) {\n\t\t\treturn translatedName;\n\t\t}\n\n\t\treturn formatThemeName(theme);\n\t}\n\n\tprivate initializeFromStorage(): void {\n\t\tconst savedTheme = this.storageService.getSavedTheme();\n\t\tlet skipSchemeRestore = false;\n\t\tthis.logger.debug('initializeFromStorage - savedTheme', {\n\t\t\tcomponent: 'ThemeService',\n\t\t\taction: 'initializeFromStorage',\n\t\t\tsavedTheme,\n\t\t\tavailableThemes: this.config.availableThemes,\n\t\t});\n\n\t\tif (savedTheme) {\n\t\t\tif (isThemeAvailable(savedTheme, this.config.availableThemes)) {\n\t\t\t\t// Saved theme is available in current config\n\t\t\t\tthis.logger.debug('Restoring saved theme', {\n\t\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\t\taction: 'initializeFromStorage',\n\t\t\t\t\tsavedTheme,\n\t\t\t\t});\n\t\t\t\tthis.selectedTheme.set(savedTheme);\n\t\t\t} else if (this.isUsingFallbackConfig) {\n\t\t\t\t// Using fallback config (JSON failed): restore saved theme anyway\n\t\t\t\t// This preserves user preference when using cached data\n\t\t\t\tthis.logger.debug('Using fallback config - restoring saved theme anyway', {\n\t\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\t\taction: 'initializeFromStorage',\n\t\t\t\t\tsavedTheme,\n\t\t\t\t});\n\t\t\t\tthis.selectedTheme.set(savedTheme);\n\t\t\t\t// Add saved theme to available list if missing\n\t\t\t\tif (!this.config.availableThemes.includes(savedTheme)) {\n\t\t\t\t\tthis.config.availableThemes.push(savedTheme);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Using valid config but theme is missing: reset to defaultTheme\n\t\t\t\t// This handles the case where theme was removed/renamed in config\n\t\t\t\tthis.logger.debug('Valid config but saved theme missing - using defaultTheme', {\n\t\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\t\taction: 'initializeFromStorage',\n\t\t\t\t\tsavedTheme,\n\t\t\t\t\tdefaultTheme: this.config.defaultTheme,\n\t\t\t\t});\n\t\t\t\tthis.storageService.clear();\n\t\t\t\tskipSchemeRestore = true;\n\t\t\t\tthis.selectedTheme.set(this.config.defaultTheme);\n\t\t\t\tthis.selectedScheme.set(DEFAULT_SCHEME);\n\t\t\t}\n\t\t}\n\n\t\tconst savedScheme = this.storageService.getSavedScheme();\n\t\tthis.logger.debug('initializeFromStorage - savedScheme', {\n\t\t\tcomponent: 'ThemeService',\n\t\t\taction: 'initializeFromStorage',\n\t\t\tsavedScheme,\n\t\t});\n\n\t\tif (savedScheme && isValidScheme(savedScheme) && !skipSchemeRestore) {\n\t\t\tthis.logger.debug('Restoring saved scheme', {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'initializeFromStorage',\n\t\t\t\tsavedScheme,\n\t\t\t});\n\t\t\tthis.selectedScheme.set(savedScheme);\n\t\t} else if (savedScheme && !this.isUsingFallbackConfig) {\n\t\t\tthis.storageService.clear();\n\t\t}\n\t}\n\tprivate applyTheme(): void {\n\t\tconst themeIdentifier = this.finalTheme();\n\t\tthis.domService.setActiveTheme(themeIdentifier);\n\n\t\tthis.storageService.saveTheme(this.selectedTheme());\n\t\tthis.storageService.saveScheme(this.selectedScheme());\n\n\t\tconst selectedTheme = this.selectedTheme();\n\t\tif (!this.appliedThemeNames.has(selectedTheme)) {\n\t\t\tconst variants = this.runtimeThemes.get(selectedTheme);\n\t\t\tif (variants) {\n\t\t\t\tthis.domService.injectSingleThemeStyles(selectedTheme, variants);\n\t\t\t\tthis.appliedThemeNames.add(selectedTheme);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Internal method to set runtime loader and enable navigation-based reloading.\n\t * Called by provideRuntimeTheme.\n\t * @internal\n\t */\n\tpublic setRuntimeLoader(loader: RuntimeConfigLoader<RuntimeThemeConfigFile>, hash?: string): void {\n\t\tthis.runtimeLoader = loader;\n\t\tthis.runtimeHash = hash ?? null;\n\t\tthis.updateAvailable.set(false);\n\t\tthis.lastRefreshFailed.set(false);\n\t}\n\n\tpublic async checkForThemeUpdates(loader: RuntimeConfigLoader<RuntimeThemeConfigFile>, event?: RuntimeUpdateEvent): Promise<void> {\n\t\tthis.runtimeLoader = loader;\n\t\tif (event?.resource && event.resource !== 'theme' && event.resource !== 'both') {\n\t\t\treturn;\n\t\t}\n\t\tconst eventHash = event?.hash;\n\t\tconst eventUrl = event?.url?.toString?.() ?? (event?.url as string | undefined);\n\t\tconst eventTheme = event?.resource === 'theme' || event?.resource === 'both' ? event.theme : undefined;\n\t\tif (eventHash) {\n\t\t\tif (eventUrl) {\n\t\t\t\tconst knownEventHash = this.runtimeEventHashes.get(eventUrl);\n\t\t\t\tif (knownEventHash && knownEventHash === eventHash) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (eventHash === this.runtimeHash) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!this.updateAvailable()) {\n\t\t\t\tthis.updateAvailable.set(true);\n\t\t\t}\n\t\t\tif (eventUrl) {\n\t\t\t\tthis.runtimeEventHashes.set(eventUrl, eventHash);\n\t\t\t}\n\t\t\tif (eventTheme) {\n\t\t\t\tthis.pendingUpdatedThemes.add(eventTheme);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst currentHash = this.runtimeHash;\n\t\tif (currentHash) {\n\t\t\tconst check = await loader.checkForUpdates(currentHash);\n\t\t\tif (!check.updated || this.updateAvailable()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.updateAvailable.set(true);\n\t\t\treturn;\n\t\t}\n\t\tif (!this.updateAvailable()) {\n\t\t\tthis.updateAvailable.set(true);\n\t\t}\n\t}\n\n\tpublic async refreshTheme(loader?: RuntimeConfigLoader<RuntimeThemeConfigFile>): Promise<void> {\n\t\tconst runtimeLoader = loader ?? this.runtimeLoader;\n\t\tif (!runtimeLoader) {\n\t\t\tthis.logger.warn('Theme refresh requested without runtime loader', {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'refreshTheme',\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!this.refreshHandler) {\n\t\t\tthis.logger.warn('Theme refresh requested without handler', {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'refreshTheme',\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tconst updatedThemes = Array.from(this.pendingUpdatedThemes);\n\t\t\tthis.pendingUpdatedThemes.clear();\n\t\t\tawait this.refreshHandler(updatedThemes);\n\t\t\tthis.updateAvailable.set(false);\n\t\t\tthis.lastRefreshFailed.set(false);\n\t\t} catch (error) {\n\t\t\tthis.lastRefreshFailed.set(true);\n\t\t\tthis.logger.error('Theme refresh failed', error as Error, {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'refreshTheme',\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic init(): void {\n\t\tthis.getAvailableThemes();\n\t}\n\n\tpublic setRefreshHandler(handler: (themes: string[]) => Promise<void>): void {\n\t\tthis.refreshHandler = handler;\n\t}\n\n\tprivate async waitForFonts(): Promise<void> {\n\t\tif (typeof document === 'undefined' || !document.fonts?.ready) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait document.fonts.ready;\n\t\t} catch (error) {\n\t\t\tthis.logger.warn('Font readiness check failed', {\n\t\t\t\tcomponent: 'ThemeService',\n\t\t\t\taction: 'waitForFonts',\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\t}\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';\nimport { LoggerService } from '@sixbell-telco/sdk/utils/logger';\nimport { RuntimeConfigLoadResult, RuntimeConfigLoader, RuntimeConfigStore, RuntimeUpdateAdapter } from '@sixbell-telco/sdk/utils/runtime-config';\nimport { DEFAULT_BASE_THEME, DEFAULT_SCHEME, FALLBACK_RUNTIME_THEME_CONFIG, THEME_SCHEMA_VERSION } from '../constants';\nimport { RuntimeThemeConfig, RuntimeThemeConfigFile } from '../models/theme';\nimport { ThemeStorageService } from '../theme-storage/theme-storage.service';\nimport { ThemeService } from '../theme.service';\nimport { resolveDefaultTheme } from '../utils/utils';\nimport { RuntimeThemeProviderOptions } from './theme.provider.types';\n\nexport function provideRuntimeTheme(configPath: string, options?: RuntimeThemeProviderOptions): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\tprovideAppInitializer(() => {\n\t\t\tconst themeService = inject(ThemeService);\n\t\t\tconst storageService = inject(ThemeStorageService);\n\t\t\tconst logger = inject(LoggerService);\n\t\t\tconst configStore = new RuntimeConfigStore<RuntimeThemeConfigFile>('theme-runtime-config', options?.appId);\n\t\t\tconst themeStore = new RuntimeConfigStore<RuntimeThemeConfig>('theme-runtime-config', options?.appId);\n\t\t\tconst configLoader = new RuntimeConfigLoader<RuntimeThemeConfigFile>(configPath, {\n\t\t\t\tfallbackData: {\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tname: DEFAULT_BASE_THEME,\n\t\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t\t\thash: 'fallback-hash',\n\t\t\t\t\t\tschemaVersion: THEME_SCHEMA_VERSION,\n\t\t\t\t\t},\n\t\t\t\t\tthemes: [configPath],\n\t\t\t\t\tdefaultTheme: DEFAULT_BASE_THEME,\n\t\t\t\t\tdefaultScheme: DEFAULT_SCHEME,\n\t\t\t\t},\n\t\t\t\tschemaVersion: THEME_SCHEMA_VERSION,\n\t\t\t\tresource: 'theme',\n\t\t\t\tstore: configStore,\n\t\t\t\tlogger,\n\t\t\t\tparser: async (response: Response) => (await response.json()) as RuntimeThemeConfigFile,\n\t\t\t\tappId: options?.appId,\n\t\t\t});\n\t\t\tconst updateAdapter = new RuntimeUpdateAdapter(async (event) => {\n\t\t\t\tif (event.resource && event.resource !== 'theme' && event.resource !== 'both') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tawait themeService.checkForThemeUpdates(configLoader, event);\n\t\t\t});\n\n\t\t\tif (options?.sse) {\n\t\t\t\tupdateAdapter.connectSse(options.sse.url, {\n\t\t\t\t\tresource: 'theme',\n\t\t\t\t\twithCredentials: options.sse.withCredentials,\n\t\t\t\t\teventType: options.sse.eventType,\n\t\t\t\t\ttransform: options.sse.transform,\n\t\t\t\t\tlogger,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (options?.updateStream) {\n\t\t\t\tupdateAdapter.connectStream(options.updateStream);\n\t\t\t}\n\n\t\t\tconst loadThemeConfig = async (\n\t\t\t\tthemePath: string,\n\t\t\t\tloadOptions?: {\n\t\t\t\t\tforceRefresh?: boolean;\n\t\t\t\t},\n\t\t\t): Promise<RuntimeThemeConfig> => {\n\t\t\t\tconst themeLoader = new RuntimeConfigLoader<RuntimeThemeConfig>(themePath, {\n\t\t\t\t\tfallbackData: FALLBACK_RUNTIME_THEME_CONFIG,\n\t\t\t\t\tschemaVersion: THEME_SCHEMA_VERSION,\n\t\t\t\t\tresource: 'theme',\n\t\t\t\t\tstore: themeStore,\n\t\t\t\t\tlogger,\n\t\t\t\t\tparser: async (response: Response) => (await response.json()) as RuntimeThemeConfig,\n\t\t\t\t\tappId: options?.appId,\n\t\t\t\t});\n\t\t\t\tlet result = loadOptions?.forceRefresh ? await themeLoader.refresh() : await themeLoader.loadLatest();\n\t\t\t\tif (!loadOptions?.forceRefresh && result.source === 'cache') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst check = await themeLoader.checkForUpdates(result.hash);\n\t\t\t\t\t\tif (check.updated) {\n\t\t\t\t\t\t\tresult = await themeLoader.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.warn('Theme entry bootstrap validation failed', {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'validateEntry',\n\t\t\t\t\t\t\ttheme: themePath,\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!result.meta.schemaVersion) {\n\t\t\t\t\tthrow new Error(`Theme schemaVersion missing for ${themePath}`);\n\t\t\t\t}\n\t\t\t\tif (result.meta.schemaVersion !== THEME_SCHEMA_VERSION) {\n\t\t\t\t\tthrow new Error(`Theme schemaVersion mismatch for ${themePath}`);\n\t\t\t\t}\n\t\t\t\tif (!result.data.meta?.name) {\n\t\t\t\t\tthrow new Error(`Theme meta.name missing for ${themePath}`);\n\t\t\t\t}\n\t\t\t\tif (!result.data.meta?.hash) {\n\t\t\t\t\tthrow new Error(`Theme meta.hash missing for ${themePath}`);\n\t\t\t\t}\n\t\t\t\tif (!result.data.meta?.updatedAt) {\n\t\t\t\t\tthrow new Error(`Theme meta.updatedAt missing for ${themePath}`);\n\t\t\t\t}\n\t\t\t\treturn result.data;\n\t\t\t};\n\n\t\t\tconst applyThemeConfig = async (config: RuntimeThemeConfig, blocking: boolean): Promise<void> => {\n\t\t\t\tconst themeName = config.meta?.name;\n\t\t\t\tif (!themeName) {\n\t\t\t\t\tthrow new Error('Theme meta.name missing for config apply');\n\t\t\t\t}\n\t\t\t\tconst normalizedConfig: RuntimeThemeConfig = {\n\t\t\t\t\t...config,\n\t\t\t\t\tthemes: {\n\t\t\t\t\t\tlight: {\n\t\t\t\t\t\t\t...config.themes.light,\n\t\t\t\t\t\t\tprefersDark: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdark: {\n\t\t\t\t\t\t\t...config.themes.dark,\n\t\t\t\t\t\t\tprefersDark: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tawait themeService.configureRuntime(normalizedConfig, themeName, { blocking });\n\t\t\t};\n\n\t\t\treturn (async () => {\n\t\t\t\tthemeService.init();\n\t\t\t\tlet configResult: RuntimeConfigLoadResult<RuntimeThemeConfigFile>;\n\t\t\t\ttry {\n\t\t\t\t\tconfigResult = await configLoader.loadLatest();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error('Theme config load failed', error as Error, {\n\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\taction: 'loadLatest',\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (configResult.source === 'cache') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst check = await configLoader.checkForUpdates(configResult.hash);\n\t\t\t\t\t\tif (check.updated) {\n\t\t\t\t\t\t\tconfigResult = await configLoader.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.warn('Theme config bootstrap validation failed', {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'bootstrapValidation',\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst themeConfig = configResult.data;\n\t\t\t\tif (!themeConfig.meta.schemaVersion) {\n\t\t\t\t\tlogger.error('Theme config schemaVersion missing', undefined, {\n\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (themeConfig.meta.schemaVersion !== THEME_SCHEMA_VERSION) {\n\t\t\t\t\tlogger.error('Theme config schemaVersion mismatch', undefined, {\n\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t\texpected: THEME_SCHEMA_VERSION,\n\t\t\t\t\t\tactual: themeConfig.meta.schemaVersion,\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!themeConfig.meta.hash) {\n\t\t\t\t\tlogger.error('Theme config hash missing', undefined, {\n\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!themeConfig.meta.updatedAt) {\n\t\t\t\t\tlogger.error('Theme config updatedAt missing', undefined, {\n\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst themePaths = themeConfig.themes ?? [];\n\t\t\t\tconst themeEntries = new Map<string, string>();\n\t\t\t\tconst availableThemes: string[] = [];\n\t\t\t\tfor (const themePath of themePaths) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst loadedConfig = await loadThemeConfig(themePath);\n\t\t\t\t\t\tconst themeName = loadedConfig.meta?.name;\n\t\t\t\t\t\tif (!themeName) {\n\t\t\t\t\t\t\tlogger.warn('Theme meta.name missing', {\n\t\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\t\taction: 'resolveThemeName',\n\t\t\t\t\t\t\t\tpath: themePath,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (themeConfig.excludeThemes?.includes(themeName)) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthemeEntries.set(themeName, themePath);\n\t\t\t\t\t\tavailableThemes.push(themeName);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.warn('Failed to load theme entry', {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'loadThemeEntry',\n\t\t\t\t\t\t\tpath: themePath,\n\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst defaultTheme = resolveDefaultTheme(themeConfig.defaultTheme, availableThemes);\n\t\t\t\tconst config = {\n\t\t\t\t\tavailableThemes,\n\t\t\t\t\tdefaultTheme,\n\t\t\t\t\tdefaultScheme: themeConfig.defaultScheme ?? DEFAULT_SCHEME,\n\t\t\t\t};\n\t\t\t\tthemeService.applyRuntimeConfig(config, configResult.source);\n\t\t\t\tthemeService.setRuntimeLoader(configLoader, configResult.hash);\n\t\t\t\tthemeService.setRefreshHandler(async (updatedThemes: string[]) => {\n\t\t\t\t\tlet refreshedConfig: RuntimeConfigLoadResult<RuntimeThemeConfigFile>;\n\t\t\t\t\ttry {\n\t\t\t\t\t\trefreshedConfig = await configLoader.refresh();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tlogger.error('Theme config refresh failed', error as Error, {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'refresh',\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!refreshedConfig.data.meta.schemaVersion) {\n\t\t\t\t\t\tlogger.error('Theme config schemaVersion missing', undefined, {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (refreshedConfig.data.meta.schemaVersion !== THEME_SCHEMA_VERSION) {\n\t\t\t\t\t\tlogger.error('Theme config schemaVersion mismatch', undefined, {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t\t\texpected: THEME_SCHEMA_VERSION,\n\t\t\t\t\t\t\tactual: refreshedConfig.data.meta.schemaVersion,\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!refreshedConfig.data.meta.hash) {\n\t\t\t\t\t\tlogger.error('Theme config hash missing', undefined, {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!refreshedConfig.data.meta.updatedAt) {\n\t\t\t\t\t\tlogger.error('Theme config updatedAt missing', undefined, {\n\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\taction: 'validateSchema',\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst refreshedPaths = refreshedConfig.data.themes ?? [];\n\t\t\t\t\tconst refreshedEntries = new Map<string, string>();\n\t\t\t\t\tconst refreshedAvailableThemes: string[] = [];\n\t\t\t\t\tfor (const themePath of refreshedPaths) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst loadedConfig = await loadThemeConfig(themePath);\n\t\t\t\t\t\t\tconst themeName = loadedConfig.meta?.name;\n\t\t\t\t\t\t\tif (!themeName) {\n\t\t\t\t\t\t\t\tlogger.warn('Theme meta.name missing', {\n\t\t\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\t\t\taction: 'resolveThemeName',\n\t\t\t\t\t\t\t\t\tpath: themePath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (refreshedConfig.data.excludeThemes?.includes(themeName)) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trefreshedEntries.set(themeName, themePath);\n\t\t\t\t\t\t\trefreshedAvailableThemes.push(themeName);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tlogger.warn('Failed to load theme entry', {\n\t\t\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\t\t\taction: 'loadThemeEntry',\n\t\t\t\t\t\t\t\tpath: themePath,\n\t\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst refreshedDefaultTheme = resolveDefaultTheme(refreshedConfig.data.defaultTheme, refreshedAvailableThemes);\n\t\t\t\t\tconst refreshedSelected = themeService.selectedTheme();\n\t\t\t\t\tconst configHashChanged = refreshedConfig.hash !== configResult.hash;\n\t\t\t\t\tconst changedEntries = configHashChanged\n\t\t\t\t\t\t? refreshedEntries\n\t\t\t\t\t\t: new Map([...refreshedEntries].filter(([name]) => updatedThemes.includes(name)));\n\t\t\t\t\tif (configHashChanged) {\n\t\t\t\t\t\tthemeService.applyRuntimeConfig(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tavailableThemes: refreshedAvailableThemes,\n\t\t\t\t\t\t\t\tdefaultTheme: refreshedDefaultTheme,\n\t\t\t\t\t\t\t\tdefaultScheme: refreshedConfig.data.defaultScheme ?? DEFAULT_SCHEME,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\trefreshedConfig.source,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthemeService.setRuntimeLoader(configLoader, refreshedConfig.hash);\n\t\t\t\t\t\tconfigResult = refreshedConfig;\n\t\t\t\t\t\tconst refreshedPath = refreshedEntries.get(refreshedSelected) ?? [...refreshedEntries.values()][0];\n\t\t\t\t\t\tif (refreshedPath) {\n\t\t\t\t\t\t\tconst refreshedThemeConfig = await loadThemeConfig(refreshedPath, { forceRefresh: true });\n\t\t\t\t\t\t\tawait applyThemeConfig(refreshedThemeConfig, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!changedEntries.size) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tfor (const [name, path] of changedEntries) {\n\t\t\t\t\t\tconst refreshedThemeConfig = await loadThemeConfig(path, { forceRefresh: true });\n\t\t\t\t\t\tconst isSelected = name === refreshedSelected;\n\t\t\t\t\t\tawait applyThemeConfig(refreshedThemeConfig, isSelected);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tconst savedTheme = storageService.getSavedTheme();\n\t\t\t\tconst selectedTheme = savedTheme && availableThemes.includes(savedTheme) ? savedTheme : config.defaultTheme;\n\t\t\t\tconst selectedPath = themeEntries.get(selectedTheme) ?? [...themeEntries.values()][0];\n\n\t\t\t\tif (!selectedPath) {\n\t\t\t\t\tlogger.warn('No theme entries available in config', {\n\t\t\t\t\t\tcomponent: 'ThemeProvider',\n\t\t\t\t\t\taction: 'provideRuntimeTheme',\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst selectedConfig = await loadThemeConfig(selectedPath);\n\t\t\t\tawait applyThemeConfig(selectedConfig, true);\n\t\t\t\tconst remainingEntries = [...themeEntries.entries()].filter(([name]) => name !== selectedTheme);\n\t\t\t\tfor (const [, path] of remainingEntries) {\n\t\t\t\t\tloadThemeConfig(path)\n\t\t\t\t\t\t.then((configToApply) => applyThemeConfig(configToApply, false))\n\t\t\t\t\t\t.catch(() => undefined);\n\t\t\t\t}\n\t\t\t})();\n\t\t}),\n\t]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}