@skyux/theme 12.30.0 → 12.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -409,7 +409,7 @@ class SkyThemeService {
409
409
  }
410
410
  /**
411
411
  * Updates the current theme brand.
412
- * @param brand The new theme brand to apply.
412
+ * @param brand The new theme brand to apply, or undefined to clear the current brand.
413
413
  */
414
414
  setThemeBrand(brand) {
415
415
  this.#updateThemeProperty('brand', brand);
@@ -465,7 +465,7 @@ class SkyThemeService {
465
465
  break;
466
466
  default:
467
467
  }
468
- if (supportedValues && !supportedValues.includes(value)) {
468
+ if (supportedValues && value && !supportedValues.includes(value)) {
469
469
  throw new Error(`The current theme does not support the specified ${property}.`);
470
470
  }
471
471
  const updatedSettings = {
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-theme.mjs","sources":["../../../../../libs/components/theme/src/lib/icons/icon-manifest.service.ts","../../../../../libs/components/theme/src/lib/theming/theme-mode.ts","../../../../../libs/components/theme/src/lib/theming/theme-spacing.ts","../../../../../libs/components/theme/src/lib/theming/theme.ts","../../../../../libs/components/theme/src/lib/theming/theme-brand.ts","../../../../../libs/components/theme/src/lib/theming/theme-settings.ts","../../../../../libs/components/theme/src/lib/theming/theme.service.ts","../../../../../libs/components/theme/src/lib/style-loader.ts","../../../../../libs/components/theme/src/lib/theming/theme-class.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme-if.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme.directive.ts","../../../../../libs/components/theme/src/lib/theme.module.ts","../../../../../libs/components/theme/src/lib/theming/theme-component-class.directive.ts","../../../../../libs/components/theme/src/lib/viewport/viewport.service.ts","../../../../../libs/components/theme/src/lib/providers/provide-initial-theme.ts","../../../../../libs/components/theme/src/skyux-theme.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { getIconManifest } from '@skyux/icons';\n\nimport { SkyThemeIconManifest } from './icon-manifest';\n\n/**\n * Provides a method for retrieving metadata about the SKY UX icon font.\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyThemeIconManifestService {\n /**\n * Gets metadata about the SKY UX icon font.\n */\n public getManifest(): SkyThemeIconManifest {\n return getIconManifest();\n }\n}\n","import { SkyThemeModeData } from './theme-serialization-types';\n\n/**\n * Defines properties of a SKY UX theme mode.\n */\nexport class SkyThemeMode {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n light: new SkyThemeMode('light', 'sky-theme-mode-light'),\n dark: new SkyThemeMode('dark', 'sky-theme-mode-dark'),\n };\n\n /**\n * Creates a new theme mode.\n * @param name The name of the theme mode.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme mode.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n\n /**\n * @internal\n * Serializes the theme mode to a JSON-compatible object.\n */\n public serialize(): SkyThemeModeData {\n // Check if this instance is a preset\n const presetEntry = Object.entries(SkyThemeMode.presets).find(\n ([, preset]) => preset === this,\n );\n\n if (presetEntry) {\n return {\n name: this.name,\n isPreset: true,\n };\n }\n\n return {\n name: this.name,\n hostClass: this.hostClass,\n };\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyThemeMode instance.\n */\n public static deserialize(data: SkyThemeModeData): SkyThemeMode {\n if (data.isPreset) {\n const preset =\n SkyThemeMode.presets[data.name as keyof typeof SkyThemeMode.presets];\n\n if (preset) {\n return preset;\n }\n\n throw new Error(`Unknown theme mode preset: ${data.name}`);\n }\n\n if (!data.hostClass) {\n throw new Error('hostClass is required for non-preset theme modes');\n }\n\n return new SkyThemeMode(data.name, data.hostClass);\n }\n}\n","import { SkyThemeSpacingData } from './theme-serialization-types';\n\n/**\n * Defines properties of SKY UX theme spacing.\n */\nexport class SkyThemeSpacing {\n /**\n * The preset spacing available in SKY UX.\n */\n public static readonly presets = {\n standard: new SkyThemeSpacing('standard', 'sky-theme-spacing-standard'),\n compact: new SkyThemeSpacing('compact', 'sky-theme-spacing-compact'),\n };\n\n /**\n * Creates a new theme spacing.\n * @param name The name of the theme spacing.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme spacing.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n\n /**\n * @internal\n * Serializes the theme spacing to a JSON-compatible object.\n */\n public serialize(): SkyThemeSpacingData {\n // Check if this instance is a preset\n const presetEntry = Object.entries(SkyThemeSpacing.presets).find(\n ([, preset]) => preset === this,\n );\n\n if (presetEntry) {\n return {\n name: this.name,\n isPreset: true,\n };\n }\n\n return {\n name: this.name,\n hostClass: this.hostClass,\n };\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyThemeSpacing instance.\n */\n public static deserialize(data: SkyThemeSpacingData): SkyThemeSpacing {\n if (data.isPreset) {\n const preset =\n SkyThemeSpacing.presets[\n data.name as keyof typeof SkyThemeSpacing.presets\n ];\n\n if (preset) {\n return preset;\n }\n\n throw new Error(`Unknown theme spacing preset: ${data.name}`);\n }\n\n if (!data.hostClass) {\n throw new Error('hostClass is required for non-preset theme spacing');\n }\n\n return new SkyThemeSpacing(data.name, data.hostClass);\n }\n}\n","import { SkyThemeMode } from './theme-mode';\nimport { SkyThemeData } from './theme-serialization-types';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Defines properties of a SKY UX theme.\n */\nexport class SkyTheme {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n default: new SkyTheme(\n 'default',\n 'sky-theme-default',\n [SkyThemeMode.presets.light],\n [SkyThemeSpacing.presets.standard],\n ),\n modern: new SkyTheme(\n 'modern',\n 'sky-theme-modern',\n [SkyThemeMode.presets.light, SkyThemeMode.presets.dark],\n [SkyThemeSpacing.presets.standard, SkyThemeSpacing.presets.compact],\n true,\n ),\n };\n\n /**\n * Creates a new theme.\n * @param name The name of the theme.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme.\n * @param supportedModes An array of modes supported by the theme.\n * @param supportedSpacing An array of spacing modes supported by the theme.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n public readonly supportedModes: SkyThemeMode[],\n public readonly supportedSpacing = [SkyThemeSpacing.presets.standard],\n public readonly supportsBranding = false,\n ) {}\n\n /**\n * @internal\n * Serializes the theme to a JSON-compatible object.\n */\n public serialize(): SkyThemeData {\n // Check if this instance is a preset\n const presetEntry = Object.entries(SkyTheme.presets).find(\n ([, preset]) => preset === this,\n );\n\n if (presetEntry) {\n return {\n name: this.name,\n supportedModes: this.supportedModes.map((mode) => mode.serialize()),\n isPreset: true,\n };\n }\n\n const result: SkyThemeData = {\n name: this.name,\n hostClass: this.hostClass,\n supportedModes: this.supportedModes.map((mode) => mode.serialize()),\n };\n\n // Only include supportedSpacing if it's not the default\n if (\n this.supportedSpacing.length !== 1 ||\n this.supportedSpacing[0] !== SkyThemeSpacing.presets.standard\n ) {\n result.supportedSpacing = this.supportedSpacing.map((spacing) =>\n spacing.serialize(),\n );\n }\n\n // Only include supportsBranding if it's true\n if (this.supportsBranding) {\n result.supportsBranding = this.supportsBranding;\n }\n\n return result;\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyTheme instance.\n */\n public static deserialize(data: SkyThemeData): SkyTheme {\n if (data.isPreset) {\n const preset =\n SkyTheme.presets[data.name as keyof typeof SkyTheme.presets];\n\n if (preset) {\n return preset;\n }\n\n throw new Error(`Unknown theme preset: ${data.name}`);\n }\n\n if (!data.hostClass) {\n throw new Error('hostClass is required for non-preset themes');\n }\n\n const supportedModes = data.supportedModes.map((modeData) =>\n SkyThemeMode.deserialize(modeData),\n );\n\n const supportedSpacing = data.supportedSpacing\n ? data.supportedSpacing.map((spacingData) =>\n SkyThemeSpacing.deserialize(spacingData),\n )\n : [SkyThemeSpacing.presets.standard];\n\n return new SkyTheme(\n data.name,\n data.hostClass,\n supportedModes,\n supportedSpacing,\n data.supportsBranding ?? false,\n );\n }\n}\n","import { SkyThemeBrandData } from './theme-serialization-types';\n\n/**\n * @internal\n * Defines properties of SKY UX theme branding.\n */\nexport class SkyThemeBrand {\n public get hostClass(): string {\n return this.#hostClass || this.#buildDefaultHostClassName();\n }\n\n private set hostClass(value: string | undefined) {\n this.#hostClass = value;\n }\n\n #hostClass: string | undefined;\n /**\n * Creates a new theme brand.\n * @param name The name of the theme brand.\n * @param version The version of the theme brand.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme brand. This defaults to `sky-theme-brand-<name>`\n * @param styleUrl The URL of the stylesheet to load for this brand\n * @param sriHash The subresource integrity hash for the stylesheet\n */\n constructor(\n public readonly name: string,\n public readonly version: string,\n hostClass?: string,\n public readonly styleUrl?: string,\n public readonly sriHash?: string,\n ) {\n this.hostClass = hostClass;\n\n if (!/^(\\d+|\\d+\\.\\d+\\.\\d+)(?:-(?:alpha|beta|rc)\\.\\d+)*$/.test(version)) {\n throw new Error(\n `Invalid version format \"${version}\" for theme brand \"${name}\".`,\n );\n }\n }\n\n /**\n * @internal\n * Serializes the theme brand to a JSON-compatible object.\n */\n public serialize(): SkyThemeBrandData {\n const result: SkyThemeBrandData = {\n name: this.name,\n version: this.version,\n };\n\n // Only include hostClass if it's different from the default\n const defaultHostClass = this.#buildDefaultHostClassName();\n\n if (this.hostClass !== defaultHostClass) {\n result.hostClass = this.hostClass;\n }\n\n // Include styleUrl and sriHash if they are provided\n if (this.styleUrl) {\n result.styleUrl = this.styleUrl;\n }\n\n if (this.sriHash) {\n result.sriHash = this.sriHash;\n }\n\n return result;\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyThemeBrand instance.\n */\n public static deserialize(data: SkyThemeBrandData): SkyThemeBrand {\n return new SkyThemeBrand(\n data.name,\n data.version,\n data.hostClass,\n data.styleUrl,\n data.sriHash,\n );\n }\n\n #buildDefaultHostClassName(): string {\n return `sky-theme-brand-${this.name}`;\n }\n}\n","import { SkyTheme } from './theme';\nimport { SkyThemeBrand } from './theme-brand';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettingsData } from './theme-serialization-types';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Specifies the theme and mode to be applied to a host element.\n */\nexport class SkyThemeSettings {\n /**\n * Creates a new SkyThemeSettings instance.\n * @param theme The theme configuration.\n * @param mode The theme mode.\n */\n constructor(\n public readonly theme: SkyTheme,\n public readonly mode: SkyThemeMode,\n public readonly spacing = SkyThemeSpacing.presets.standard,\n public readonly brand?: SkyThemeBrand,\n ) {}\n\n /**\n * Serializes the theme settings to a string.\n */\n public serialize(): string {\n const result: SkyThemeSettingsData = {\n theme: this.theme.serialize(),\n mode: this.mode.serialize(),\n };\n\n // Only include spacing if it's not the default\n if (this.spacing !== SkyThemeSpacing.presets.standard) {\n result.spacing = this.spacing.serialize();\n }\n\n // Only include brand if it exists\n if (this.brand) {\n result.brand = this.brand.serialize();\n }\n\n return JSON.stringify(result);\n }\n\n /**\n * Deserializes a string to a SkyThemeSettings instance.\n */\n public static deserialize(value: string): SkyThemeSettings {\n const settingsData = JSON.parse(value) as SkyThemeSettingsData;\n\n const theme = SkyTheme.deserialize(settingsData.theme);\n const mode = SkyThemeMode.deserialize(settingsData.mode);\n const spacing = settingsData.spacing\n ? SkyThemeSpacing.deserialize(settingsData.spacing)\n : SkyThemeSpacing.presets.standard;\n const brand = settingsData.brand\n ? SkyThemeBrand.deserialize(settingsData.brand)\n : undefined;\n\n return new SkyThemeSettings(theme, mode, spacing, brand);\n }\n}\n","import { Injectable, Renderer2 } from '@angular/core';\n\nimport { Observable, ReplaySubject } from 'rxjs';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeBrand } from './theme-brand';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeSettingsChange } from './theme-settings-change';\nimport { SkyThemeSpacing } from './theme-spacing';\n\nconst BRAND_BLACKBAUD = 'blackbaud';\n\nfunction assertCurrentSettings(\n currentSettings: SkyThemeSettings | undefined,\n): asserts currentSettings is SkyThemeSettings {\n if (!currentSettings) {\n throw new Error('Theme service is not initialized. Call init() first.');\n }\n}\n\n/**\n * Provides methods for updating and handling changes to the current theme.\n */\n@Injectable()\nexport class SkyThemeService {\n /**\n * Notifies consumers when the current theme settings have changed.\n */\n public get settingsChange(): Observable<SkyThemeSettingsChange> {\n return this.#_settingsObs;\n }\n\n #current: SkyThemeSettings | undefined;\n\n #brandLinkElement: HTMLLinkElement | undefined;\n\n #hostEl: any | undefined;\n\n #renderer: Renderer2 | undefined;\n\n #settings: ReplaySubject<SkyThemeSettingsChange>;\n\n #registeredBrands = new Map<string, SkyThemeBrand>();\n\n #_settingsObs: Observable<SkyThemeSettingsChange>;\n\n constructor() {\n this.#settings = new ReplaySubject<SkyThemeSettingsChange>(1);\n this.#_settingsObs = this.#settings.asObservable();\n }\n\n /**\n * Initializes the theme service with the specified parameters. This should only be called\n * from a host component that provides its own theme to child components.\n * @param hostEl The host element under which themed components are rendered.\n * @param renderer A Renderer2 instance for updating the host element with theme changes.\n * @param theme The initial theme.\n * @param registeredBrands An initial set of brands to register. Additional brands can\n * be registered later via the registerBrand() method.\n */\n public init(\n hostEl: any,\n renderer: Renderer2,\n theme: SkyThemeSettings,\n registeredBrands?: SkyThemeBrand[],\n ): void {\n this.#hostEl = hostEl;\n this.#renderer = renderer;\n\n if (registeredBrands) {\n for (const brand of registeredBrands) {\n this.#registeredBrands.set(brand.name, brand);\n }\n }\n\n this.setTheme(theme);\n }\n\n /**\n * Destroys the current theme service. This should only be called from a host component that\n * provides its own theme to child components.\n */\n public destroy(): void {\n this.#settings.complete();\n\n this.#hostEl = this.#renderer = undefined;\n }\n\n /**\n * Updates the current theme mode.\n * @param mode The new theme mode to apply.\n */\n public setThemeMode(mode: SkyThemeMode): void {\n this.#updateThemeProperty('mode', mode);\n }\n\n /**\n * Updates the current theme spacing.\n * @param spacing The new theme spacing to apply.\n */\n public setThemeSpacing(spacing: SkyThemeSpacing): void {\n this.#updateThemeProperty('spacing', spacing);\n }\n\n /**\n * Updates the current theme brand.\n * @param brand The new theme brand to apply.\n */\n public setThemeBrand(brand: SkyThemeBrand): void {\n this.#updateThemeProperty('brand', brand);\n }\n\n /**\n * Updates the current theme settings.\n * @param settings The new theme settings to apply.\n */\n public setTheme(settings: SkyThemeSettings): void;\n\n /**\n * Updates the current theme.\n * @param theme The new theme to apply.\n */\n public setTheme(theme: SkyTheme): void;\n\n public setTheme(settingsOrTheme: SkyThemeSettings | SkyTheme): void {\n let settings: SkyThemeSettings;\n\n if (settingsOrTheme instanceof SkyThemeSettings) {\n settings = this.#applyRegisteredBrand(settingsOrTheme);\n } else {\n const current = this.#current;\n\n assertCurrentSettings(current);\n\n settings = new SkyThemeSettings(\n settingsOrTheme,\n current.mode,\n current.spacing,\n settingsOrTheme.supportsBranding ? current.brand : undefined,\n );\n }\n\n const previous = this.#current;\n\n this.#applyThemeClass(previous, settings, 'theme');\n this.#applyThemeClass(previous, settings, 'mode', 'supportedModes');\n this.#applyThemeClass(previous, settings, 'spacing', 'supportedSpacing');\n this.#applyThemeClass(previous, settings, 'brand');\n\n this.#settings.next({\n currentSettings: settings,\n previousSettings: previous,\n });\n\n this.#current = settings;\n }\n\n public registerBrand(brand: SkyThemeBrand): void {\n this.#registeredBrands.set(brand.name, brand);\n }\n\n public unregisterBrand(name: string): void {\n this.#registeredBrands.delete(name);\n }\n\n #applyRegisteredBrand(settings: SkyThemeSettings): SkyThemeSettings {\n const brandName = settings.brand?.name;\n\n if (brandName) {\n const registeredBrand = this.#registeredBrands.get(brandName);\n\n if (registeredBrand) {\n settings = new SkyThemeSettings(\n settings.theme,\n settings.mode,\n settings.spacing,\n registeredBrand,\n );\n }\n }\n\n return settings;\n }\n\n #updateThemeProperty(\n property: 'mode' | 'spacing' | 'brand',\n value: SkyThemeMode | SkyThemeSpacing | SkyThemeBrand,\n ): void {\n const current = this.#current;\n\n assertCurrentSettings(current);\n\n const currentTheme = current.theme;\n\n let supportedValues: SkyThemeMode[] | SkyThemeSpacing[] | undefined =\n undefined;\n\n switch (property) {\n case 'mode':\n supportedValues = currentTheme.supportedModes;\n break;\n case 'spacing':\n supportedValues = currentTheme.supportedSpacing;\n break;\n default:\n }\n\n if (supportedValues && !supportedValues.includes(value)) {\n throw new Error(\n `The current theme does not support the specified ${property}.`,\n );\n }\n\n const updatedSettings = {\n theme: current.theme,\n mode: current.mode,\n spacing: current.spacing,\n brand: current.brand,\n [property]: value,\n };\n\n this.setTheme(\n new SkyThemeSettings(\n updatedSettings.theme,\n updatedSettings.mode,\n updatedSettings.spacing,\n updatedSettings.brand,\n ),\n );\n }\n\n #applyThemeClass(\n previous: SkyThemeSettings | undefined,\n current: SkyThemeSettings,\n prop: 'theme' | 'mode' | 'spacing' | 'brand',\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n const currentSetting = current[prop];\n const previousClass = previous?.[prop]?.hostClass;\n const currentClass = currentSetting?.hostClass;\n\n if (!previousClass || previousClass !== currentClass) {\n this.#updateHostClass(\n prop,\n previousClass,\n currentClass,\n currentSetting,\n current,\n supportedProp,\n );\n\n if (prop === 'brand') {\n if (!current.theme.supportsBranding && currentSetting) {\n throw new Error('Branding is not supported for the given theme.');\n }\n\n this.#updateBrandStylesheet(current.brand, previous?.brand);\n }\n }\n }\n\n #updateBrandStylesheet(\n currentBrand: SkyThemeBrand | undefined,\n previousBrand: SkyThemeBrand | undefined,\n ): void {\n if (previousBrand && previousBrand.name !== BRAND_BLACKBAUD) {\n this.#removeBrandStylesheet();\n }\n\n if (currentBrand && currentBrand.name !== BRAND_BLACKBAUD) {\n this.#addBrandStylesheet(currentBrand);\n }\n }\n\n #updateHostClass(\n prop: 'theme' | 'mode' | 'spacing' | 'brand',\n previousClass: string | undefined,\n currentClass: string | undefined,\n currentSetting:\n | SkyTheme\n | SkyThemeMode\n | SkyThemeSpacing\n | SkyThemeBrand\n | undefined,\n current: SkyThemeSettings,\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n if (previousClass) {\n this.#removeHostClass(previousClass);\n }\n\n if (prop === 'brand') {\n if (currentClass && !previousClass) {\n this.#addHostClass('sky-theme-brand-base');\n } else if (!currentClass && previousClass) {\n this.#removeHostClass('sky-theme-brand-base');\n }\n }\n\n if (\n currentClass &&\n this.#isSupportedProperty(currentSetting, current, supportedProp)\n ) {\n this.#addHostClass(currentClass);\n }\n }\n\n #addBrandStylesheet(brand: SkyThemeBrand): void {\n if (brand.name !== BRAND_BLACKBAUD) {\n // Use styleUrl if provided, otherwise build the default URL\n const styleUrl =\n brand.styleUrl ||\n `https://sky.blackbaudcdn.net/static/skyux-brand-${brand.name}/${brand.version}/assets/scss/${brand.name}.css`;\n\n const renderer = this.#getRenderer();\n\n this.#brandLinkElement = renderer.createElement(\n 'link',\n ) as HTMLLinkElement;\n\n renderer.appendChild(this.#hostEl, this.#brandLinkElement);\n\n renderer.setAttribute(this.#brandLinkElement, 'rel', 'stylesheet');\n renderer.setAttribute(this.#brandLinkElement, 'href', styleUrl);\n\n if (brand.sriHash) {\n renderer.setAttribute(\n this.#brandLinkElement,\n 'integrity',\n brand.sriHash,\n );\n\n renderer.setAttribute(\n this.#brandLinkElement,\n 'crossorigin',\n 'anonymous',\n );\n }\n }\n }\n\n #removeBrandStylesheet(): void {\n if (this.#brandLinkElement) {\n this.#getRenderer().removeChild(this.#hostEl, this.#brandLinkElement);\n this.#brandLinkElement = undefined;\n }\n }\n\n #addHostClass(className: string): void {\n this.#getRenderer().addClass(this.#hostEl, className);\n }\n\n #removeHostClass(className: string): void {\n this.#getRenderer().removeClass(this.#hostEl, className);\n }\n\n #getRenderer(): Renderer2 {\n if (!this.#renderer) {\n throw new Error(\n 'Renderer is not initialized. Have you called the theme service `init` method?',\n );\n }\n return this.#renderer;\n }\n\n #isSupportedProperty(\n currentSetting:\n | SkyTheme\n | SkyThemeMode\n | SkyThemeSpacing\n | SkyThemeBrand\n | undefined,\n current: SkyThemeSettings,\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): boolean {\n return (\n !supportedProp ||\n ((currentSetting instanceof SkyThemeMode ||\n currentSetting instanceof SkyThemeSpacing) &&\n current.theme[supportedProp].includes(currentSetting))\n );\n }\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport FontFaceObserver from 'fontfaceobserver';\nimport { take } from 'rxjs/operators';\n\nimport { SkyThemeService } from './theming/theme.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppStyleLoader {\n public static readonly LOAD_TIMEOUT = 3000;\n public isLoaded = false;\n\n #themeSvc: SkyThemeService | undefined;\n\n constructor(@Optional() themeSvc?: SkyThemeService) {\n this.#themeSvc = themeSvc;\n }\n\n public loadStyles(): Promise<any> {\n if (this.isLoaded) {\n return Promise.resolve();\n }\n\n let themePromise: Promise<any>;\n\n if (this.#themeSvc) {\n themePromise = this.#themeSvc.settingsChange.pipe(take(1)).toPromise();\n } else {\n themePromise = Promise.resolve();\n }\n\n const fontAwesome = new FontFaceObserver('FontAwesome');\n const skyuxIcons = new FontFaceObserver('skyux-icons');\n const blackbaudSans = new FontFaceObserver('BLKB Sans');\n\n return Promise.all([\n // Specify a character for FontAwesome since some browsers will fail to detect\n // when the font is loaded unless a known character with a different width\n // than the default is not specified.\n fontAwesome.load('\\uf0fc', SkyAppStyleLoader.LOAD_TIMEOUT),\n skyuxIcons.load('\\ue999', SkyAppStyleLoader.LOAD_TIMEOUT),\n blackbaudSans.load(undefined, SkyAppStyleLoader.LOAD_TIMEOUT),\n themePromise,\n ])\n .then(() => {\n this.isLoaded = true;\n })\n .catch((error) => {\n // Errors loading the font should not stop the page from rendering.\n // Passing the error along in case the client wants to do something with it.\n return Promise.resolve({\n error,\n });\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\ntype SkyThemeClassMap = Record<string, string>;\n\n/**\n * Component to add classes conditionally based on the current theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeClass]',\n standalone: false,\n})\nexport class SkyThemeClassDirective implements OnDestroy {\n /**\n * The HTML class attribute.\n *\n * @param value\n */\n @Input()\n public set class(value: string | undefined) {\n this.#removeInitialClasses(this.#initialClasses);\n this.#initialClasses = typeof value === 'string' ? value.split(/\\s+/) : [];\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n /**\n * An object with class names in a string for keys, and theme names (e.g. 'default' or 'modern') as values.\n *\n * @param value\n */\n @Input()\n public set skyThemeClass(value: SkyThemeClassMap | undefined) {\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n\n this.#skyThemeClassMap = value as SkyThemeClassMap;\n\n /* istanbul ignore else */\n if (this.#skyThemeClassMap) {\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n }\n\n set #themeSettings(settings: SkyThemeSettings) {\n this.#currentTheme = settings;\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #initialClasses: string[] = [];\n #skyThemeClassMap: SkyThemeClassMap | undefined;\n\n #ngEl: ElementRef;\n #renderer: Renderer2;\n\n constructor(\n ngEl: ElementRef,\n renderer: Renderer2,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#ngEl = ngEl;\n this.#renderer = renderer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#themeSettings = settingsChange.currentSettings;\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #applyInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, true));\n }\n }\n\n #applySkyThemeClassMap(skyThemeClassMap: SkyThemeClassMap | undefined): void {\n if (skyThemeClassMap) {\n const themeName = this.#currentTheme?.theme.name || 'default';\n Object.keys(skyThemeClassMap).forEach((className) => {\n const enabled = themeName === skyThemeClassMap[className];\n this.#toggleClass(className, enabled);\n });\n }\n }\n\n #removeInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, false));\n }\n }\n\n #removeSkyThemeClassMap(\n skyThemeClassMap: SkyThemeClassMap | undefined,\n ): void {\n if (skyThemeClassMap) {\n Object.keys(skyThemeClassMap).forEach((className) =>\n this.#toggleClass(className, false),\n );\n }\n }\n\n #toggleClass(className: string, enabled: boolean): void {\n className = className.trim();\n /* istanbul ignore else */\n if (className) {\n className.split(/\\s+/g).forEach((classNameItem) => {\n if (enabled) {\n this.#renderer.addClass(this.#ngEl.nativeElement, classNameItem);\n } else {\n this.#renderer.removeClass(this.#ngEl.nativeElement, classNameItem);\n }\n });\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Input,\n OnDestroy,\n Optional,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\n/**\n * Component that works like `ngIf` to show markup for matching theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeIf]',\n standalone: false,\n})\nexport class SkyThemeIfDirective implements OnDestroy {\n /**\n * A string that should match the name of a theme, `'default'` or `'modern'`.\n *\n * @param value\n */\n @Input()\n public set skyThemeIf(value: 'default' | 'modern' | undefined) {\n this.#context = value;\n this.#updateView();\n }\n\n #context: string | undefined;\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #hasView = false;\n\n #templateRef: TemplateRef<unknown>;\n #viewContainer: ViewContainerRef;\n\n constructor(\n templateRef: TemplateRef<unknown>,\n viewContainer: ViewContainerRef,\n changeDetector: ChangeDetectorRef,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#templateRef = templateRef;\n this.#viewContainer = viewContainer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#currentTheme = settingsChange.currentSettings;\n this.#updateView();\n\n // Components that use OnPush change detection will not automatically\n // check for changes when created as a result of a theme change if\n // it happens outside of an Angular change detection cycle. This\n // ensures change detection runs on those components.\n changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #updateView(): void {\n const themeName = this.#currentTheme?.theme.name || 'default';\n const condition = this.#context && themeName === this.#context;\n if (condition && !this.#hasView) {\n this.#viewContainer.createEmbeddedView(this.#templateRef);\n this.#hasView = true;\n } else if (!condition && this.#hasView) {\n this.#viewContainer.clear();\n this.#hasView = false;\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\nconst defaultTheme = new SkyThemeSettings(\n SkyTheme.presets.default,\n SkyThemeMode.presets.light,\n);\n\n/**\n * Creates a new instance of `SkyThemeService` to allow a container\n * to have its own theme.\n */\n@Directive({\n selector: '[skyTheme]',\n providers: [SkyThemeService],\n standalone: false,\n})\nexport class SkyThemeDirective implements OnInit, OnDestroy {\n @Input()\n public set skyTheme(value: SkyThemeSettings | undefined) {\n this.skyThemeOrDefault = value || defaultTheme;\n\n if (this.#initialized) {\n this.#themeSvc.setTheme(this.skyThemeOrDefault);\n }\n }\n\n public skyThemeOrDefault = defaultTheme;\n\n #initialized = false;\n\n #elRef: ElementRef;\n #renderer: Renderer2;\n #themeSvc: SkyThemeService;\n\n constructor(\n elRef: ElementRef,\n renderer: Renderer2,\n themeSvc: SkyThemeService,\n ) {\n this.#elRef = elRef;\n this.#renderer = renderer;\n this.#themeSvc = themeSvc;\n }\n\n public ngOnInit(): void {\n this.#themeSvc.init(\n this.#elRef.nativeElement,\n this.#renderer,\n this.skyThemeOrDefault,\n );\n\n this.#initialized = true;\n }\n\n public ngOnDestroy(): void {\n this.#themeSvc.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyThemeClassDirective } from './theming/theme-class.directive';\nimport { SkyThemeIfDirective } from './theming/theme-if.directive';\nimport { SkyThemeDirective } from './theming/theme.directive';\n\n@NgModule({\n declarations: [\n SkyThemeClassDirective,\n SkyThemeDirective,\n SkyThemeIfDirective,\n ],\n exports: [SkyThemeClassDirective, SkyThemeDirective, SkyThemeIfDirective],\n})\nexport class SkyThemeModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n HostBinding,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { SkyThemeService } from '../theming/theme.service';\n\n@Directive({\n selector: '[skyThemeClass]',\n standalone: true,\n})\nexport class SkyThemeComponentClassDirective {\n @HostBinding('class')\n public theme = 'sky-cmp-theme-default';\n\n #changeDetector = inject(ChangeDetectorRef);\n #themeService = inject(SkyThemeService, { optional: true });\n\n constructor() {\n this.#themeService?.settingsChange\n .pipe(takeUntilDestroyed())\n .subscribe((change) => {\n this.theme = `sky-cmp-theme-${change.currentSettings.theme.name}`;\n this.#changeDetector.markForCheck();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, NgZone, inject } from '@angular/core';\n\nimport { ReplaySubject } from 'rxjs';\n\nimport { SkyAppViewportReserveArgs } from './viewport-reserve-args';\nimport { SkyAppViewportReservedPositionType } from './viewport-reserve-position-type';\n\ntype ReserveItemType = SkyAppViewportReserveArgs & {\n active: boolean;\n};\n\n/**\n * Provides information about the state of the application's viewport.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppViewportService {\n /**\n * Updated when the viewport becomes visible. While the page is rendered, the\n * viewport may remain hidden as fonts and styles are loaded asynchronously;\n * this is done to avoid a FOUC (Flash Of Unstyled Content) before the fonts\n * and styles are ready.\n */\n public visible = new ReplaySubject<boolean>(1);\n\n // ESLint doesn't recognize how this is used.\n #updateRequest: number | undefined = undefined;\n readonly #reserveItems = new Map<string, ReserveItemType>();\n readonly #conditionallyReserveItems = new Map<Element, ReserveItemType>();\n readonly #document = inject(DOCUMENT);\n readonly #ngZone = inject(NgZone);\n // Observe elements crossing the browser's viewport boundaries.\n readonly #intersectionObserver = this.#ngZone.runOutsideAngular(\n () =>\n new IntersectionObserver(\n () => this.#ngZone.run(() => this.#updateViewportArea()),\n { threshold: Array.from({ length: 101 }, (_, i) => i / 100) },\n ),\n );\n #reservedSpaces: Record<SkyAppViewportReservedPositionType, number> = {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n constructor() {\n const onScroll = (): void => {\n if (this.#conditionallyReserveItems.size > 0) {\n this.#updateViewportArea();\n }\n };\n this.#document.addEventListener('scroll', onScroll);\n inject(DestroyRef).onDestroy(() => {\n /* istanbul ignore next */\n if (this.#updateRequest !== undefined) {\n cancelAnimationFrame(this.#updateRequest);\n }\n this.#intersectionObserver.disconnect();\n this.#document.removeEventListener('scroll', onScroll);\n });\n }\n\n /**\n * Reserves space for components docked to the left, top, right, or bottom of the viewport.\n * @param args\n */\n public reserveSpace(args: SkyAppViewportReserveArgs): void {\n const item = {\n ...args,\n active: this.#isElementVisible({ ...args, active: false }),\n };\n this.#reserveItems.set(args.id, item);\n this.#watchVisibility(item);\n this.#updateViewportArea();\n }\n\n /**\n * Removes reserved space for a component by the ID provided when it was reserved.\n * @param id\n */\n public unreserveSpace(id: string): void {\n const args = this.#reserveItems.get(id);\n if (args?.reserveForElement) {\n this.#intersectionObserver.unobserve(args.reserveForElement);\n this.#conditionallyReserveItems.delete(args.reserveForElement);\n }\n this.#reserveItems.delete(id);\n this.#updateViewportArea();\n }\n\n #updateViewportArea(): void {\n this.#updateRequest ??= requestAnimationFrame(() => {\n this.#updateRequest = undefined;\n const reservedSpaces: Record<SkyAppViewportReservedPositionType, number> =\n {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n for (const args of this.#reserveItems.values()) {\n args.active = this.#isElementVisible(args, reservedSpaces);\n if (args.active) {\n reservedSpaces[args.position] += args.size;\n }\n }\n\n this.#reservedSpaces = reservedSpaces;\n const documentElementStyle = this.#document.documentElement.style;\n\n for (const [position, size] of Object.entries(reservedSpaces)) {\n documentElementStyle.setProperty(\n `--sky-viewport-${position}`,\n size + 'px',\n );\n }\n });\n }\n\n #watchVisibility(item: ReserveItemType): void {\n if (item.reserveForElement) {\n this.#conditionallyReserveItems.set(item.reserveForElement, item);\n this.#intersectionObserver.observe(item.reserveForElement);\n }\n }\n\n #isElementVisible(\n args: ReserveItemType,\n reservedSpaces: Record<SkyAppViewportReservedPositionType, number> = this\n .#reservedSpaces,\n ): boolean {\n if (!args.reserveForElement) {\n return true;\n }\n const rect = args.reserveForElement.getBoundingClientRect();\n if (!rect || !rect.height || !rect.width) {\n return false;\n }\n const midpoint = {\n x: rect.x + Math.floor(rect.width / 2),\n y: rect.y + Math.floor(rect.height / 2),\n };\n if (\n // Vertically in view\n midpoint.y <= window.innerHeight &&\n midpoint.y >= 0 &&\n // Horizontally in view\n midpoint.x <= window.innerWidth &&\n midpoint.x >= 0\n ) {\n // Element is not hidden by another element\n if (\n args.reserveForElement.contains(\n this.#document.elementFromPoint(midpoint.x, midpoint.y),\n )\n ) {\n return true;\n }\n\n // Check if the item's midpoint is visible based on current reserved spaces.\n // Assumes reserved spaces are intended to be additive and not overlapping.\n const threshold = reservedSpaces[args.position];\n switch (args.position) {\n case 'top':\n return midpoint.y >= threshold;\n case 'right':\n return midpoint.x <= window.innerWidth - threshold;\n case 'bottom':\n return midpoint.y <= window.innerHeight - threshold;\n case 'left':\n return midpoint.x >= threshold;\n }\n }\n return false;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n EnvironmentProviders,\n RendererFactory2,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer,\n} from '@angular/core';\n\nimport { SkyTheme } from '../theming/theme';\nimport { SkyThemeMode } from '../theming/theme-mode';\nimport { SkyThemeSettings } from '../theming/theme-settings';\nimport { SkyThemeSpacing } from '../theming/theme-spacing';\nimport { SkyThemeService } from '../theming/theme.service';\n\nexport function provideInitialTheme(\n name: keyof typeof SkyTheme.presets = 'default',\n options?: {\n mode?: keyof typeof SkyThemeMode.presets;\n spacing?: keyof typeof SkyThemeSpacing.presets;\n },\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n SkyThemeService,\n provideAppInitializer(() => {\n const initializerFn = ((\n themeService: SkyThemeService,\n doc: Document,\n rendererFactory: RendererFactory2,\n ) => {\n return (): void => {\n themeService.init(\n doc.body,\n rendererFactory.createRenderer(null, null),\n new SkyThemeSettings(\n SkyTheme.presets[name],\n SkyThemeMode.presets[options?.mode ?? 'light'],\n SkyThemeSpacing.presets[options?.spacing ?? 'standard'],\n ),\n );\n };\n })(inject(SkyThemeService), inject(DOCUMENT), inject(RendererFactory2));\n return initializerFn();\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyThemeService"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-theme.mjs","sources":["../../../../../libs/components/theme/src/lib/icons/icon-manifest.service.ts","../../../../../libs/components/theme/src/lib/theming/theme-mode.ts","../../../../../libs/components/theme/src/lib/theming/theme-spacing.ts","../../../../../libs/components/theme/src/lib/theming/theme.ts","../../../../../libs/components/theme/src/lib/theming/theme-brand.ts","../../../../../libs/components/theme/src/lib/theming/theme-settings.ts","../../../../../libs/components/theme/src/lib/theming/theme.service.ts","../../../../../libs/components/theme/src/lib/style-loader.ts","../../../../../libs/components/theme/src/lib/theming/theme-class.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme-if.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme.directive.ts","../../../../../libs/components/theme/src/lib/theme.module.ts","../../../../../libs/components/theme/src/lib/theming/theme-component-class.directive.ts","../../../../../libs/components/theme/src/lib/viewport/viewport.service.ts","../../../../../libs/components/theme/src/lib/providers/provide-initial-theme.ts","../../../../../libs/components/theme/src/skyux-theme.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { getIconManifest } from '@skyux/icons';\n\nimport { SkyThemeIconManifest } from './icon-manifest';\n\n/**\n * Provides a method for retrieving metadata about the SKY UX icon font.\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyThemeIconManifestService {\n /**\n * Gets metadata about the SKY UX icon font.\n */\n public getManifest(): SkyThemeIconManifest {\n return getIconManifest();\n }\n}\n","import { SkyThemeModeData } from './theme-serialization-types';\n\n/**\n * Defines properties of a SKY UX theme mode.\n */\nexport class SkyThemeMode {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n light: new SkyThemeMode('light', 'sky-theme-mode-light'),\n dark: new SkyThemeMode('dark', 'sky-theme-mode-dark'),\n };\n\n /**\n * Creates a new theme mode.\n * @param name The name of the theme mode.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme mode.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n\n /**\n * @internal\n * Serializes the theme mode to a JSON-compatible object.\n */\n public serialize(): SkyThemeModeData {\n // Check if this instance is a preset\n const presetEntry = Object.entries(SkyThemeMode.presets).find(\n ([, preset]) => preset === this,\n );\n\n if (presetEntry) {\n return {\n name: this.name,\n isPreset: true,\n };\n }\n\n return {\n name: this.name,\n hostClass: this.hostClass,\n };\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyThemeMode instance.\n */\n public static deserialize(data: SkyThemeModeData): SkyThemeMode {\n if (data.isPreset) {\n const preset =\n SkyThemeMode.presets[data.name as keyof typeof SkyThemeMode.presets];\n\n if (preset) {\n return preset;\n }\n\n throw new Error(`Unknown theme mode preset: ${data.name}`);\n }\n\n if (!data.hostClass) {\n throw new Error('hostClass is required for non-preset theme modes');\n }\n\n return new SkyThemeMode(data.name, data.hostClass);\n }\n}\n","import { SkyThemeSpacingData } from './theme-serialization-types';\n\n/**\n * Defines properties of SKY UX theme spacing.\n */\nexport class SkyThemeSpacing {\n /**\n * The preset spacing available in SKY UX.\n */\n public static readonly presets = {\n standard: new SkyThemeSpacing('standard', 'sky-theme-spacing-standard'),\n compact: new SkyThemeSpacing('compact', 'sky-theme-spacing-compact'),\n };\n\n /**\n * Creates a new theme spacing.\n * @param name The name of the theme spacing.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme spacing.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n\n /**\n * @internal\n * Serializes the theme spacing to a JSON-compatible object.\n */\n public serialize(): SkyThemeSpacingData {\n // Check if this instance is a preset\n const presetEntry = Object.entries(SkyThemeSpacing.presets).find(\n ([, preset]) => preset === this,\n );\n\n if (presetEntry) {\n return {\n name: this.name,\n isPreset: true,\n };\n }\n\n return {\n name: this.name,\n hostClass: this.hostClass,\n };\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyThemeSpacing instance.\n */\n public static deserialize(data: SkyThemeSpacingData): SkyThemeSpacing {\n if (data.isPreset) {\n const preset =\n SkyThemeSpacing.presets[\n data.name as keyof typeof SkyThemeSpacing.presets\n ];\n\n if (preset) {\n return preset;\n }\n\n throw new Error(`Unknown theme spacing preset: ${data.name}`);\n }\n\n if (!data.hostClass) {\n throw new Error('hostClass is required for non-preset theme spacing');\n }\n\n return new SkyThemeSpacing(data.name, data.hostClass);\n }\n}\n","import { SkyThemeMode } from './theme-mode';\nimport { SkyThemeData } from './theme-serialization-types';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Defines properties of a SKY UX theme.\n */\nexport class SkyTheme {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n default: new SkyTheme(\n 'default',\n 'sky-theme-default',\n [SkyThemeMode.presets.light],\n [SkyThemeSpacing.presets.standard],\n ),\n modern: new SkyTheme(\n 'modern',\n 'sky-theme-modern',\n [SkyThemeMode.presets.light, SkyThemeMode.presets.dark],\n [SkyThemeSpacing.presets.standard, SkyThemeSpacing.presets.compact],\n true,\n ),\n };\n\n /**\n * Creates a new theme.\n * @param name The name of the theme.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme.\n * @param supportedModes An array of modes supported by the theme.\n * @param supportedSpacing An array of spacing modes supported by the theme.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n public readonly supportedModes: SkyThemeMode[],\n public readonly supportedSpacing = [SkyThemeSpacing.presets.standard],\n public readonly supportsBranding = false,\n ) {}\n\n /**\n * @internal\n * Serializes the theme to a JSON-compatible object.\n */\n public serialize(): SkyThemeData {\n // Check if this instance is a preset\n const presetEntry = Object.entries(SkyTheme.presets).find(\n ([, preset]) => preset === this,\n );\n\n if (presetEntry) {\n return {\n name: this.name,\n supportedModes: this.supportedModes.map((mode) => mode.serialize()),\n isPreset: true,\n };\n }\n\n const result: SkyThemeData = {\n name: this.name,\n hostClass: this.hostClass,\n supportedModes: this.supportedModes.map((mode) => mode.serialize()),\n };\n\n // Only include supportedSpacing if it's not the default\n if (\n this.supportedSpacing.length !== 1 ||\n this.supportedSpacing[0] !== SkyThemeSpacing.presets.standard\n ) {\n result.supportedSpacing = this.supportedSpacing.map((spacing) =>\n spacing.serialize(),\n );\n }\n\n // Only include supportsBranding if it's true\n if (this.supportsBranding) {\n result.supportsBranding = this.supportsBranding;\n }\n\n return result;\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyTheme instance.\n */\n public static deserialize(data: SkyThemeData): SkyTheme {\n if (data.isPreset) {\n const preset =\n SkyTheme.presets[data.name as keyof typeof SkyTheme.presets];\n\n if (preset) {\n return preset;\n }\n\n throw new Error(`Unknown theme preset: ${data.name}`);\n }\n\n if (!data.hostClass) {\n throw new Error('hostClass is required for non-preset themes');\n }\n\n const supportedModes = data.supportedModes.map((modeData) =>\n SkyThemeMode.deserialize(modeData),\n );\n\n const supportedSpacing = data.supportedSpacing\n ? data.supportedSpacing.map((spacingData) =>\n SkyThemeSpacing.deserialize(spacingData),\n )\n : [SkyThemeSpacing.presets.standard];\n\n return new SkyTheme(\n data.name,\n data.hostClass,\n supportedModes,\n supportedSpacing,\n data.supportsBranding ?? false,\n );\n }\n}\n","import { SkyThemeBrandData } from './theme-serialization-types';\n\n/**\n * @internal\n * Defines properties of SKY UX theme branding.\n */\nexport class SkyThemeBrand {\n public get hostClass(): string {\n return this.#hostClass || this.#buildDefaultHostClassName();\n }\n\n private set hostClass(value: string | undefined) {\n this.#hostClass = value;\n }\n\n #hostClass: string | undefined;\n /**\n * Creates a new theme brand.\n * @param name The name of the theme brand.\n * @param version The version of the theme brand.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme brand. This defaults to `sky-theme-brand-<name>`\n * @param styleUrl The URL of the stylesheet to load for this brand\n * @param sriHash The subresource integrity hash for the stylesheet\n */\n constructor(\n public readonly name: string,\n public readonly version: string,\n hostClass?: string,\n public readonly styleUrl?: string,\n public readonly sriHash?: string,\n ) {\n this.hostClass = hostClass;\n\n if (!/^(\\d+|\\d+\\.\\d+\\.\\d+)(?:-(?:alpha|beta|rc)\\.\\d+)*$/.test(version)) {\n throw new Error(\n `Invalid version format \"${version}\" for theme brand \"${name}\".`,\n );\n }\n }\n\n /**\n * @internal\n * Serializes the theme brand to a JSON-compatible object.\n */\n public serialize(): SkyThemeBrandData {\n const result: SkyThemeBrandData = {\n name: this.name,\n version: this.version,\n };\n\n // Only include hostClass if it's different from the default\n const defaultHostClass = this.#buildDefaultHostClassName();\n\n if (this.hostClass !== defaultHostClass) {\n result.hostClass = this.hostClass;\n }\n\n // Include styleUrl and sriHash if they are provided\n if (this.styleUrl) {\n result.styleUrl = this.styleUrl;\n }\n\n if (this.sriHash) {\n result.sriHash = this.sriHash;\n }\n\n return result;\n }\n\n /**\n * @internal\n * Deserializes a JSON object to a SkyThemeBrand instance.\n */\n public static deserialize(data: SkyThemeBrandData): SkyThemeBrand {\n return new SkyThemeBrand(\n data.name,\n data.version,\n data.hostClass,\n data.styleUrl,\n data.sriHash,\n );\n }\n\n #buildDefaultHostClassName(): string {\n return `sky-theme-brand-${this.name}`;\n }\n}\n","import { SkyTheme } from './theme';\nimport { SkyThemeBrand } from './theme-brand';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettingsData } from './theme-serialization-types';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Specifies the theme and mode to be applied to a host element.\n */\nexport class SkyThemeSettings {\n /**\n * Creates a new SkyThemeSettings instance.\n * @param theme The theme configuration.\n * @param mode The theme mode.\n */\n constructor(\n public readonly theme: SkyTheme,\n public readonly mode: SkyThemeMode,\n public readonly spacing = SkyThemeSpacing.presets.standard,\n public readonly brand?: SkyThemeBrand,\n ) {}\n\n /**\n * Serializes the theme settings to a string.\n */\n public serialize(): string {\n const result: SkyThemeSettingsData = {\n theme: this.theme.serialize(),\n mode: this.mode.serialize(),\n };\n\n // Only include spacing if it's not the default\n if (this.spacing !== SkyThemeSpacing.presets.standard) {\n result.spacing = this.spacing.serialize();\n }\n\n // Only include brand if it exists\n if (this.brand) {\n result.brand = this.brand.serialize();\n }\n\n return JSON.stringify(result);\n }\n\n /**\n * Deserializes a string to a SkyThemeSettings instance.\n */\n public static deserialize(value: string): SkyThemeSettings {\n const settingsData = JSON.parse(value) as SkyThemeSettingsData;\n\n const theme = SkyTheme.deserialize(settingsData.theme);\n const mode = SkyThemeMode.deserialize(settingsData.mode);\n const spacing = settingsData.spacing\n ? SkyThemeSpacing.deserialize(settingsData.spacing)\n : SkyThemeSpacing.presets.standard;\n const brand = settingsData.brand\n ? SkyThemeBrand.deserialize(settingsData.brand)\n : undefined;\n\n return new SkyThemeSettings(theme, mode, spacing, brand);\n }\n}\n","import { Injectable, Renderer2 } from '@angular/core';\n\nimport { Observable, ReplaySubject } from 'rxjs';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeBrand } from './theme-brand';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeSettingsChange } from './theme-settings-change';\nimport { SkyThemeSpacing } from './theme-spacing';\n\nconst BRAND_BLACKBAUD = 'blackbaud';\n\nfunction assertCurrentSettings(\n currentSettings: SkyThemeSettings | undefined,\n): asserts currentSettings is SkyThemeSettings {\n if (!currentSettings) {\n throw new Error('Theme service is not initialized. Call init() first.');\n }\n}\n\n/**\n * Provides methods for updating and handling changes to the current theme.\n */\n@Injectable()\nexport class SkyThemeService {\n /**\n * Notifies consumers when the current theme settings have changed.\n */\n public get settingsChange(): Observable<SkyThemeSettingsChange> {\n return this.#_settingsObs;\n }\n\n #current: SkyThemeSettings | undefined;\n\n #brandLinkElement: HTMLLinkElement | undefined;\n\n #hostEl: any | undefined;\n\n #renderer: Renderer2 | undefined;\n\n #settings: ReplaySubject<SkyThemeSettingsChange>;\n\n #registeredBrands = new Map<string, SkyThemeBrand>();\n\n #_settingsObs: Observable<SkyThemeSettingsChange>;\n\n constructor() {\n this.#settings = new ReplaySubject<SkyThemeSettingsChange>(1);\n this.#_settingsObs = this.#settings.asObservable();\n }\n\n /**\n * Initializes the theme service with the specified parameters. This should only be called\n * from a host component that provides its own theme to child components.\n * @param hostEl The host element under which themed components are rendered.\n * @param renderer A Renderer2 instance for updating the host element with theme changes.\n * @param theme The initial theme.\n * @param registeredBrands An initial set of brands to register. Additional brands can\n * be registered later via the registerBrand() method.\n */\n public init(\n hostEl: any,\n renderer: Renderer2,\n theme: SkyThemeSettings,\n registeredBrands?: SkyThemeBrand[],\n ): void {\n this.#hostEl = hostEl;\n this.#renderer = renderer;\n\n if (registeredBrands) {\n for (const brand of registeredBrands) {\n this.#registeredBrands.set(brand.name, brand);\n }\n }\n\n this.setTheme(theme);\n }\n\n /**\n * Destroys the current theme service. This should only be called from a host component that\n * provides its own theme to child components.\n */\n public destroy(): void {\n this.#settings.complete();\n\n this.#hostEl = this.#renderer = undefined;\n }\n\n /**\n * Updates the current theme mode.\n * @param mode The new theme mode to apply.\n */\n public setThemeMode(mode: SkyThemeMode): void {\n this.#updateThemeProperty('mode', mode);\n }\n\n /**\n * Updates the current theme spacing.\n * @param spacing The new theme spacing to apply.\n */\n public setThemeSpacing(spacing: SkyThemeSpacing): void {\n this.#updateThemeProperty('spacing', spacing);\n }\n\n /**\n * Updates the current theme brand.\n * @param brand The new theme brand to apply, or undefined to clear the current brand.\n */\n public setThemeBrand(brand: SkyThemeBrand | undefined): void {\n this.#updateThemeProperty('brand', brand);\n }\n\n /**\n * Updates the current theme settings.\n * @param settings The new theme settings to apply.\n */\n public setTheme(settings: SkyThemeSettings): void;\n\n /**\n * Updates the current theme.\n * @param theme The new theme to apply.\n */\n public setTheme(theme: SkyTheme): void;\n\n public setTheme(settingsOrTheme: SkyThemeSettings | SkyTheme): void {\n let settings: SkyThemeSettings;\n\n if (settingsOrTheme instanceof SkyThemeSettings) {\n settings = this.#applyRegisteredBrand(settingsOrTheme);\n } else {\n const current = this.#current;\n\n assertCurrentSettings(current);\n\n settings = new SkyThemeSettings(\n settingsOrTheme,\n current.mode,\n current.spacing,\n settingsOrTheme.supportsBranding ? current.brand : undefined,\n );\n }\n\n const previous = this.#current;\n\n this.#applyThemeClass(previous, settings, 'theme');\n this.#applyThemeClass(previous, settings, 'mode', 'supportedModes');\n this.#applyThemeClass(previous, settings, 'spacing', 'supportedSpacing');\n this.#applyThemeClass(previous, settings, 'brand');\n\n this.#settings.next({\n currentSettings: settings,\n previousSettings: previous,\n });\n\n this.#current = settings;\n }\n\n public registerBrand(brand: SkyThemeBrand): void {\n this.#registeredBrands.set(brand.name, brand);\n }\n\n public unregisterBrand(name: string): void {\n this.#registeredBrands.delete(name);\n }\n\n #applyRegisteredBrand(settings: SkyThemeSettings): SkyThemeSettings {\n const brandName = settings.brand?.name;\n\n if (brandName) {\n const registeredBrand = this.#registeredBrands.get(brandName);\n\n if (registeredBrand) {\n settings = new SkyThemeSettings(\n settings.theme,\n settings.mode,\n settings.spacing,\n registeredBrand,\n );\n }\n }\n\n return settings;\n }\n\n #updateThemeProperty(\n property: 'mode' | 'spacing' | 'brand',\n value: SkyThemeMode | SkyThemeSpacing | SkyThemeBrand | undefined,\n ): void {\n const current = this.#current;\n\n assertCurrentSettings(current);\n\n const currentTheme = current.theme;\n\n let supportedValues: SkyThemeMode[] | SkyThemeSpacing[] | undefined =\n undefined;\n\n switch (property) {\n case 'mode':\n supportedValues = currentTheme.supportedModes;\n break;\n case 'spacing':\n supportedValues = currentTheme.supportedSpacing;\n break;\n default:\n }\n\n if (supportedValues && value && !supportedValues.includes(value)) {\n throw new Error(\n `The current theme does not support the specified ${property}.`,\n );\n }\n\n const updatedSettings = {\n theme: current.theme,\n mode: current.mode,\n spacing: current.spacing,\n brand: current.brand,\n [property]: value,\n };\n\n this.setTheme(\n new SkyThemeSettings(\n updatedSettings.theme,\n updatedSettings.mode,\n updatedSettings.spacing,\n updatedSettings.brand,\n ),\n );\n }\n\n #applyThemeClass(\n previous: SkyThemeSettings | undefined,\n current: SkyThemeSettings,\n prop: 'theme' | 'mode' | 'spacing' | 'brand',\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n const currentSetting = current[prop];\n const previousClass = previous?.[prop]?.hostClass;\n const currentClass = currentSetting?.hostClass;\n\n if (!previousClass || previousClass !== currentClass) {\n this.#updateHostClass(\n prop,\n previousClass,\n currentClass,\n currentSetting,\n current,\n supportedProp,\n );\n\n if (prop === 'brand') {\n if (!current.theme.supportsBranding && currentSetting) {\n throw new Error('Branding is not supported for the given theme.');\n }\n\n this.#updateBrandStylesheet(current.brand, previous?.brand);\n }\n }\n }\n\n #updateBrandStylesheet(\n currentBrand: SkyThemeBrand | undefined,\n previousBrand: SkyThemeBrand | undefined,\n ): void {\n if (previousBrand && previousBrand.name !== BRAND_BLACKBAUD) {\n this.#removeBrandStylesheet();\n }\n\n if (currentBrand && currentBrand.name !== BRAND_BLACKBAUD) {\n this.#addBrandStylesheet(currentBrand);\n }\n }\n\n #updateHostClass(\n prop: 'theme' | 'mode' | 'spacing' | 'brand',\n previousClass: string | undefined,\n currentClass: string | undefined,\n currentSetting:\n | SkyTheme\n | SkyThemeMode\n | SkyThemeSpacing\n | SkyThemeBrand\n | undefined,\n current: SkyThemeSettings,\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n if (previousClass) {\n this.#removeHostClass(previousClass);\n }\n\n if (prop === 'brand') {\n if (currentClass && !previousClass) {\n this.#addHostClass('sky-theme-brand-base');\n } else if (!currentClass && previousClass) {\n this.#removeHostClass('sky-theme-brand-base');\n }\n }\n\n if (\n currentClass &&\n this.#isSupportedProperty(currentSetting, current, supportedProp)\n ) {\n this.#addHostClass(currentClass);\n }\n }\n\n #addBrandStylesheet(brand: SkyThemeBrand): void {\n if (brand.name !== BRAND_BLACKBAUD) {\n // Use styleUrl if provided, otherwise build the default URL\n const styleUrl =\n brand.styleUrl ||\n `https://sky.blackbaudcdn.net/static/skyux-brand-${brand.name}/${brand.version}/assets/scss/${brand.name}.css`;\n\n const renderer = this.#getRenderer();\n\n this.#brandLinkElement = renderer.createElement(\n 'link',\n ) as HTMLLinkElement;\n\n renderer.appendChild(this.#hostEl, this.#brandLinkElement);\n\n renderer.setAttribute(this.#brandLinkElement, 'rel', 'stylesheet');\n renderer.setAttribute(this.#brandLinkElement, 'href', styleUrl);\n\n if (brand.sriHash) {\n renderer.setAttribute(\n this.#brandLinkElement,\n 'integrity',\n brand.sriHash,\n );\n\n renderer.setAttribute(\n this.#brandLinkElement,\n 'crossorigin',\n 'anonymous',\n );\n }\n }\n }\n\n #removeBrandStylesheet(): void {\n if (this.#brandLinkElement) {\n this.#getRenderer().removeChild(this.#hostEl, this.#brandLinkElement);\n this.#brandLinkElement = undefined;\n }\n }\n\n #addHostClass(className: string): void {\n this.#getRenderer().addClass(this.#hostEl, className);\n }\n\n #removeHostClass(className: string): void {\n this.#getRenderer().removeClass(this.#hostEl, className);\n }\n\n #getRenderer(): Renderer2 {\n if (!this.#renderer) {\n throw new Error(\n 'Renderer is not initialized. Have you called the theme service `init` method?',\n );\n }\n return this.#renderer;\n }\n\n #isSupportedProperty(\n currentSetting:\n | SkyTheme\n | SkyThemeMode\n | SkyThemeSpacing\n | SkyThemeBrand\n | undefined,\n current: SkyThemeSettings,\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): boolean {\n return (\n !supportedProp ||\n ((currentSetting instanceof SkyThemeMode ||\n currentSetting instanceof SkyThemeSpacing) &&\n current.theme[supportedProp].includes(currentSetting))\n );\n }\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport FontFaceObserver from 'fontfaceobserver';\nimport { take } from 'rxjs/operators';\n\nimport { SkyThemeService } from './theming/theme.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppStyleLoader {\n public static readonly LOAD_TIMEOUT = 3000;\n public isLoaded = false;\n\n #themeSvc: SkyThemeService | undefined;\n\n constructor(@Optional() themeSvc?: SkyThemeService) {\n this.#themeSvc = themeSvc;\n }\n\n public loadStyles(): Promise<any> {\n if (this.isLoaded) {\n return Promise.resolve();\n }\n\n let themePromise: Promise<any>;\n\n if (this.#themeSvc) {\n themePromise = this.#themeSvc.settingsChange.pipe(take(1)).toPromise();\n } else {\n themePromise = Promise.resolve();\n }\n\n const fontAwesome = new FontFaceObserver('FontAwesome');\n const skyuxIcons = new FontFaceObserver('skyux-icons');\n const blackbaudSans = new FontFaceObserver('BLKB Sans');\n\n return Promise.all([\n // Specify a character for FontAwesome since some browsers will fail to detect\n // when the font is loaded unless a known character with a different width\n // than the default is not specified.\n fontAwesome.load('\\uf0fc', SkyAppStyleLoader.LOAD_TIMEOUT),\n skyuxIcons.load('\\ue999', SkyAppStyleLoader.LOAD_TIMEOUT),\n blackbaudSans.load(undefined, SkyAppStyleLoader.LOAD_TIMEOUT),\n themePromise,\n ])\n .then(() => {\n this.isLoaded = true;\n })\n .catch((error) => {\n // Errors loading the font should not stop the page from rendering.\n // Passing the error along in case the client wants to do something with it.\n return Promise.resolve({\n error,\n });\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\ntype SkyThemeClassMap = Record<string, string>;\n\n/**\n * Component to add classes conditionally based on the current theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeClass]',\n standalone: false,\n})\nexport class SkyThemeClassDirective implements OnDestroy {\n /**\n * The HTML class attribute.\n *\n * @param value\n */\n @Input()\n public set class(value: string | undefined) {\n this.#removeInitialClasses(this.#initialClasses);\n this.#initialClasses = typeof value === 'string' ? value.split(/\\s+/) : [];\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n /**\n * An object with class names in a string for keys, and theme names (e.g. 'default' or 'modern') as values.\n *\n * @param value\n */\n @Input()\n public set skyThemeClass(value: SkyThemeClassMap | undefined) {\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n\n this.#skyThemeClassMap = value as SkyThemeClassMap;\n\n /* istanbul ignore else */\n if (this.#skyThemeClassMap) {\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n }\n\n set #themeSettings(settings: SkyThemeSettings) {\n this.#currentTheme = settings;\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #initialClasses: string[] = [];\n #skyThemeClassMap: SkyThemeClassMap | undefined;\n\n #ngEl: ElementRef;\n #renderer: Renderer2;\n\n constructor(\n ngEl: ElementRef,\n renderer: Renderer2,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#ngEl = ngEl;\n this.#renderer = renderer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#themeSettings = settingsChange.currentSettings;\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #applyInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, true));\n }\n }\n\n #applySkyThemeClassMap(skyThemeClassMap: SkyThemeClassMap | undefined): void {\n if (skyThemeClassMap) {\n const themeName = this.#currentTheme?.theme.name || 'default';\n Object.keys(skyThemeClassMap).forEach((className) => {\n const enabled = themeName === skyThemeClassMap[className];\n this.#toggleClass(className, enabled);\n });\n }\n }\n\n #removeInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, false));\n }\n }\n\n #removeSkyThemeClassMap(\n skyThemeClassMap: SkyThemeClassMap | undefined,\n ): void {\n if (skyThemeClassMap) {\n Object.keys(skyThemeClassMap).forEach((className) =>\n this.#toggleClass(className, false),\n );\n }\n }\n\n #toggleClass(className: string, enabled: boolean): void {\n className = className.trim();\n /* istanbul ignore else */\n if (className) {\n className.split(/\\s+/g).forEach((classNameItem) => {\n if (enabled) {\n this.#renderer.addClass(this.#ngEl.nativeElement, classNameItem);\n } else {\n this.#renderer.removeClass(this.#ngEl.nativeElement, classNameItem);\n }\n });\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Input,\n OnDestroy,\n Optional,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\n/**\n * Component that works like `ngIf` to show markup for matching theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeIf]',\n standalone: false,\n})\nexport class SkyThemeIfDirective implements OnDestroy {\n /**\n * A string that should match the name of a theme, `'default'` or `'modern'`.\n *\n * @param value\n */\n @Input()\n public set skyThemeIf(value: 'default' | 'modern' | undefined) {\n this.#context = value;\n this.#updateView();\n }\n\n #context: string | undefined;\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #hasView = false;\n\n #templateRef: TemplateRef<unknown>;\n #viewContainer: ViewContainerRef;\n\n constructor(\n templateRef: TemplateRef<unknown>,\n viewContainer: ViewContainerRef,\n changeDetector: ChangeDetectorRef,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#templateRef = templateRef;\n this.#viewContainer = viewContainer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#currentTheme = settingsChange.currentSettings;\n this.#updateView();\n\n // Components that use OnPush change detection will not automatically\n // check for changes when created as a result of a theme change if\n // it happens outside of an Angular change detection cycle. This\n // ensures change detection runs on those components.\n changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #updateView(): void {\n const themeName = this.#currentTheme?.theme.name || 'default';\n const condition = this.#context && themeName === this.#context;\n if (condition && !this.#hasView) {\n this.#viewContainer.createEmbeddedView(this.#templateRef);\n this.#hasView = true;\n } else if (!condition && this.#hasView) {\n this.#viewContainer.clear();\n this.#hasView = false;\n }\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\nconst defaultTheme = new SkyThemeSettings(\n SkyTheme.presets.default,\n SkyThemeMode.presets.light,\n);\n\n/**\n * Creates a new instance of `SkyThemeService` to allow a container\n * to have its own theme.\n */\n@Directive({\n selector: '[skyTheme]',\n providers: [SkyThemeService],\n standalone: false,\n})\nexport class SkyThemeDirective implements OnInit, OnDestroy {\n @Input()\n public set skyTheme(value: SkyThemeSettings | undefined) {\n this.skyThemeOrDefault = value || defaultTheme;\n\n if (this.#initialized) {\n this.#themeSvc.setTheme(this.skyThemeOrDefault);\n }\n }\n\n public skyThemeOrDefault = defaultTheme;\n\n #initialized = false;\n\n #elRef: ElementRef;\n #renderer: Renderer2;\n #themeSvc: SkyThemeService;\n\n constructor(\n elRef: ElementRef,\n renderer: Renderer2,\n themeSvc: SkyThemeService,\n ) {\n this.#elRef = elRef;\n this.#renderer = renderer;\n this.#themeSvc = themeSvc;\n }\n\n public ngOnInit(): void {\n this.#themeSvc.init(\n this.#elRef.nativeElement,\n this.#renderer,\n this.skyThemeOrDefault,\n );\n\n this.#initialized = true;\n }\n\n public ngOnDestroy(): void {\n this.#themeSvc.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyThemeClassDirective } from './theming/theme-class.directive';\nimport { SkyThemeIfDirective } from './theming/theme-if.directive';\nimport { SkyThemeDirective } from './theming/theme.directive';\n\n@NgModule({\n declarations: [\n SkyThemeClassDirective,\n SkyThemeDirective,\n SkyThemeIfDirective,\n ],\n exports: [SkyThemeClassDirective, SkyThemeDirective, SkyThemeIfDirective],\n})\nexport class SkyThemeModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n HostBinding,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { SkyThemeService } from '../theming/theme.service';\n\n@Directive({\n selector: '[skyThemeClass]',\n standalone: true,\n})\nexport class SkyThemeComponentClassDirective {\n @HostBinding('class')\n public theme = 'sky-cmp-theme-default';\n\n #changeDetector = inject(ChangeDetectorRef);\n #themeService = inject(SkyThemeService, { optional: true });\n\n constructor() {\n this.#themeService?.settingsChange\n .pipe(takeUntilDestroyed())\n .subscribe((change) => {\n this.theme = `sky-cmp-theme-${change.currentSettings.theme.name}`;\n this.#changeDetector.markForCheck();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, NgZone, inject } from '@angular/core';\n\nimport { ReplaySubject } from 'rxjs';\n\nimport { SkyAppViewportReserveArgs } from './viewport-reserve-args';\nimport { SkyAppViewportReservedPositionType } from './viewport-reserve-position-type';\n\ntype ReserveItemType = SkyAppViewportReserveArgs & {\n active: boolean;\n};\n\n/**\n * Provides information about the state of the application's viewport.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppViewportService {\n /**\n * Updated when the viewport becomes visible. While the page is rendered, the\n * viewport may remain hidden as fonts and styles are loaded asynchronously;\n * this is done to avoid a FOUC (Flash Of Unstyled Content) before the fonts\n * and styles are ready.\n */\n public visible = new ReplaySubject<boolean>(1);\n\n // ESLint doesn't recognize how this is used.\n #updateRequest: number | undefined = undefined;\n readonly #reserveItems = new Map<string, ReserveItemType>();\n readonly #conditionallyReserveItems = new Map<Element, ReserveItemType>();\n readonly #document = inject(DOCUMENT);\n readonly #ngZone = inject(NgZone);\n // Observe elements crossing the browser's viewport boundaries.\n readonly #intersectionObserver = this.#ngZone.runOutsideAngular(\n () =>\n new IntersectionObserver(\n () => this.#ngZone.run(() => this.#updateViewportArea()),\n { threshold: Array.from({ length: 101 }, (_, i) => i / 100) },\n ),\n );\n #reservedSpaces: Record<SkyAppViewportReservedPositionType, number> = {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n constructor() {\n const onScroll = (): void => {\n if (this.#conditionallyReserveItems.size > 0) {\n this.#updateViewportArea();\n }\n };\n this.#document.addEventListener('scroll', onScroll);\n inject(DestroyRef).onDestroy(() => {\n /* istanbul ignore next */\n if (this.#updateRequest !== undefined) {\n cancelAnimationFrame(this.#updateRequest);\n }\n this.#intersectionObserver.disconnect();\n this.#document.removeEventListener('scroll', onScroll);\n });\n }\n\n /**\n * Reserves space for components docked to the left, top, right, or bottom of the viewport.\n * @param args\n */\n public reserveSpace(args: SkyAppViewportReserveArgs): void {\n const item = {\n ...args,\n active: this.#isElementVisible({ ...args, active: false }),\n };\n this.#reserveItems.set(args.id, item);\n this.#watchVisibility(item);\n this.#updateViewportArea();\n }\n\n /**\n * Removes reserved space for a component by the ID provided when it was reserved.\n * @param id\n */\n public unreserveSpace(id: string): void {\n const args = this.#reserveItems.get(id);\n if (args?.reserveForElement) {\n this.#intersectionObserver.unobserve(args.reserveForElement);\n this.#conditionallyReserveItems.delete(args.reserveForElement);\n }\n this.#reserveItems.delete(id);\n this.#updateViewportArea();\n }\n\n #updateViewportArea(): void {\n this.#updateRequest ??= requestAnimationFrame(() => {\n this.#updateRequest = undefined;\n const reservedSpaces: Record<SkyAppViewportReservedPositionType, number> =\n {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n for (const args of this.#reserveItems.values()) {\n args.active = this.#isElementVisible(args, reservedSpaces);\n if (args.active) {\n reservedSpaces[args.position] += args.size;\n }\n }\n\n this.#reservedSpaces = reservedSpaces;\n const documentElementStyle = this.#document.documentElement.style;\n\n for (const [position, size] of Object.entries(reservedSpaces)) {\n documentElementStyle.setProperty(\n `--sky-viewport-${position}`,\n size + 'px',\n );\n }\n });\n }\n\n #watchVisibility(item: ReserveItemType): void {\n if (item.reserveForElement) {\n this.#conditionallyReserveItems.set(item.reserveForElement, item);\n this.#intersectionObserver.observe(item.reserveForElement);\n }\n }\n\n #isElementVisible(\n args: ReserveItemType,\n reservedSpaces: Record<SkyAppViewportReservedPositionType, number> = this\n .#reservedSpaces,\n ): boolean {\n if (!args.reserveForElement) {\n return true;\n }\n const rect = args.reserveForElement.getBoundingClientRect();\n if (!rect || !rect.height || !rect.width) {\n return false;\n }\n const midpoint = {\n x: rect.x + Math.floor(rect.width / 2),\n y: rect.y + Math.floor(rect.height / 2),\n };\n if (\n // Vertically in view\n midpoint.y <= window.innerHeight &&\n midpoint.y >= 0 &&\n // Horizontally in view\n midpoint.x <= window.innerWidth &&\n midpoint.x >= 0\n ) {\n // Element is not hidden by another element\n if (\n args.reserveForElement.contains(\n this.#document.elementFromPoint(midpoint.x, midpoint.y),\n )\n ) {\n return true;\n }\n\n // Check if the item's midpoint is visible based on current reserved spaces.\n // Assumes reserved spaces are intended to be additive and not overlapping.\n const threshold = reservedSpaces[args.position];\n switch (args.position) {\n case 'top':\n return midpoint.y >= threshold;\n case 'right':\n return midpoint.x <= window.innerWidth - threshold;\n case 'bottom':\n return midpoint.y <= window.innerHeight - threshold;\n case 'left':\n return midpoint.x >= threshold;\n }\n }\n return false;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n EnvironmentProviders,\n RendererFactory2,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer,\n} from '@angular/core';\n\nimport { SkyTheme } from '../theming/theme';\nimport { SkyThemeMode } from '../theming/theme-mode';\nimport { SkyThemeSettings } from '../theming/theme-settings';\nimport { SkyThemeSpacing } from '../theming/theme-spacing';\nimport { SkyThemeService } from '../theming/theme.service';\n\nexport function provideInitialTheme(\n name: keyof typeof SkyTheme.presets = 'default',\n options?: {\n mode?: keyof typeof SkyThemeMode.presets;\n spacing?: keyof typeof SkyThemeSpacing.presets;\n },\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n SkyThemeService,\n provideAppInitializer(() => {\n const initializerFn = ((\n themeService: SkyThemeService,\n doc: Document,\n rendererFactory: RendererFactory2,\n ) => {\n return (): void => {\n themeService.init(\n doc.body,\n rendererFactory.createRenderer(null, null),\n new SkyThemeSettings(\n SkyTheme.presets[name],\n SkyThemeMode.presets[options?.mode ?? 'light'],\n SkyThemeSpacing.presets[options?.spacing ?? 'standard'],\n ),\n );\n };\n })(inject(SkyThemeService), inject(DOCUMENT), inject(RendererFactory2));\n return initializerFn();\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyThemeService"],"mappings":"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"}
@@ -44,9 +44,9 @@ export declare class SkyThemeService {
44
44
  setThemeSpacing(spacing: SkyThemeSpacing): void;
45
45
  /**
46
46
  * Updates the current theme brand.
47
- * @param brand The new theme brand to apply.
47
+ * @param brand The new theme brand to apply, or undefined to clear the current brand.
48
48
  */
49
- setThemeBrand(brand: SkyThemeBrand): void;
49
+ setThemeBrand(brand: SkyThemeBrand | undefined): void;
50
50
  /**
51
51
  * Updates the current theme settings.
52
52
  * @param settings The new theme settings to apply.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux/theme",
3
- "version": "12.30.0",
3
+ "version": "12.32.0",
4
4
  "author": "Blackbaud, Inc.",
5
5
  "keywords": [
6
6
  "blackbaud",
@@ -20,7 +20,7 @@
20
20
  "@angular/core": "^19.2.14"
21
21
  },
22
22
  "dependencies": {
23
- "@blackbaud/skyux-design-tokens": "2.0.0-alpha.10",
23
+ "@blackbaud/skyux-design-tokens": "2.0.0-alpha.15",
24
24
  "@skyux/icons": "9.0.0",
25
25
  "fontfaceobserver": "2.3.0",
26
26
  "tslib": "^2.8.1"