@fundamental-ngx/core 0.35.2-rc.6 → 0.35.2-rc.7

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.
Files changed (98) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/date-picker/package.json +1 -1
  16. package/datetime/package.json +1 -1
  17. package/datetime-picker/package.json +1 -1
  18. package/dialog/package.json +1 -1
  19. package/dynamic-page/package.json +1 -1
  20. package/dynamic-side-content/package.json +1 -1
  21. package/esm2020/theming/theming.service.mjs +1 -1
  22. package/facets/package.json +1 -1
  23. package/feed-input/package.json +1 -1
  24. package/feed-list-item/package.json +1 -1
  25. package/fesm2015/fundamental-ngx-core-theming.mjs.map +1 -1
  26. package/fesm2020/fundamental-ngx-core-theming.mjs.map +1 -1
  27. package/file-uploader/package.json +1 -1
  28. package/fixed-card-layout/package.json +1 -1
  29. package/flexible-column-layout/package.json +1 -1
  30. package/form/package.json +1 -1
  31. package/formatted-text/package.json +1 -1
  32. package/grid-list/package.json +1 -1
  33. package/icon/package.json +1 -1
  34. package/illustrated-message/package.json +1 -1
  35. package/infinite-scroll/package.json +1 -1
  36. package/info-label/package.json +1 -1
  37. package/inline-help/package.json +1 -1
  38. package/input-group/package.json +1 -1
  39. package/layout-grid/package.json +1 -1
  40. package/layout-panel/package.json +1 -1
  41. package/link/package.json +1 -1
  42. package/list/package.json +1 -1
  43. package/menu/package.json +1 -1
  44. package/message-box/package.json +1 -1
  45. package/message-strip/package.json +1 -1
  46. package/message-toast/package.json +1 -1
  47. package/micro-process-flow/package.json +1 -1
  48. package/mobile-mode/package.json +1 -1
  49. package/multi-input/package.json +1 -1
  50. package/nested-list/package.json +1 -1
  51. package/notification/package.json +1 -1
  52. package/object-identifier/package.json +1 -1
  53. package/object-marker/package.json +1 -1
  54. package/object-number/package.json +1 -1
  55. package/object-status/package.json +1 -1
  56. package/overflow-layout/package.json +12 -12
  57. package/package.json +1 -1
  58. package/pagination/package.json +1 -1
  59. package/panel/package.json +1 -1
  60. package/popover/package.json +1 -1
  61. package/product-switch/package.json +1 -1
  62. package/progress-indicator/package.json +1 -1
  63. package/quick-view/package.json +1 -1
  64. package/radio/package.json +1 -1
  65. package/rating-indicator/package.json +1 -1
  66. package/resizable-card-layout/package.json +1 -1
  67. package/scroll-spy/package.json +1 -1
  68. package/scrollbar/package.json +1 -1
  69. package/segmented-button/package.json +1 -1
  70. package/select/package.json +1 -1
  71. package/shared/package.json +1 -1
  72. package/shellbar/package.json +1 -1
  73. package/side-navigation/package.json +1 -1
  74. package/slider/package.json +1 -1
  75. package/split-button/package.json +1 -1
  76. package/splitter/package.json +1 -1
  77. package/status-indicator/package.json +1 -1
  78. package/step-input/package.json +1 -1
  79. package/switch/package.json +1 -1
  80. package/table/package.json +1 -1
  81. package/tabs/package.json +1 -1
  82. package/text/package.json +1 -1
  83. package/theming/esm2020/theming.service.mjs +1 -1
  84. package/theming/fesm2015/fundamental-ngx-core-theming.mjs.map +1 -1
  85. package/theming/fesm2020/fundamental-ngx-core-theming.mjs.map +1 -1
  86. package/theming/package.json +1 -1
  87. package/tile/package.json +1 -1
  88. package/time/package.json +1 -1
  89. package/time-picker/package.json +1 -1
  90. package/timeline/package.json +1 -1
  91. package/title/package.json +1 -1
  92. package/token/package.json +1 -1
  93. package/toolbar/package.json +1 -1
  94. package/tree/package.json +1 -1
  95. package/upload-collection/package.json +1 -1
  96. package/utils/package.json +1 -1
  97. package/vertical-navigation/package.json +1 -1
  98. package/wizard/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-theming.mjs","sources":["../../../../../libs/core/src/lib/theming/config.ts","../../../../../libs/core/src/lib/theming/standard-themes.ts","../../../../../libs/core/src/lib/theming/tokens.ts","../../../../../libs/core/src/lib/theming/theming.service.ts","../../../../../libs/core/src/lib/theming/theming.module.ts","../../../../../libs/core/src/lib/theming/fundamental-ngx-core-theming.ts"],"sourcesContent":["import { ThemeDefinition, ThemeStyleLink } from './interfaces/theme.interface';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\n/**\n * Theming Configuration.\n */\nexport class BaseThemingConfig implements ThemingConfig {\n /**\n * Array of user-defined themes.\n */\n customThemes: ThemeDefinition[] = [];\n /**\n * Default theme.\n */\n defaultTheme = 'sap_fiori_3';\n /**\n * Default theme font file. Used as a fallback for themes which do not have own font file.\n */\n defaultFontFile = 'sap_fiori_3';\n /**\n * Whether to exclude default themes from the list of available options. By default, false.\n */\n excludeDefaultThemes = false;\n /**\n * Whether to exclude theme font file from inserting it onto the page. By default, false.\n */\n excludeThemingFonts = false;\n /**\n * URL Query parameter flag to change theme based on the provided parameter.\n */\n themeQueryParam = 'theme';\n /**\n * Whether to change theme if URL Query parameter flag has been found or changed. Default is true.\n */\n changeThemeOnQueryParamChange = true;\n /**\n * Identifiers of theme style links.\n */\n themeStyleLinkIdentifiers: Record<ThemeStyleLink, string> = {\n 'base-theme': 'base-theme-styles',\n 'custom-theme': 'custom-theme-styles',\n fonts: 'theme-font-styles'\n };\n}\n","import { ThemeDefinition } from './interfaces/theme.interface';\n\nexport const STANDARD_THEMES: ThemeDefinition[] = [\n {\n id: 'sap_fiori_3',\n name: 'Fiori 3',\n description: 'Use in regular office environment'\n },\n {\n id: 'sap_fiori_3_dark',\n name: 'Fiori 3 Dark',\n description: 'Use in dimmed environments'\n },\n {\n id: 'sap_fiori_3_hcb',\n name: 'High Contrast Black',\n description: 'Optimized contrast and accessibility for extremely bright environments'\n },\n {\n id: 'sap_fiori_3_hcw',\n name: 'High Contrast White',\n description: 'Optimized contrast and accessibility for extremely dark environments'\n },\n {\n id: 'sap_fiori_3_light_dark',\n name: 'Light Dark'\n },\n {\n id: 'sap_horizon',\n name: 'Morning Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_dark',\n name: 'Evening Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcb',\n name: 'High Contrast Black Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcw',\n name: 'High Contrast White Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\nexport const THEMING_CONFIG_TOKEN = new InjectionToken<Partial<ThemingConfig>>('FdThemingConfig');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { THEME_SWITCHER_ROUTER_MISSING_ERROR } from '@fundamental-ngx/core/utils';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { STANDARD_THEMES } from './standard-themes';\nimport {\n CompleteThemeDefinition,\n CompleteThemingResource,\n ThemeDefinition,\n ThemeStyleLink\n} from './interfaces/theme.interface';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@Injectable()\nexport class ThemingService implements OnDestroy {\n /** @hidden */\n private readonly config = new BaseThemingConfig();\n\n /**\n * Current theme applied to the application.\n */\n get currentTheme(): Observable<CompleteThemeDefinition | null> {\n return this._currentThemeSubject.asObservable();\n }\n\n /** @hidden */\n private readonly _renderer: Renderer2;\n\n /** @hidden */\n private readonly _availableThemes: Map<string, CompleteThemeDefinition>;\n\n /** @hidden */\n private readonly _standardThemes: ThemeDefinition[] = [];\n\n /** @hidden **/\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _currentTheme: CompleteThemeDefinition;\n\n /** @hidden */\n private readonly _currentThemeSubject: BehaviorSubject<CompleteThemeDefinition | null> =\n new BehaviorSubject<CompleteThemeDefinition | null>(null);\n\n /**\n * @hidden\n */\n constructor(\n private _rendererFactory: RendererFactory2,\n @Inject(DOCUMENT) private _document: Document,\n @Optional() private _activatedRoute: ActivatedRoute,\n @Optional()\n @Inject(THEMING_CONFIG_TOKEN)\n private readonly _providedConfig: Partial<ThemingConfig>\n ) {\n this.config = merge(cloneDeep(this.config), cloneDeep(this._providedConfig));\n\n this._renderer = this._rendererFactory.createRenderer(this._document, null);\n\n if (!this.config.excludeDefaultThemes) {\n this._standardThemes = STANDARD_THEMES;\n }\n\n const mergedThemes = this._formatProvidedThemes(this.config.customThemes);\n this._availableThemes = new Map<string, CompleteThemeDefinition>(\n mergedThemes.map((theme) => [theme.id, theme])\n );\n }\n\n /**\n * Initiates theme change based on query parameter or provided default theme in config.\n */\n init(): void {\n if (this.config.changeThemeOnQueryParamChange) {\n this._setThemeByRoute();\n } else {\n this.setTheme(this.config.defaultTheme);\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /**\n * Sets defined theme.\n * @param themeId ID of theme that needs to be used by the application.\n */\n setTheme(themeId: string): boolean {\n const theme = this._availableThemes.get(themeId);\n\n if (!theme) {\n console.warn(\n `Theme with ID '${themeId}' is not found. Please check if ID is correct or provide custom theme for ThemingModule.`\n );\n return false;\n }\n\n this._setThemeResource('base-theme', theme.theming.themingBasePath);\n this._setThemeResource('custom-theme', theme.theming.themePath);\n\n if (!this.config.excludeThemingFonts) {\n this._setThemeResource('fonts', theme.theming.themeFontPath);\n }\n this._currentTheme = theme;\n this._currentThemeSubject.next(theme);\n\n return true;\n }\n\n /**\n * Returns array of available themes.\n */\n getThemes(): CompleteThemeDefinition[] {\n return [...this._availableThemes].map((entry) => entry[1]);\n }\n\n /**\n * @hidden\n * @param type\n * @param resourceUrl\n * @private\n */\n private _setThemeResource(type: ThemeStyleLink, resourceUrl: string): void {\n const linkElm = this._getStyleLinkElement(type);\n\n if (linkElm.getAttribute('href') === resourceUrl) {\n return;\n }\n\n this._renderer.setAttribute(linkElm, 'href', resourceUrl);\n }\n\n /**\n * @hidden\n * @param type\n * @private\n */\n private _getStyleLinkElement(type: ThemeStyleLink): HTMLLinkElement {\n const existingLinkElement = this._document.getElementById(this.config.themeStyleLinkIdentifiers[type]);\n\n if (existingLinkElement) {\n return existingLinkElement as HTMLLinkElement;\n }\n\n const newLinkElement = this._renderer.createElement('link');\n this._renderer.setAttribute(newLinkElement, 'rel', 'stylesheet');\n this._renderer.setAttribute(newLinkElement, 'id', this.config.themeStyleLinkIdentifiers[type]);\n this._renderer.appendChild(this._document.head, newLinkElement);\n\n return newLinkElement;\n }\n\n /**\n * @hidden\n * @param themes\n * @private\n */\n private _formatProvidedThemes(themes?: ThemeDefinition[]): CompleteThemeDefinition[] {\n themes = themes || [];\n const mergedThemes = [...this._standardThemes, ...themes];\n\n if (mergedThemes.length === 0 && isDevMode()) {\n console.error('Error. No themes were provided. Please check your configuration.');\n }\n\n return mergedThemes.map((theme) => {\n theme.theming = this._getThemingResourceConfig(theme);\n return theme;\n }) as CompleteThemeDefinition[];\n }\n\n /** @hidden */\n private _getThemingResourceConfig(theme: ThemeDefinition): CompleteThemingResource {\n const existingConfig = theme.theming || {};\n const defaultConfig: CompleteThemingResource = {\n themingBasePath: `assets/theming-base/${theme.id}/css_variables.css`,\n themePath: `assets/fundamental-styles-theming/${theme.id}.css`,\n themeFontPath: `${this.config.defaultFontFile}_fonts.css`\n };\n\n return Object.assign(defaultConfig, existingConfig);\n }\n\n /** @hidden */\n private _getNativeParameterByName(paramName: string): string {\n paramName = paramName.replace(/[[\\\\\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(window.location.href);\n if (!results || !results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n /**\n * @hidden\n * Set theme according to additional URL parameter.\n * This parameter can be changed in function argument.\n **/\n private _setThemeByRoute(): void {\n const paramName = this.config.themeQueryParam;\n\n if (!this._activatedRoute) {\n throw new Error(THEME_SWITCHER_ROUTER_MISSING_ERROR);\n }\n\n this._activatedRoute.queryParams\n .pipe(\n takeUntil(this._onDestroy$),\n filter((param) => param && param[paramName])\n )\n .subscribe((param) => this.setTheme(param[paramName]));\n\n const nativeTheme = this._getNativeParameterByName(paramName) || this.config.defaultTheme;\n this.setTheme(nativeTheme);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { ThemingService } from './theming.service';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@NgModule({\n imports: [CommonModule],\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: new BaseThemingConfig()\n },\n ThemingService\n ]\n})\nexport class ThemingModule {\n static withConfig(config: Partial<ThemingConfig>): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-theming.mjs","sources":["../../../../../libs/core/src/lib/theming/config.ts","../../../../../libs/core/src/lib/theming/standard-themes.ts","../../../../../libs/core/src/lib/theming/tokens.ts","../../../../../libs/core/src/lib/theming/theming.service.ts","../../../../../libs/core/src/lib/theming/theming.module.ts","../../../../../libs/core/src/lib/theming/fundamental-ngx-core-theming.ts"],"sourcesContent":["import { ThemeDefinition, ThemeStyleLink } from './interfaces/theme.interface';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\n/**\n * Theming Configuration.\n */\nexport class BaseThemingConfig implements ThemingConfig {\n /**\n * Array of user-defined themes.\n */\n customThemes: ThemeDefinition[] = [];\n /**\n * Default theme.\n */\n defaultTheme = 'sap_fiori_3';\n /**\n * Default theme font file. Used as a fallback for themes which do not have own font file.\n */\n defaultFontFile = 'sap_fiori_3';\n /**\n * Whether to exclude default themes from the list of available options. By default, false.\n */\n excludeDefaultThemes = false;\n /**\n * Whether to exclude theme font file from inserting it onto the page. By default, false.\n */\n excludeThemingFonts = false;\n /**\n * URL Query parameter flag to change theme based on the provided parameter.\n */\n themeQueryParam = 'theme';\n /**\n * Whether to change theme if URL Query parameter flag has been found or changed. Default is true.\n */\n changeThemeOnQueryParamChange = true;\n /**\n * Identifiers of theme style links.\n */\n themeStyleLinkIdentifiers: Record<ThemeStyleLink, string> = {\n 'base-theme': 'base-theme-styles',\n 'custom-theme': 'custom-theme-styles',\n fonts: 'theme-font-styles'\n };\n}\n","import { ThemeDefinition } from './interfaces/theme.interface';\n\nexport const STANDARD_THEMES: ThemeDefinition[] = [\n {\n id: 'sap_fiori_3',\n name: 'Fiori 3',\n description: 'Use in regular office environment'\n },\n {\n id: 'sap_fiori_3_dark',\n name: 'Fiori 3 Dark',\n description: 'Use in dimmed environments'\n },\n {\n id: 'sap_fiori_3_hcb',\n name: 'High Contrast Black',\n description: 'Optimized contrast and accessibility for extremely bright environments'\n },\n {\n id: 'sap_fiori_3_hcw',\n name: 'High Contrast White',\n description: 'Optimized contrast and accessibility for extremely dark environments'\n },\n {\n id: 'sap_fiori_3_light_dark',\n name: 'Light Dark'\n },\n {\n id: 'sap_horizon',\n name: 'Morning Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_dark',\n name: 'Evening Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcb',\n name: 'High Contrast Black Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcw',\n name: 'High Contrast White Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\nexport const THEMING_CONFIG_TOKEN = new InjectionToken<Partial<ThemingConfig>>('FdThemingConfig');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { THEME_SWITCHER_ROUTER_MISSING_ERROR } from '@fundamental-ngx/core/utils';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { STANDARD_THEMES } from './standard-themes';\nimport {\n CompleteThemeDefinition,\n CompleteThemingResource,\n ThemeDefinition,\n ThemeStyleLink\n} from './interfaces/theme.interface';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@Injectable()\nexport class ThemingService implements OnDestroy {\n /** @hidden */\n private readonly config = new BaseThemingConfig();\n\n /**\n * Current theme applied to the application.\n */\n get currentTheme(): Observable<CompleteThemeDefinition | null> {\n return this._currentThemeSubject.asObservable();\n }\n\n /** @hidden */\n private readonly _renderer: Renderer2;\n\n /** @hidden */\n private readonly _availableThemes: Map<string, CompleteThemeDefinition>;\n\n /** @hidden */\n private readonly _standardThemes: ThemeDefinition[] = [];\n\n /** @hidden **/\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _currentTheme: CompleteThemeDefinition;\n\n /** @hidden */\n private readonly _currentThemeSubject: BehaviorSubject<CompleteThemeDefinition | null> =\n new BehaviorSubject<CompleteThemeDefinition | null>(null);\n\n /**\n * @hidden\n */\n constructor(\n private _rendererFactory: RendererFactory2,\n @Inject(DOCUMENT) private _document: Document,\n @Optional() private _activatedRoute: ActivatedRoute,\n @Optional()\n @Inject(THEMING_CONFIG_TOKEN)\n private readonly _providedConfig: Partial<ThemingConfig>\n ) {\n this.config = merge(cloneDeep(this.config), cloneDeep(this._providedConfig));\n\n this._renderer = this._rendererFactory.createRenderer(this._document, null);\n\n if (!this.config.excludeDefaultThemes) {\n this._standardThemes = STANDARD_THEMES;\n }\n\n const mergedThemes = this._formatProvidedThemes(this.config.customThemes);\n this._availableThemes = new Map<string, CompleteThemeDefinition>(\n mergedThemes.map((theme) => [theme.id, theme])\n );\n }\n\n /**\n * Initiates theme change based on query parameter or provided default theme in config.\n */\n init(): void {\n if (this.config.changeThemeOnQueryParamChange) {\n this._setThemeByRoute();\n } else {\n this.setTheme(this.config.defaultTheme);\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /**\n * Sets defined theme.\n * @param themeId ID of theme that needs to be used by the application.\n */\n setTheme(themeId: string): boolean {\n const theme = this._availableThemes.get(themeId);\n\n if (!theme) {\n console.warn(\n `Theme with ID '${themeId}' is not found. Please check if ID is correct or provide custom theme for ThemingModule.`\n );\n return false;\n }\n\n this._setThemeResource('base-theme', theme.theming.themingBasePath);\n this._setThemeResource('custom-theme', theme.theming.themePath);\n\n if (!this.config.excludeThemingFonts) {\n this._setThemeResource('fonts', theme.theming.themeFontPath);\n }\n\n this._currentTheme = theme;\n this._currentThemeSubject.next(theme);\n\n return true;\n }\n\n /**\n * Returns array of available themes.\n */\n getThemes(): CompleteThemeDefinition[] {\n return [...this._availableThemes].map((entry) => entry[1]);\n }\n\n /**\n * @hidden\n * @param type\n * @param resourceUrl\n * @private\n */\n private _setThemeResource(type: ThemeStyleLink, resourceUrl: string): void {\n const linkElm = this._getStyleLinkElement(type);\n\n if (linkElm.getAttribute('href') === resourceUrl) {\n return;\n }\n\n this._renderer.setAttribute(linkElm, 'href', resourceUrl);\n }\n\n /**\n * @hidden\n * @param type\n * @private\n */\n private _getStyleLinkElement(type: ThemeStyleLink): HTMLLinkElement {\n const existingLinkElement = this._document.getElementById(this.config.themeStyleLinkIdentifiers[type]);\n\n if (existingLinkElement) {\n return existingLinkElement as HTMLLinkElement;\n }\n\n const newLinkElement = this._renderer.createElement('link');\n this._renderer.setAttribute(newLinkElement, 'rel', 'stylesheet');\n this._renderer.setAttribute(newLinkElement, 'id', this.config.themeStyleLinkIdentifiers[type]);\n this._renderer.appendChild(this._document.head, newLinkElement);\n\n return newLinkElement;\n }\n\n /**\n * @hidden\n * @param themes\n * @private\n */\n private _formatProvidedThemes(themes?: ThemeDefinition[]): CompleteThemeDefinition[] {\n themes = themes || [];\n const mergedThemes = [...this._standardThemes, ...themes];\n\n if (mergedThemes.length === 0 && isDevMode()) {\n console.error('Error. No themes were provided. Please check your configuration.');\n }\n\n return mergedThemes.map((theme) => {\n theme.theming = this._getThemingResourceConfig(theme);\n return theme;\n }) as CompleteThemeDefinition[];\n }\n\n /** @hidden */\n private _getThemingResourceConfig(theme: ThemeDefinition): CompleteThemingResource {\n const existingConfig = theme.theming || {};\n const defaultConfig: CompleteThemingResource = {\n themingBasePath: `assets/theming-base/${theme.id}/css_variables.css`,\n themePath: `assets/fundamental-styles-theming/${theme.id}.css`,\n themeFontPath: `${this.config.defaultFontFile}_fonts.css`\n };\n\n return Object.assign(defaultConfig, existingConfig);\n }\n\n /** @hidden */\n private _getNativeParameterByName(paramName: string): string {\n paramName = paramName.replace(/[[\\\\\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(window.location.href);\n if (!results || !results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n /**\n * @hidden\n * Set theme according to additional URL parameter.\n * This parameter can be changed in function argument.\n **/\n private _setThemeByRoute(): void {\n const paramName = this.config.themeQueryParam;\n\n if (!this._activatedRoute) {\n throw new Error(THEME_SWITCHER_ROUTER_MISSING_ERROR);\n }\n\n this._activatedRoute.queryParams\n .pipe(\n takeUntil(this._onDestroy$),\n filter((param) => param && param[paramName])\n )\n .subscribe((param) => this.setTheme(param[paramName]));\n\n const nativeTheme = this._getNativeParameterByName(paramName) || this.config.defaultTheme;\n this.setTheme(nativeTheme);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { ThemingService } from './theming.service';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@NgModule({\n imports: [CommonModule],\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: new BaseThemingConfig()\n },\n ThemingService\n ]\n})\nexport class ThemingModule {\n static withConfig(config: Partial<ThemingConfig>): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-theming.mjs","sources":["../../../../../libs/core/src/lib/theming/config.ts","../../../../../libs/core/src/lib/theming/standard-themes.ts","../../../../../libs/core/src/lib/theming/tokens.ts","../../../../../libs/core/src/lib/theming/theming.service.ts","../../../../../libs/core/src/lib/theming/theming.module.ts","../../../../../libs/core/src/lib/theming/fundamental-ngx-core-theming.ts"],"sourcesContent":["import { ThemeDefinition, ThemeStyleLink } from './interfaces/theme.interface';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\n/**\n * Theming Configuration.\n */\nexport class BaseThemingConfig implements ThemingConfig {\n /**\n * Array of user-defined themes.\n */\n customThemes: ThemeDefinition[] = [];\n /**\n * Default theme.\n */\n defaultTheme = 'sap_fiori_3';\n /**\n * Default theme font file. Used as a fallback for themes which do not have own font file.\n */\n defaultFontFile = 'sap_fiori_3';\n /**\n * Whether to exclude default themes from the list of available options. By default, false.\n */\n excludeDefaultThemes = false;\n /**\n * Whether to exclude theme font file from inserting it onto the page. By default, false.\n */\n excludeThemingFonts = false;\n /**\n * URL Query parameter flag to change theme based on the provided parameter.\n */\n themeQueryParam = 'theme';\n /**\n * Whether to change theme if URL Query parameter flag has been found or changed. Default is true.\n */\n changeThemeOnQueryParamChange = true;\n /**\n * Identifiers of theme style links.\n */\n themeStyleLinkIdentifiers: Record<ThemeStyleLink, string> = {\n 'base-theme': 'base-theme-styles',\n 'custom-theme': 'custom-theme-styles',\n fonts: 'theme-font-styles'\n };\n}\n","import { ThemeDefinition } from './interfaces/theme.interface';\n\nexport const STANDARD_THEMES: ThemeDefinition[] = [\n {\n id: 'sap_fiori_3',\n name: 'Fiori 3',\n description: 'Use in regular office environment'\n },\n {\n id: 'sap_fiori_3_dark',\n name: 'Fiori 3 Dark',\n description: 'Use in dimmed environments'\n },\n {\n id: 'sap_fiori_3_hcb',\n name: 'High Contrast Black',\n description: 'Optimized contrast and accessibility for extremely bright environments'\n },\n {\n id: 'sap_fiori_3_hcw',\n name: 'High Contrast White',\n description: 'Optimized contrast and accessibility for extremely dark environments'\n },\n {\n id: 'sap_fiori_3_light_dark',\n name: 'Light Dark'\n },\n {\n id: 'sap_horizon',\n name: 'Morning Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_dark',\n name: 'Evening Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcb',\n name: 'High Contrast Black Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcw',\n name: 'High Contrast White Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\nexport const THEMING_CONFIG_TOKEN = new InjectionToken<Partial<ThemingConfig>>('FdThemingConfig');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { THEME_SWITCHER_ROUTER_MISSING_ERROR } from '@fundamental-ngx/core/utils';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { STANDARD_THEMES } from './standard-themes';\nimport {\n CompleteThemeDefinition,\n CompleteThemingResource,\n ThemeDefinition,\n ThemeStyleLink\n} from './interfaces/theme.interface';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@Injectable()\nexport class ThemingService implements OnDestroy {\n /** @hidden */\n private readonly config = new BaseThemingConfig();\n\n /**\n * Current theme applied to the application.\n */\n get currentTheme(): Observable<CompleteThemeDefinition | null> {\n return this._currentThemeSubject.asObservable();\n }\n\n /** @hidden */\n private readonly _renderer: Renderer2;\n\n /** @hidden */\n private readonly _availableThemes: Map<string, CompleteThemeDefinition>;\n\n /** @hidden */\n private readonly _standardThemes: ThemeDefinition[] = [];\n\n /** @hidden **/\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _currentTheme: CompleteThemeDefinition;\n\n /** @hidden */\n private readonly _currentThemeSubject: BehaviorSubject<CompleteThemeDefinition | null> =\n new BehaviorSubject<CompleteThemeDefinition | null>(null);\n\n /**\n * @hidden\n */\n constructor(\n private _rendererFactory: RendererFactory2,\n @Inject(DOCUMENT) private _document: Document,\n @Optional() private _activatedRoute: ActivatedRoute,\n @Optional()\n @Inject(THEMING_CONFIG_TOKEN)\n private readonly _providedConfig: Partial<ThemingConfig>\n ) {\n this.config = merge(cloneDeep(this.config), cloneDeep(this._providedConfig));\n\n this._renderer = this._rendererFactory.createRenderer(this._document, null);\n\n if (!this.config.excludeDefaultThemes) {\n this._standardThemes = STANDARD_THEMES;\n }\n\n const mergedThemes = this._formatProvidedThemes(this.config.customThemes);\n this._availableThemes = new Map<string, CompleteThemeDefinition>(\n mergedThemes.map((theme) => [theme.id, theme])\n );\n }\n\n /**\n * Initiates theme change based on query parameter or provided default theme in config.\n */\n init(): void {\n if (this.config.changeThemeOnQueryParamChange) {\n this._setThemeByRoute();\n } else {\n this.setTheme(this.config.defaultTheme);\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /**\n * Sets defined theme.\n * @param themeId ID of theme that needs to be used by the application.\n */\n setTheme(themeId: string): boolean {\n const theme = this._availableThemes.get(themeId);\n\n if (!theme) {\n console.warn(\n `Theme with ID '${themeId}' is not found. Please check if ID is correct or provide custom theme for ThemingModule.`\n );\n return false;\n }\n\n this._setThemeResource('base-theme', theme.theming.themingBasePath);\n this._setThemeResource('custom-theme', theme.theming.themePath);\n\n if (!this.config.excludeThemingFonts) {\n this._setThemeResource('fonts', theme.theming.themeFontPath);\n }\n this._currentTheme = theme;\n this._currentThemeSubject.next(theme);\n\n return true;\n }\n\n /**\n * Returns array of available themes.\n */\n getThemes(): CompleteThemeDefinition[] {\n return [...this._availableThemes].map((entry) => entry[1]);\n }\n\n /**\n * @hidden\n * @param type\n * @param resourceUrl\n * @private\n */\n private _setThemeResource(type: ThemeStyleLink, resourceUrl: string): void {\n const linkElm = this._getStyleLinkElement(type);\n\n if (linkElm.getAttribute('href') === resourceUrl) {\n return;\n }\n\n this._renderer.setAttribute(linkElm, 'href', resourceUrl);\n }\n\n /**\n * @hidden\n * @param type\n * @private\n */\n private _getStyleLinkElement(type: ThemeStyleLink): HTMLLinkElement {\n const existingLinkElement = this._document.getElementById(this.config.themeStyleLinkIdentifiers[type]);\n\n if (existingLinkElement) {\n return existingLinkElement as HTMLLinkElement;\n }\n\n const newLinkElement = this._renderer.createElement('link');\n this._renderer.setAttribute(newLinkElement, 'rel', 'stylesheet');\n this._renderer.setAttribute(newLinkElement, 'id', this.config.themeStyleLinkIdentifiers[type]);\n this._renderer.appendChild(this._document.head, newLinkElement);\n\n return newLinkElement;\n }\n\n /**\n * @hidden\n * @param themes\n * @private\n */\n private _formatProvidedThemes(themes?: ThemeDefinition[]): CompleteThemeDefinition[] {\n themes = themes || [];\n const mergedThemes = [...this._standardThemes, ...themes];\n\n if (mergedThemes.length === 0 && isDevMode()) {\n console.error('Error. No themes were provided. Please check your configuration.');\n }\n\n return mergedThemes.map((theme) => {\n theme.theming = this._getThemingResourceConfig(theme);\n return theme;\n }) as CompleteThemeDefinition[];\n }\n\n /** @hidden */\n private _getThemingResourceConfig(theme: ThemeDefinition): CompleteThemingResource {\n const existingConfig = theme.theming || {};\n const defaultConfig: CompleteThemingResource = {\n themingBasePath: `assets/theming-base/${theme.id}/css_variables.css`,\n themePath: `assets/fundamental-styles-theming/${theme.id}.css`,\n themeFontPath: `${this.config.defaultFontFile}_fonts.css`\n };\n\n return Object.assign(defaultConfig, existingConfig);\n }\n\n /** @hidden */\n private _getNativeParameterByName(paramName: string): string {\n paramName = paramName.replace(/[[\\\\\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(window.location.href);\n if (!results || !results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n /**\n * @hidden\n * Set theme according to additional URL parameter.\n * This parameter can be changed in function argument.\n **/\n private _setThemeByRoute(): void {\n const paramName = this.config.themeQueryParam;\n\n if (!this._activatedRoute) {\n throw new Error(THEME_SWITCHER_ROUTER_MISSING_ERROR);\n }\n\n this._activatedRoute.queryParams\n .pipe(\n takeUntil(this._onDestroy$),\n filter((param) => param && param[paramName])\n )\n .subscribe((param) => this.setTheme(param[paramName]));\n\n const nativeTheme = this._getNativeParameterByName(paramName) || this.config.defaultTheme;\n this.setTheme(nativeTheme);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { ThemingService } from './theming.service';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@NgModule({\n imports: [CommonModule],\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: new BaseThemingConfig()\n },\n ThemingService\n ]\n})\nexport class ThemingModule {\n static withConfig(config: Partial<ThemingConfig>): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-theming.mjs","sources":["../../../../../libs/core/src/lib/theming/config.ts","../../../../../libs/core/src/lib/theming/standard-themes.ts","../../../../../libs/core/src/lib/theming/tokens.ts","../../../../../libs/core/src/lib/theming/theming.service.ts","../../../../../libs/core/src/lib/theming/theming.module.ts","../../../../../libs/core/src/lib/theming/fundamental-ngx-core-theming.ts"],"sourcesContent":["import { ThemeDefinition, ThemeStyleLink } from './interfaces/theme.interface';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\n/**\n * Theming Configuration.\n */\nexport class BaseThemingConfig implements ThemingConfig {\n /**\n * Array of user-defined themes.\n */\n customThemes: ThemeDefinition[] = [];\n /**\n * Default theme.\n */\n defaultTheme = 'sap_fiori_3';\n /**\n * Default theme font file. Used as a fallback for themes which do not have own font file.\n */\n defaultFontFile = 'sap_fiori_3';\n /**\n * Whether to exclude default themes from the list of available options. By default, false.\n */\n excludeDefaultThemes = false;\n /**\n * Whether to exclude theme font file from inserting it onto the page. By default, false.\n */\n excludeThemingFonts = false;\n /**\n * URL Query parameter flag to change theme based on the provided parameter.\n */\n themeQueryParam = 'theme';\n /**\n * Whether to change theme if URL Query parameter flag has been found or changed. Default is true.\n */\n changeThemeOnQueryParamChange = true;\n /**\n * Identifiers of theme style links.\n */\n themeStyleLinkIdentifiers: Record<ThemeStyleLink, string> = {\n 'base-theme': 'base-theme-styles',\n 'custom-theme': 'custom-theme-styles',\n fonts: 'theme-font-styles'\n };\n}\n","import { ThemeDefinition } from './interfaces/theme.interface';\n\nexport const STANDARD_THEMES: ThemeDefinition[] = [\n {\n id: 'sap_fiori_3',\n name: 'Fiori 3',\n description: 'Use in regular office environment'\n },\n {\n id: 'sap_fiori_3_dark',\n name: 'Fiori 3 Dark',\n description: 'Use in dimmed environments'\n },\n {\n id: 'sap_fiori_3_hcb',\n name: 'High Contrast Black',\n description: 'Optimized contrast and accessibility for extremely bright environments'\n },\n {\n id: 'sap_fiori_3_hcw',\n name: 'High Contrast White',\n description: 'Optimized contrast and accessibility for extremely dark environments'\n },\n {\n id: 'sap_fiori_3_light_dark',\n name: 'Light Dark'\n },\n {\n id: 'sap_horizon',\n name: 'Morning Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_dark',\n name: 'Evening Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcb',\n name: 'High Contrast Black Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n },\n {\n id: 'sap_horizon_hcw',\n name: 'High Contrast White Horizon',\n theming: {\n themeFontPath: 'sap_horizon_fonts.css'\n }\n }\n];\n","import { InjectionToken } from '@angular/core';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\n\nexport const THEMING_CONFIG_TOKEN = new InjectionToken<Partial<ThemingConfig>>('FdThemingConfig');\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, isDevMode, OnDestroy, Optional, Renderer2, RendererFactory2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { THEME_SWITCHER_ROUTER_MISSING_ERROR } from '@fundamental-ngx/core/utils';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { STANDARD_THEMES } from './standard-themes';\nimport {\n CompleteThemeDefinition,\n CompleteThemingResource,\n ThemeDefinition,\n ThemeStyleLink\n} from './interfaces/theme.interface';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@Injectable()\nexport class ThemingService implements OnDestroy {\n /** @hidden */\n private readonly config = new BaseThemingConfig();\n\n /**\n * Current theme applied to the application.\n */\n get currentTheme(): Observable<CompleteThemeDefinition | null> {\n return this._currentThemeSubject.asObservable();\n }\n\n /** @hidden */\n private readonly _renderer: Renderer2;\n\n /** @hidden */\n private readonly _availableThemes: Map<string, CompleteThemeDefinition>;\n\n /** @hidden */\n private readonly _standardThemes: ThemeDefinition[] = [];\n\n /** @hidden **/\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n private _currentTheme: CompleteThemeDefinition;\n\n /** @hidden */\n private readonly _currentThemeSubject: BehaviorSubject<CompleteThemeDefinition | null> =\n new BehaviorSubject<CompleteThemeDefinition | null>(null);\n\n /**\n * @hidden\n */\n constructor(\n private _rendererFactory: RendererFactory2,\n @Inject(DOCUMENT) private _document: Document,\n @Optional() private _activatedRoute: ActivatedRoute,\n @Optional()\n @Inject(THEMING_CONFIG_TOKEN)\n private readonly _providedConfig: Partial<ThemingConfig>\n ) {\n this.config = merge(cloneDeep(this.config), cloneDeep(this._providedConfig));\n\n this._renderer = this._rendererFactory.createRenderer(this._document, null);\n\n if (!this.config.excludeDefaultThemes) {\n this._standardThemes = STANDARD_THEMES;\n }\n\n const mergedThemes = this._formatProvidedThemes(this.config.customThemes);\n this._availableThemes = new Map<string, CompleteThemeDefinition>(\n mergedThemes.map((theme) => [theme.id, theme])\n );\n }\n\n /**\n * Initiates theme change based on query parameter or provided default theme in config.\n */\n init(): void {\n if (this.config.changeThemeOnQueryParamChange) {\n this._setThemeByRoute();\n } else {\n this.setTheme(this.config.defaultTheme);\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /**\n * Sets defined theme.\n * @param themeId ID of theme that needs to be used by the application.\n */\n setTheme(themeId: string): boolean {\n const theme = this._availableThemes.get(themeId);\n\n if (!theme) {\n console.warn(\n `Theme with ID '${themeId}' is not found. Please check if ID is correct or provide custom theme for ThemingModule.`\n );\n return false;\n }\n\n this._setThemeResource('base-theme', theme.theming.themingBasePath);\n this._setThemeResource('custom-theme', theme.theming.themePath);\n\n if (!this.config.excludeThemingFonts) {\n this._setThemeResource('fonts', theme.theming.themeFontPath);\n }\n\n this._currentTheme = theme;\n this._currentThemeSubject.next(theme);\n\n return true;\n }\n\n /**\n * Returns array of available themes.\n */\n getThemes(): CompleteThemeDefinition[] {\n return [...this._availableThemes].map((entry) => entry[1]);\n }\n\n /**\n * @hidden\n * @param type\n * @param resourceUrl\n * @private\n */\n private _setThemeResource(type: ThemeStyleLink, resourceUrl: string): void {\n const linkElm = this._getStyleLinkElement(type);\n\n if (linkElm.getAttribute('href') === resourceUrl) {\n return;\n }\n\n this._renderer.setAttribute(linkElm, 'href', resourceUrl);\n }\n\n /**\n * @hidden\n * @param type\n * @private\n */\n private _getStyleLinkElement(type: ThemeStyleLink): HTMLLinkElement {\n const existingLinkElement = this._document.getElementById(this.config.themeStyleLinkIdentifiers[type]);\n\n if (existingLinkElement) {\n return existingLinkElement as HTMLLinkElement;\n }\n\n const newLinkElement = this._renderer.createElement('link');\n this._renderer.setAttribute(newLinkElement, 'rel', 'stylesheet');\n this._renderer.setAttribute(newLinkElement, 'id', this.config.themeStyleLinkIdentifiers[type]);\n this._renderer.appendChild(this._document.head, newLinkElement);\n\n return newLinkElement;\n }\n\n /**\n * @hidden\n * @param themes\n * @private\n */\n private _formatProvidedThemes(themes?: ThemeDefinition[]): CompleteThemeDefinition[] {\n themes = themes || [];\n const mergedThemes = [...this._standardThemes, ...themes];\n\n if (mergedThemes.length === 0 && isDevMode()) {\n console.error('Error. No themes were provided. Please check your configuration.');\n }\n\n return mergedThemes.map((theme) => {\n theme.theming = this._getThemingResourceConfig(theme);\n return theme;\n }) as CompleteThemeDefinition[];\n }\n\n /** @hidden */\n private _getThemingResourceConfig(theme: ThemeDefinition): CompleteThemingResource {\n const existingConfig = theme.theming || {};\n const defaultConfig: CompleteThemingResource = {\n themingBasePath: `assets/theming-base/${theme.id}/css_variables.css`,\n themePath: `assets/fundamental-styles-theming/${theme.id}.css`,\n themeFontPath: `${this.config.defaultFontFile}_fonts.css`\n };\n\n return Object.assign(defaultConfig, existingConfig);\n }\n\n /** @hidden */\n private _getNativeParameterByName(paramName: string): string {\n paramName = paramName.replace(/[[\\\\\\]]/g, '\\\\$&');\n const regex = new RegExp('[?&]' + paramName + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(window.location.href);\n if (!results || !results[2]) {\n return '';\n }\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n\n /**\n * @hidden\n * Set theme according to additional URL parameter.\n * This parameter can be changed in function argument.\n **/\n private _setThemeByRoute(): void {\n const paramName = this.config.themeQueryParam;\n\n if (!this._activatedRoute) {\n throw new Error(THEME_SWITCHER_ROUTER_MISSING_ERROR);\n }\n\n this._activatedRoute.queryParams\n .pipe(\n takeUntil(this._onDestroy$),\n filter((param) => param && param[paramName])\n )\n .subscribe((param) => this.setTheme(param[paramName]));\n\n const nativeTheme = this._getNativeParameterByName(paramName) || this.config.defaultTheme;\n this.setTheme(nativeTheme);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BaseThemingConfig } from './config';\nimport { ThemingConfig } from './interfaces/theming-config.interface';\nimport { ThemingService } from './theming.service';\nimport { THEMING_CONFIG_TOKEN } from './tokens';\n\n@NgModule({\n imports: [CommonModule],\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: new BaseThemingConfig()\n },\n ThemingService\n ]\n})\nexport class ThemingModule {\n static withConfig(config: Partial<ThemingConfig>): ModuleWithProviders<ThemingModule> {\n return {\n ngModule: ThemingModule,\n providers: [\n {\n provide: THEMING_CONFIG_TOKEN,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/theming",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/tile/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/tile",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/time/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/time",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/time-picker",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/timeline",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/title",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/token",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/toolbar",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/tree/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/tree",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/upload-collection",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/utils",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/vertical-navigation",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/wizard",
3
- "version": "0.35.2-rc.6",
3
+ "version": "0.35.2-rc.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"