UNPKG

@rxap/ngx-theme

Version:

This package provides an Angular theme service that allows you to manage and customize the look and feel of your application. It includes features such as dark mode support, theme density control, typography settings, and color palette management. The ser

1 lines 40.5 kB
{"version":3,"file":"rxap-ngx-theme.mjs","sources":["../../../../../packages/angular/theme/src/lib/compute-color-palette.ts","../../../../../packages/angular/theme/src/lib/observe-current-theme-density.ts","../../../../../packages/angular/theme/src/lib/theme.service.ts","../../../../../packages/angular/theme/src/lib/provide.ts","../../../../../packages/angular/theme/src/index.ts","../../../../../packages/angular/theme/src/rxap-ngx-theme.ts"],"sourcesContent":["import {\n ColorInput,\n Numberify,\n RGBA,\n TinyColor,\n} from '@ctrl/tinycolor';\n\nexport interface ColorPalette {\n 50: string;\n 100: string;\n 200: string;\n 300: string;\n 400: string;\n 500: string;\n 600: string;\n 700: string;\n 800: string;\n 900: string;\n A100: string;\n A200: string;\n A400: string;\n A700: string;\n}\n\nexport enum ColorPaletteAlgorithm {\n CONSTANTIN = 'constantin',\n BUCKNER = 'buckner',\n}\n\nexport function ComputeColorPalette(\n color: ColorInput,\n colorPalette: Partial<ColorPalette> = {},\n algorithm?: ColorPaletteAlgorithm | string,\n): ColorPalette {\n colorPalette = { ...colorPalette };\n\n const baseLight = new TinyColor('#ffffff');\n const baseDark = multiply(new TinyColor(color).toRgb(), new TinyColor(color).toRgb());\n const baseTriad = new TinyColor(color).tetrad();\n\n switch (algorithm) {\n\n case ColorPaletteAlgorithm.CONSTANTIN:\n colorPalette[50] ??= baseLight.mix(color, 12).toHexString();\n colorPalette[100] ??= baseLight.mix(color, 30).toHexString();\n colorPalette[200] ??= baseLight.mix(color, 50).toHexString();\n colorPalette[300] ??= baseLight.mix(color, 70).toHexString();\n colorPalette[400] ??= baseLight.mix(color, 85).toHexString();\n colorPalette[500] ??= baseLight.mix(color, 100).toHexString();\n colorPalette[600] ??= baseDark.mix(color, 87).toHexString();\n colorPalette[700] ??= baseDark.mix(color, 70).toHexString();\n colorPalette[800] ??= baseDark.mix(color, 54).toHexString();\n colorPalette[900] ??= baseDark.mix(color, 25).toHexString();\n colorPalette.A100 ??= baseDark.mix(baseTriad[4], 15).saturate(80).lighten(65).toHexString();\n colorPalette.A200 ??= baseDark.mix(baseTriad[4], 15).saturate(80).lighten(55).toHexString();\n colorPalette.A400 ??= baseDark.mix(baseTriad[4], 15).saturate(100).lighten(45).toHexString();\n colorPalette.A700 ??= baseDark.mix(baseTriad[4], 15).saturate(100).lighten(40).toHexString();\n break;\n\n case ColorPaletteAlgorithm.BUCKNER:\n colorPalette[50] ??= baseLight.mix(color, 12).toHexString();\n colorPalette[100] ??= baseLight.mix(color, 30).toHexString();\n colorPalette[200] ??= baseLight.mix(color, 50).toHexString();\n colorPalette[300] ??= baseLight.mix(color, 70).toHexString();\n colorPalette[400] ??= baseLight.mix(color, 85).toHexString();\n colorPalette[500] ??= baseLight.mix(color, 100).toHexString();\n colorPalette[600] ??= baseDark.mix(color, 87).toHexString();\n colorPalette[700] ??= baseDark.mix(color, 70).toHexString();\n colorPalette[800] ??= baseDark.mix(color, 54).toHexString();\n colorPalette[900] ??= baseDark.mix(color, 25).toHexString();\n colorPalette.A100 ??= baseDark.mix(baseTriad[3], 15).saturate(80).lighten(48).toHexString();\n colorPalette.A200 ??= baseDark.mix(baseTriad[3], 15).saturate(80).lighten(36).toHexString();\n colorPalette.A400 ??= baseDark.mix(baseTriad[3], 15).saturate(100).lighten(31).toHexString();\n colorPalette.A700 ??= baseDark.mix(baseTriad[3], 15).saturate(100).lighten(28).toHexString();\n break;\n\n default:\n colorPalette[50] ??= new TinyColor(color).lighten(52).toHexString();\n colorPalette[100] ??= new TinyColor(color).lighten(37).toHexString();\n colorPalette[200] ??= new TinyColor(color).lighten(26).toHexString();\n colorPalette[300] ??= new TinyColor(color).lighten(12).toHexString();\n colorPalette[400] ??= new TinyColor(color).lighten(6).toHexString();\n colorPalette[500] ??= new TinyColor(color).toHexString();\n colorPalette[600] ??= new TinyColor(color).darken(6).toHexString();\n colorPalette[700] ??= new TinyColor(color).darken(12).toHexString();\n colorPalette[800] ??= new TinyColor(color).darken(18).toHexString();\n colorPalette[900] ??= new TinyColor(color).darken(24).toHexString();\n colorPalette.A100 ??= new TinyColor(color).lighten(50).saturate(30).toHexString();\n colorPalette.A200 ??= new TinyColor(color).lighten(30).saturate(30).toHexString();\n colorPalette.A400 ??= new TinyColor(color).lighten(10).saturate(15).toHexString();\n colorPalette.A700 ??= new TinyColor(color).lighten(5).saturate(5).toHexString();\n break;\n\n }\n\n return colorPalette as ColorPalette;\n}\n\nfunction multiply(rgb1: Numberify<RGBA>, rgb2: Numberify<RGBA>) {\n rgb1.b = Math.floor(rgb1.b * rgb2.b / 255);\n rgb1.g = Math.floor(rgb1.g * rgb2.g / 255);\n rgb1.r = Math.floor(rgb1.r * rgb2.r / 255);\n return new TinyColor('rgb ' + rgb1.r + ' ' + rgb1.g + ' ' + rgb1.b);\n}\n","import { ThemeDensity } from '@rxap/utilities';\nimport { Observable } from 'rxjs';\n\nexport function ObserveCurrentThemeDensity(): Observable<ThemeDensity> {\n return new Observable((subscriber) => {\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && mutation.attributeName === 'class') {\n const classList = (mutation.target as HTMLElement).classList;\n const matchingClasses = Array.from(classList).filter((className) =>\n /density-\\d/.test(className),\n );\n if (matchingClasses.length > 0) {\n const match = matchingClasses[0].match(/density-(\\d)/);\n if (match) {\n subscriber.next(Number(match[1]) * -1 as ThemeDensity);\n }\n } else {\n subscriber.next(0);\n }\n }\n });\n });\n\n subscriber.add(() => observer.disconnect());\n\n observer.observe(document.body, {\n attributes: true,\n attributeFilter: [ 'class' ],\n });\n\n });\n}\n","import { MediaMatcher } from '@angular/cdk/layout';\nimport {\n inject,\n Injectable,\n isDevMode,\n signal,\n WritableSignal,\n} from '@angular/core';\nimport { ConfigService } from '@rxap/config';\nimport {\n PubSubService,\n RXAP_TOPICS,\n} from '@rxap/ngx-pub-sub';\nimport { isDefined } from '@rxap/rxjs';\nimport { ThemeDensity } from '@rxap/utilities';\nimport {\n debounceTime,\n map,\n Subscription,\n tap,\n} from 'rxjs';\nimport {\n ColorPalette,\n ComputeColorPalette,\n} from './compute-color-palette';\n\nexport interface ColorPaletteConfigWithName extends ColorPaletteConfig {\n name?: string;\n}\n\nexport interface ThemeConfig {\n primaryColor?: ColorPaletteConfigWithName;\n accentColor?: ColorPaletteConfigWithName;\n warnColor?: ColorPaletteConfigWithName;\n density?: ThemeDensity;\n typography?: string;\n}\n\nexport interface ColorPaletteConfig {\n algorithm?: string;\n base?: string;\n color?: Partial<ColorPalette>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n\n public readonly config = inject(ConfigService);\n public readonly pubSub = inject(PubSubService);\n\n public readonly darkMode: WritableSignal<boolean>;\n public readonly themeName: WritableSignal<string>;\n public readonly density: WritableSignal<ThemeDensity>;\n public readonly typography: WritableSignal<string>;\n\n protected readonly darkModeMediaQuery: MediaQueryList;\n\n protected syncSubscription?: Subscription;\n\n constructor(private readonly mediaMatcher: MediaMatcher) {\n this.darkModeMediaQuery = this.mediaMatcher.matchMedia('(prefers-color-scheme: dark)');\n this.darkMode = signal(this.darkModeMediaQuery.matches);\n this.themeName = signal(this.getTheme());\n this.density = signal(this.getDensity());\n this.typography = signal(this.getTypography());\n this.darkModeMediaQuery.addEventListener('change', (event) => {\n this.setDarkTheme(event.matches, true);\n });\n }\n\n public restore() {\n if (isDevMode()) {\n console.log('Restore theme settings from local storage');\n }\n // region restore dark mode\n let darkMode = this.restoreDarkMode();\n // if the dark/light mode is not restored from the local storage\n if (darkMode === null) {\n // set the dark mode based on the media query\n darkMode = this.darkModeMediaQuery.matches;\n this.setDarkTheme(darkMode, true);\n }\n // endregion\n\n this.restoreThemeName();\n this.restoreDensity();\n this.restoreTypography();\n\n this.restoreFromPubSub();\n }\n\n protected restoreFromPubSub() {\n if (this.syncSubscription) {\n return;\n }\n this.syncSubscription = new Subscription();\n this.syncSubscription.add(this.pubSub.subscribe<ThemeDensity>(RXAP_TOPICS.theme.density.restore).pipe(\n debounceTime(1000),\n map(event => event.data),\n isDefined(),\n tap(data => this.setDensity(data, false, false))\n ).subscribe());\n this.syncSubscription.add(this.pubSub.subscribe<string>(RXAP_TOPICS.theme.preset.restore).pipe(\n debounceTime(1000),\n map(event => event.data),\n isDefined(),\n tap(data => this.setTheme(data, false, false))\n ).subscribe());\n this.syncSubscription.add(this.pubSub.subscribe<string>(RXAP_TOPICS.theme.typography.restore).pipe(\n debounceTime(1000),\n map(event => event.data),\n isDefined(),\n tap(data => this.setTypography(data, false, false))\n ).subscribe());\n this.syncSubscription.add(this.pubSub.subscribe<boolean>(RXAP_TOPICS.theme.darkMode.restore).pipe(\n debounceTime(1000),\n map(event => event.data),\n isDefined(),\n tap(data => this.setDarkTheme(data, false, false))\n ).subscribe());\n }\n\n private get darkModeLocalStorageKey() {\n return (\n window as any\n )?.['__rxap__']?.['ngx']?.['theme']?.['darkMode']?.['key'] ?? `rxap-dark-mode`;\n }\n\n private get themeNameLocalStorageKey() {\n return (\n window as any\n )?.['__rxap__']?.['ngx']?.['theme']?.['name']?.['key'] ?? `rxap-theme-name`;\n }\n\n private get densityLocalStorageKey() {\n return (\n window as any\n )?.['__rxap__']?.['ngx']?.['theme']?.['density']?.['key'] ?? `rxap-theme-density`;\n }\n\n private get typographyLocalStorageKey() {\n return (\n window as any\n )?.['__rxap__']?.['ngx']?.['theme']?.['typography']?.['key'] ?? `rxap-theme-typography`;\n }\n\n // region restore\n\n public restoreDarkMode() {\n let darkMode: boolean | null = null;\n const darkModeCached = localStorage.getItem(this.darkModeLocalStorageKey);\n if (darkModeCached === 'true') {\n darkMode = true;\n }\n if (darkModeCached === 'false') {\n darkMode = false;\n }\n if (darkMode !== null) {\n this.setDarkTheme(darkMode, true);\n }\n return darkMode;\n }\n\n public restoreThemeName() {\n const themeName = localStorage.getItem(this.themeNameLocalStorageKey);\n if (themeName) {\n this.setTheme(themeName, true);\n }\n return themeName;\n }\n\n public restoreTypography() {\n const typography = localStorage.getItem(this.typographyLocalStorageKey);\n if (typography) {\n this.setTypography(typography, true);\n }\n return typography;\n }\n\n public restoreDensity() {\n const density = localStorage.getItem('rxap-theme-density');\n if (density) {\n const value = Number(density) as ThemeDensity;\n if (value <= 0 && value >= -3) {\n this.setDensity(Number(density) as ThemeDensity, true);\n return value;\n }\n }\n return null;\n }\n\n // endregion\n\n public toggleDarkTheme(): void {\n this.setDarkTheme(!this.darkMode());\n }\n\n // region set theme configuration state\n\n public setDarkTheme(darkMode: boolean, silent = false, publish = true): void {\n this.applyDarkMode(darkMode);\n if (this.darkMode() !== darkMode) {\n this.darkMode.set(darkMode);\n if (!silent) {\n localStorage.setItem(this.darkModeLocalStorageKey, String(darkMode));\n if (publish) {\n this.pubSub.publish(RXAP_TOPICS.theme.darkMode.changed, darkMode);\n }\n }\n }\n }\n\n public setDensity(density: ThemeDensity, silent = false, publish = true): void {\n this.applyDensity(density);\n if (this.density() !== density) {\n this.density.set(density);\n if (!silent) {\n localStorage.setItem(this.densityLocalStorageKey, String(density));\n if (publish) {\n this.pubSub.publish(RXAP_TOPICS.theme.density.changed, density);\n }\n }\n }\n }\n\n public setTypography(typography: string, silent = false, publish = true): void {\n this.applyTypography(typography);\n if (this.typography() !== typography) {\n this.typography.set(typography);\n if (!silent) {\n localStorage.setItem(this.typographyLocalStorageKey, typography);\n if (publish) {\n this.pubSub.publish(RXAP_TOPICS.theme.typography.changed, typography);\n }\n }\n }\n }\n\n public setTheme(themeName: string, silent = false, publish = true) {\n this.applyTheme(themeName);\n this.density.set(this.getDensity());\n this.typography.set(this.getTypography());\n if (this.themeName() !== themeName) {\n this.themeName.set(themeName);\n if (!silent) {\n localStorage.setItem(this.themeNameLocalStorageKey, themeName);\n if (publish) {\n this.pubSub.publish(RXAP_TOPICS.theme.preset.changed, themeName);\n }\n }\n }\n }\n\n // endregion\n\n // region apply theme configuration state\n\n public applyDarkMode(darkMode: boolean): void {\n if (darkMode) {\n // region deprecated\n document.body.classList.add('dark-theme');\n localStorage.removeItem('rxap-light-theme');\n // endregion\n document.body.classList.add('dark');\n } else {\n // region deprecated\n document.body.classList.remove('dark-theme');\n localStorage.setItem('rxap-light-theme', 'true');\n // endregion\n document.body.classList.remove('dark');\n }\n }\n\n public applyDensity(density: ThemeDensity): void {\n document.body.classList.remove('density-0', 'density-1', 'density-2', 'density-3');\n if (density < 0) {\n document.body.classList.add(`density${ density }`);\n }\n }\n\n public applyTypography(typography: string): void {\n document.body.style.setProperty('--font-family', `var(--font-family-${ typography })`);\n }\n\n public applyTheme(themeName: string): void {\n if (themeName === 'default') {\n this.resetToDefaultTheme();\n return;\n }\n\n const theme = this.getThemeConfig(themeName);\n\n if (theme.primaryColor?.color) {\n this.setCssColorVariables('primary', theme.primaryColor.color);\n }\n\n if (theme.accentColor?.color) {\n this.setCssColorVariables('accent', theme.accentColor.color);\n }\n\n if (theme.warnColor?.color) {\n this.setCssColorVariables('warn', theme.warnColor.color);\n }\n\n if (theme.density !== undefined) {\n this.applyDensity(theme.density);\n }\n\n if (theme.typography) {\n this.applyTypography(theme.typography);\n }\n\n document.body.style.setProperty(`--theme-name`, themeName);\n }\n\n // endregion\n\n // region get theme configuration state\n\n public getDensity(): ThemeDensity {\n let density = 0;\n document.body.classList.forEach((className) => {\n const match = className.match(/density-([123])/);\n if (match) {\n density = Number(match[1]) * -1;\n }\n });\n return density as ThemeDensity;\n }\n\n public getTypography(): string {\n const variable = document.body.style.getPropertyValue('--font-family');\n const match = variable.match(/var\\(--font-family-(.*)\\)/);\n if (match) {\n return match[1];\n }\n return 'default';\n }\n\n public getTheme() {\n return document.body.style.getPropertyValue('--theme-name') || 'default';\n }\n\n // endregion\n\n // region get available\n\n public getAvailableColorPalettes(): string[] | null {\n const colorPalettesConfigs: Record<string, unknown> | boolean = this.config.get('colorPalettes', false);\n if (!colorPalettesConfigs) {\n return null;\n }\n const availableColorPalettes: string[] = Object.keys(colorPalettesConfigs);\n availableColorPalettes.unshift('default');\n return availableColorPalettes;\n }\n\n public getAvailableThemes(): string[] | null {\n const themeConfigs: Record<string, unknown> | boolean = this.config.get('themes', false);\n if (!themeConfigs) {\n return null;\n }\n const availableThemes: string[] = Object.keys(themeConfigs);\n availableThemes.unshift('default');\n return availableThemes;\n }\n\n public getAvailableTypographies(): string[] | null {\n const availableTypographies = this.config.get('typographies', false);\n if (!availableTypographies) {\n return null;\n }\n return Array\n .from(document.styleSheets)\n .filter(sheet => sheet.href === null || sheet.href.startsWith(window.location.origin))\n .flatMap(sheet => Array.from(sheet.cssRules || []))\n .filter((rule: any) => rule.selectorText === ':root')\n .flatMap((rule: any) => Array.from(rule.style))\n .filter((prop: any) => prop.startsWith('--'))\n .filter((prop: any) => prop.startsWith('--font-family-'))\n .map((prop: any) => prop.replace('--font-family-', ''))\n .sort();\n }\n\n // endregion\n\n public getColorPalette(colorPaletteName: string): Partial<ColorPalette> {\n const colorPaletteConfig = this.config.getOrThrow<ColorPaletteConfig>(`colorPalettes.${ colorPaletteName }`);\n return this.coerceColorPalette(colorPaletteConfig);\n }\n\n // region utility\n\n private coerceColorPalette(colorPaletteConfig: ColorPaletteConfig): Partial<ColorPalette> {\n let colorPalette: Partial<ColorPalette> = {};\n\n if (colorPaletteConfig.color) {\n if (Object.keys(colorPaletteConfig.color).length !== 14) {\n // the color palette is not complete\n if (colorPaletteConfig.base) {\n colorPalette =\n ComputeColorPalette(colorPaletteConfig.base, colorPaletteConfig.color, colorPaletteConfig.algorithm);\n }\n }\n colorPalette = colorPaletteConfig.color;\n } else if (colorPaletteConfig.base) {\n colorPalette = ComputeColorPalette(colorPaletteConfig.base, {}, colorPaletteConfig.algorithm);\n }\n\n if (Object.keys(colorPalette).length === 0) {\n throw new Error('FATAL: The color palette has neither a base nor a color property');\n }\n\n return colorPalette;\n }\n\n private getThemeConfig(themeName: string): ThemeConfig {\n const themeConfig = this.config.getOrThrow<ThemeConfig>(`themes.${ themeName }`);\n\n if (themeConfig.accentColor) {\n themeConfig.accentColor.color = this.coerceColorPalette(themeConfig.accentColor);\n }\n\n if (themeConfig.primaryColor) {\n themeConfig.primaryColor.color = this.coerceColorPalette(themeConfig.primaryColor);\n }\n\n if (themeConfig.warnColor) {\n themeConfig.warnColor.color = this.coerceColorPalette(themeConfig.warnColor);\n }\n\n return themeConfig;\n }\n\n private setCssColorVariables(name: string, colorPalette: Partial<ColorPalette>): void {\n this.clearCssColorVariables(name);\n for (const [ index, color ] of Object.entries(colorPalette)) {\n document.body.style.setProperty(`--${ name }-${ index }`, color);\n }\n }\n\n private clearCssColorVariables(name: string): void {\n document.body.style.removeProperty(`--${ name }-50`);\n for (let index = 100; index <= 900; index += 100) {\n document.body.style.removeProperty(`--${ name }-${ index }`);\n }\n document.body.style.removeProperty(`--${ name }-a100`);\n document.body.style.removeProperty(`--${ name }-a200`);\n document.body.style.removeProperty(`--${ name }-a400`);\n document.body.style.removeProperty(`--${ name }-a700`);\n }\n\n private resetToDefaultTheme() {\n this.clearCssColorVariables('primary');\n this.clearCssColorVariables('accent');\n this.clearCssColorVariables('warn');\n this.setDensity(0);\n this.setTypography('default');\n document.body.style.removeProperty(`--theme-name`);\n localStorage.removeItem(this.themeNameLocalStorageKey);\n localStorage.removeItem(this.densityLocalStorageKey);\n localStorage.removeItem(this.typographyLocalStorageKey);\n }\n\n // endregion\n\n}\n","import {\n inject,\n provideAppInitializer,\n} from '@angular/core';\nimport { ThemeService } from './theme.service';\n\nexport function provideTheme() {\n return [\n provideAppInitializer(() => {\n const initializerFn = ((themeService: ThemeService) => () => themeService.restore())(inject(ThemeService));\n return initializerFn();\n })\n ];\n}\n","// region \nexport * from './lib/compute-color-palette';\nexport * from './lib/observe-current-theme-density';\nexport * from './lib/provide';\nexport * from './lib/theme.service';\n// endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}