{"version":3,"file":"o3r-dynamic-content.mjs","sources":["../../src/stores/asset-path-override/asset-path-override.actions.ts","../../src/stores/asset-path-override/asset-path-override.reducer.ts","../../src/stores/asset-path-override/asset-path-override.state.ts","../../src/stores/asset-path-override/asset-path-override-module.ts","../../src/stores/asset-path-override/asset-path-override.selectors.ts","../../src/stores/asset-path-override/asset-path-override.sync.ts","../../src/services/dynamic-content/dynamic-content-token.ts","../../src/services/dynamic-content/dynamic-content-service.ts","../../src/services/dynamic-content/dynamic-content-module.ts","../../src/services/dynamic-content/dynamic-content-pipe.ts","../../src/services/request-parameters/request-parameters-config.ts","../../src/services/request-parameters/request-parameters-token.ts","../../src/services/request-parameters/request-parameters-service.ts","../../src/services/request-parameters/request-parameters-module.ts","../../src/services/styling/style-lazy-loader-module.ts","../../src/services/styling/style-lazy-loader.ts","../../src/o3r-dynamic-content.ts"],"sourcesContent":["import {\n  createAction,\n  props,\n} from '@ngrx/store';\nimport type {\n  SetStateActionPayload,\n} from '@o3r/core';\nimport {\n  AssetPathOverrideState,\n} from './asset-path-override.state';\n\n/** Actions */\nconst ACTION_SET = '[AssetPathOverride] set entities';\n\n/**\n * Clear all overrides and fill the store with the payload\n */\nexport const setAssetPathOverride = createAction(ACTION_SET, props<SetStateActionPayload<AssetPathOverrideState>>());\n","import {\n  ActionCreator,\n  createReducer,\n  on,\n  ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './asset-path-override.actions';\nimport {\n  AssetPathOverrideState,\n} from './asset-path-override.state';\n\n/**\n * AssetPathOverride Store initial value\n */\nexport const assetPathOverrideInitialState: AssetPathOverrideState = { assetPathOverrides: {} };\n\n/**\n *  List of basic actions for AssetPathOverride Store\n */\nexport const assetPathOverrideReducerFeatures: ReducerTypes<AssetPathOverrideState, ActionCreator[]>[] = [\n  on(actions.setAssetPathOverride, (_state, payload) => ({ ...payload.state }))\n];\n\n/**\n * AssetPathOverride Store reducer\n */\nexport const assetPathOverrideReducer = createReducer(\n  assetPathOverrideInitialState,\n  ...assetPathOverrideReducerFeatures\n);\n","/**\n * AssetPathOverride store state\n */\nexport interface AssetPathOverrideState {\n  /** Mapping of asset path (key) and its override (value)*/\n  assetPathOverrides: Record<string, string>;\n}\n\n/**\n * Name of the AssetPathOverride Store\n */\nexport const ASSET_PATH_OVERRIDE_STORE_NAME = 'assetPathOverride';\n\n/**\n * AssetPathOverride Store Interface\n */\nexport interface AssetPathOverrideStore {\n  /** AssetPathOverride state */\n  [ASSET_PATH_OVERRIDE_STORE_NAME]: AssetPathOverrideState;\n}\n","import {\n  InjectionToken,\n  ModuleWithProviders,\n  NgModule,\n} from '@angular/core';\nimport {\n  Action,\n  ActionReducer,\n  StoreModule,\n} from '@ngrx/store';\nimport {\n  assetPathOverrideReducer,\n} from './asset-path-override.reducer';\nimport {\n  ASSET_PATH_OVERRIDE_STORE_NAME,\n  AssetPathOverrideState,\n} from './asset-path-override.state';\n\n/** Token of the AssetPathOverride reducer */\nexport const ASSET_PATH_OVERRIDE_REDUCER_TOKEN = new InjectionToken<ActionReducer<AssetPathOverrideState, Action>>('Feature AssetPathOverride Reducer');\n\n/** Provide default reducer for AssetPathOverride store */\nexport function getDefaultAssetPathOverrideReducer() {\n  return assetPathOverrideReducer;\n}\n\n@NgModule({\n  imports: [\n    StoreModule.forFeature(ASSET_PATH_OVERRIDE_STORE_NAME, ASSET_PATH_OVERRIDE_REDUCER_TOKEN)\n  ],\n  providers: [\n    { provide: ASSET_PATH_OVERRIDE_REDUCER_TOKEN, useFactory: getDefaultAssetPathOverrideReducer }\n  ]\n})\nexport class AssetPathOverrideStoreModule {\n  public static forRoot<T extends AssetPathOverrideState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<AssetPathOverrideStoreModule> {\n    return {\n      ngModule: AssetPathOverrideStoreModule,\n      providers: [\n        { provide: ASSET_PATH_OVERRIDE_REDUCER_TOKEN, useFactory: reducerFactory }\n      ]\n    };\n  }\n}\n","import {\n  createFeatureSelector,\n  createSelector,\n} from '@ngrx/store';\nimport {\n  ASSET_PATH_OVERRIDE_STORE_NAME,\n  AssetPathOverrideState,\n} from './asset-path-override.state';\n\n/** Select AssetPathOverride State */\nexport const selectAssetPathOverrideState = createFeatureSelector<AssetPathOverrideState>(ASSET_PATH_OVERRIDE_STORE_NAME);\n\n/** Select all assetPath override map */\nexport const selectAssetPathOverride = createSelector(selectAssetPathOverrideState, (state) => state?.assetPathOverrides || {});\n","import type {\n  Serializer,\n} from '@o3r/core';\nimport {\n  assetPathOverrideInitialState,\n} from './asset-path-override.reducer';\nimport {\n  AssetPathOverrideState,\n} from './asset-path-override.state';\n\n/**\n * Deserializer\n * @param rawObject\n */\nexport const assetPathOverrideStorageDeserializer = (rawObject: any) => {\n  if (!rawObject) {\n    return assetPathOverrideInitialState;\n  }\n  return rawObject;\n};\n\nexport const assetPathOverrideStorageSync: Serializer<AssetPathOverrideState> = {\n  deserialize: assetPathOverrideStorageDeserializer\n};\n","import {\n  InjectionToken,\n} from '@angular/core';\n\n/**\n * Injection token for the rootpath of dynamic content\n */\nexport const DYNAMIC_CONTENT_BASE_PATH_TOKEN: InjectionToken<string> = new InjectionToken('Dynamic content path injection token');\n\n/**\n * Injection token for the assets path injected by the cms\n * This token will be injected only in editor mode\n */\nexport const CMS_ASSETS_PATH_TOKEN: InjectionToken<string> = new InjectionToken('CMS assets path injection token');\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  select,\n  Store,\n} from '@ngrx/store';\nimport {\n  of,\n} from 'rxjs';\nimport {\n  distinctUntilChanged,\n  map,\n  shareReplay,\n} from 'rxjs/operators';\nimport {\n  AssetPathOverrideStore,\n  selectAssetPathOverride,\n} from '../../stores/index';\nimport {\n  CMS_ASSETS_PATH_TOKEN,\n  DYNAMIC_CONTENT_BASE_PATH_TOKEN,\n} from './dynamic-content-token';\n\nconst MEDIA_FOLDER_NAME = 'assets';\n\n/**\n * Service for getting dynamic content path\n */\n@Injectable()\nexport class DynamicContentService {\n  private readonly cmsOnlyAssetsPath = inject(CMS_ASSETS_PATH_TOKEN);\n  private readonly store = inject<Store<AssetPathOverrideStore>>(Store, { optional: true });\n\n  public readonly basePath: string;\n\n  private readonly mediaFolder: string;\n\n  constructor() {\n    const dynamicContentPath = inject(DYNAMIC_CONTENT_BASE_PATH_TOKEN);\n\n    this.basePath = dynamicContentPath.replace(/\\/$/, '');\n    this.mediaFolder = MEDIA_FOLDER_NAME;\n  }\n\n  private normalizePath(assetPath?: string) {\n    return assetPath ? assetPath.replace(/^\\//, '') : '';\n  }\n\n  private isAbsoluteUrl(assetPath: string): boolean {\n    return URL.canParse(assetPath);\n  }\n\n  private getContentPath(assetPath?: string) {\n    if (assetPath && this.isAbsoluteUrl(assetPath)) {\n      return assetPath;\n    }\n    const normalizedAssetPath = this.normalizePath(assetPath);\n    return this.basePath === '' ? assetPath || '' : `${this.basePath}/${normalizedAssetPath}`;\n  }\n\n  private getMediaPath(assetPath?: string) {\n    if (assetPath && this.isAbsoluteUrl(assetPath)) {\n      return assetPath;\n    }\n    if (this.cmsOnlyAssetsPath && assetPath) {\n      return assetPath.startsWith('/') ? assetPath : `${this.cmsOnlyAssetsPath.replace(/\\/$/, '')}/${assetPath}`;\n    }\n    return this.getContentPath(this.mediaFolder ? `${this.mediaFolder}/${this.normalizePath(assetPath)}` : assetPath);\n  }\n\n  /**\n   * Gets the full path of a content relative to the root\n   * Content path doesn't consider any override, you will always get the same file\n   * @param assetPath asset location in the root folder\n   * @example\n   * ```typescript\n   * getMediaPath('assets/imgs/my-image.png') // will give you the basePath + 'assets/imgs/my-image.png'\n   * ```\n   */\n  public getContentPathStream(assetPath?: string) {\n    return of(this.getContentPath(assetPath));\n  }\n\n  /**\n   * Gets the stream that provides the full path of a media content\n   * A Media content is always stored in the 'assets' media folder, no external content will be accessible through this function\n   * If any override is applied to the content, returns the override path instead\n   * @param assetPath asset location in the media folder (e.g imgs/my-image.png)\n   * @example\n   * ```typescript\n   * getMediaPathStream('imgs/my-image.png') // will give you the basePath + mediaFolder + 'imgs/my-image.png'\n   * ```\n   */\n  public getMediaPathStream(assetPath?: string) {\n    if (!this.store) {\n      return of(this.getMediaPath(assetPath));\n    }\n    return this.store.pipe(\n      select(selectAssetPathOverride),\n      map((entities) => assetPath && entities && entities[assetPath] ? entities[assetPath] : assetPath),\n      map((finalAssetPath) => this.getMediaPath(finalAssetPath)),\n      distinctUntilChanged(),\n      shareReplay({ bufferSize: 1, refCount: true })\n    );\n  }\n}\n","import {\n  type EnvironmentProviders,\n  makeEnvironmentProviders,\n  type Provider,\n} from '@angular/core';\nimport {\n  DynamicContentService,\n} from './dynamic-content-service';\nimport {\n  CMS_ASSETS_PATH_TOKEN,\n  DYNAMIC_CONTENT_BASE_PATH_TOKEN,\n} from './dynamic-content-token';\n\n/**\n * Function to get dynamic content from body dataset\n */\nexport function getDynamicContent() {\n  return document.body.dataset.dynamiccontentpath || '';\n}\n\n/**\n * Function to get the cms assets from body dataset\n * This will be used only in a CMS context(not in local or prod) to display correctly the assets in the editor\n */\nexport function getCmsAssets() {\n  return document.body.dataset.cmsassetspath || '';\n}\n\ntype DynamicContentFeatureKind = 'base-path' | 'cms-assets-path';\n\ninterface DynamicContentFeature<FeatureKind extends DynamicContentFeatureKind> {\n  ɵkind: FeatureKind;\n  ɵproviders: Provider[];\n}\n\ntype BasePathFeature = DynamicContentFeature<'base-path'>;\ntype CmsAssetsPathFeature = DynamicContentFeature<'cms-assets-path'>;\n\ntype DynamicContentFeatures = BasePathFeature | CmsAssetsPathFeature;\n\n/**\n * Specify a custom base path\n * @param basePath\n */\nexport function withBasePath(basePath: string | (() => string)): BasePathFeature {\n  return {\n    ɵkind: 'base-path',\n    ɵproviders: [\n      {\n        provide: DYNAMIC_CONTENT_BASE_PATH_TOKEN,\n        ...(\n          typeof basePath === 'string'\n            ? { useValue: basePath }\n            : { useFactory: basePath }\n        )\n      }\n    ]\n  };\n}\n\n/**\n * Specify a custom CMS assets path\n * @param cmsAssetsPath\n */\nexport function withCmsAssetsPath(cmsAssetsPath: string | (() => string)): DynamicContentFeature<'cms-assets-path'> {\n  return {\n    ɵkind: 'cms-assets-path',\n    ɵproviders: [\n      {\n        provide: CMS_ASSETS_PATH_TOKEN,\n        ...(\n          typeof cmsAssetsPath === 'string'\n            ? { useValue: cmsAssetsPath }\n            : { useFactory: cmsAssetsPath }\n        )\n      }\n    ]\n  };\n}\n\n/**\n * Provide dynamic content default configuration.\n * To customize the location where the application will search for the base path of dynamic content\n * @see {@link withBasePath}\n * @see {@link withCmsAssetsPath}\n * @note The cmsAssets will be used only in the cms editor mode and it will take priority over dynamic content\n * @param features\n * @example\n * ```typescript\n * bootstrapApplication(App,\n *  {\n *    providers: [\n *      provideDynamicContent(\n *        withBasePath('custom/base/path'),\n *        withCmsAssetsPath('custom/cms/assets/path'),\n *      )\n *    ]\n *  }\n * );\n */\nexport function provideDynamicContent(...features: DynamicContentFeatures[]) {\n  const providers: (Provider | EnvironmentProviders)[] = [\n    DynamicContentService\n  ];\n\n  const basePathFeature = features.find((f) => f.ɵkind === 'base-path') ?? withBasePath(getDynamicContent);\n  providers.push(basePathFeature.ɵproviders);\n\n  const cmsAssetsPathFeature = features.find((f) => f.ɵkind === 'cms-assets-path') ?? withCmsAssetsPath(getCmsAssets);\n  providers.push(cmsAssetsPathFeature.ɵproviders);\n\n  return makeEnvironmentProviders(providers);\n}\n","import {\n  ChangeDetectorRef,\n  inject,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  DynamicContentService,\n} from './dynamic-content-service';\n\n@Pipe({\n  name: 'o3rDynamicContent',\n  pure: false\n})\nexport class O3rDynamicContentPipe implements PipeTransform, OnDestroy {\n  protected readonly service = inject(DynamicContentService);\n  protected readonly cd = inject(ChangeDetectorRef);\n\n  /** Last query value  */\n  protected lastQuery?: string;\n\n  /** Subscription to retrieve media path */\n  protected onMediaPathChange?: Subscription;\n\n  /** Path to the media */\n  protected mediaPath = '';\n\n  /** @inheritDoc */\n  public transform(query?: string) {\n    if (query !== this.lastQuery) {\n      this.lastQuery = query;\n      if (this.onMediaPathChange) {\n        this.onMediaPathChange.unsubscribe();\n      }\n      this.onMediaPathChange = this.service.getMediaPathStream(query).subscribe((mediaPath) => {\n        this.mediaPath = mediaPath;\n        this.cd.markForCheck();\n      });\n    }\n\n    return this.mediaPath;\n  }\n\n  /** @inheritDoc */\n  public ngOnDestroy(): void {\n    if (this.onMediaPathChange) {\n      this.onMediaPathChange.unsubscribe();\n    }\n  }\n}\n","/**\n * Strategies available to read / write data in the RequestParameters service.\n * Rehydrate: if the storage already have data, those will be used by the service, ignoring new data. Otherwise set the storage\n * Merge: storage data will be merged with the ones provided. (provided data has priority)\n * Replace: storage data will be completely replaced by the ones provided\n * ReplaceIfNotEmpty: If no parameters are provided, use the content from storage. Otherwise use the ones provided and update the storage with them.\n */\n\nexport enum StorageStrategy {\n  // eslint-disable-next-line @typescript-eslint/naming-convention -- required naming convention\n  Rehydrate = 0,\n  // eslint-disable-next-line @typescript-eslint/naming-convention -- required naming convention\n  Merge = 1,\n  // eslint-disable-next-line @typescript-eslint/naming-convention -- required naming convention\n  Replace = 2,\n  // eslint-disable-next-line @typescript-eslint/naming-convention -- required naming convention\n  ReplaceIfNotEmpty = 3\n}\n\n/**\n * Configuration used by a user to feed the request parameters service.\n */\nexport interface RequestParametersConfig {\n  /**\n   * Strategy used by the RequestParameters Service. See StorageStrategy for more info\n   */\n  strategy: StorageStrategy;\n  /**\n   * Storage used by the RequestParameters service\n   */\n  storage?: Storage;\n  /**\n   * Value of the DOM element containing your query parameters (e.g. `document.body.dataset.query`)\n   */\n  queryParamsValue: string;\n  /**\n   * Value of the DOM element containing your post parameters (e.g. `document.body.dataset.post`)\n   */\n  postParamsValue: string;\n}\n\nexport const defaultRequestParametersConfig: Readonly<RequestParametersConfig> = {\n  storage: (typeof window === 'undefined') ? undefined : window.sessionStorage,\n  strategy: StorageStrategy.Rehydrate,\n  queryParamsValue: (typeof document !== 'undefined' && document.body?.dataset?.query) || '{}',\n  postParamsValue: (typeof document !== 'undefined' && document.body?.dataset?.post) || '{}'\n} as const;\n","import {\n  InjectionToken,\n} from '@angular/core';\nimport {\n  RequestParametersConfig,\n} from './request-parameters-config';\n\n/**\n * Token to be provided in case of service customization needs.\n */\nexport const REQUEST_PARAMETERS_CONFIG_TOKEN = new InjectionToken<Partial<RequestParametersConfig>>('RequestParametersConfig injection token', { factory: () => ({}) });\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  defaultRequestParametersConfig,\n  RequestParametersConfig,\n  StorageStrategy,\n} from './request-parameters-config';\nimport {\n  REQUEST_PARAMETERS_CONFIG_TOKEN,\n} from './request-parameters-token';\n\nexport type ParamsList = 'query' | 'post';\n\nexport type ParamsType = { [k in ParamsList]: { [key: string]: string } };\n\n/**\n * Partial configuration for RequestParameters Service\n */\nexport interface PartialRequestParametersConfig extends Partial<RequestParametersConfig> {}\n\n/**\n * Service used to store the request parameters of your requests so that subsequent calls or refresh the page will preserve\n * them.\n */\n@Injectable()\nexport class RequestParametersService implements ParamsType {\n  private _query: { [key: string]: any } = {};\n  private _post: { [key: string]: any } = {};\n\n  private readonly config: RequestParametersConfig;\n\n  constructor() {\n    const config = inject<PartialRequestParametersConfig>(REQUEST_PARAMETERS_CONFIG_TOKEN);\n\n    this.config = defaultRequestParametersConfig;\n    (Object.keys(config) as (keyof RequestParametersConfig)[])\n      .filter((key) => config[key] !== undefined)\n      .forEach((key) => (this.config as any)[key] = config[key]);\n\n    this.setParameters('query', JSON.parse(this.config.queryParamsValue));\n    this.setParameters('post', JSON.parse(this.config.postParamsValue));\n  }\n\n  /**\n   * Depending on the strategy, set the internal values for the parameters.\n   * See StorageStrategy for more info.\n   * @param key\n   * @param value\n   */\n  private setParameters(key: ParamsList, value: { [key: string]: string }) {\n    const privateKey: `_${ParamsList}` = `_${key}`;\n    if (!this.config.storage) {\n      // No storage is available , cannot set items\n      return;\n    }\n    switch (this.config.strategy) {\n      case StorageStrategy.Rehydrate: {\n        if (!this.config.storage.getItem(privateKey)) {\n          this[privateKey] = value;\n          this.config.storage.setItem(privateKey, JSON.stringify(value));\n          break;\n        }\n        this[privateKey] = JSON.parse(this.config.storage.getItem(privateKey) || '{}');\n        break;\n      }\n      case StorageStrategy.Replace: {\n        this[privateKey] = value;\n        this.config.storage.setItem(privateKey, JSON.stringify(value));\n        break;\n      }\n      case StorageStrategy.Merge: {\n        const storageData = Object.assign(JSON.parse(this.config.storage.getItem(privateKey) || '{}'), value);\n        this[privateKey] = storageData;\n        this.config.storage.setItem(privateKey, JSON.stringify(storageData));\n        break;\n      }\n      case StorageStrategy.ReplaceIfNotEmpty: {\n        if (Object.keys(value).length > 0) {\n          this[privateKey] = value;\n          this.config.storage.setItem(privateKey, JSON.stringify(value));\n          break;\n        }\n        this[privateKey] = JSON.parse(this.config.storage.getItem(privateKey) || '{}');\n        break;\n      }\n    }\n  }\n\n  /**\n   * Get all the query parameters in a map.\n   */\n  public get query() {\n    return this._query;\n  }\n\n  /**\n   * Get all the post parameters in a map.\n   */\n  public get post() {\n    return this._post;\n  }\n\n  /**\n   * Get a specific query parameter value, given the key.\n   * @param key\n   */\n  public getQueryParameter(key: string): string | undefined {\n    return this._query[key];\n  }\n\n  /**\n   * Get a specific query parameter value as boolean, given the key.\n   * @param key\n   */\n  public getQueryParameterAsBoolean(key: string): boolean | undefined {\n    const queryParameter: string | undefined = this.getQueryParameter(key);\n    return queryParameter ? queryParameter.toLowerCase() === 'true' : undefined;\n  }\n\n  /**\n   * Get a specific post parameter value, given the key.\n   * @param key\n   */\n  public getPostParameter(key: string): string | undefined {\n    return this._post[key];\n  }\n\n  /**\n   * Get a specific post parameter value as boolean, given the key.\n   * @param key\n   */\n  public getPostParameterAsBoolean(key: string): boolean | undefined {\n    const postParameter: string | undefined = this.getPostParameter(key);\n    return postParameter ? postParameter.toLowerCase() === 'true' : undefined;\n  }\n\n  /**\n   * Get a specific parameter value, given the key.\n   * @param key\n   */\n  public getParameter(key: string): string | undefined {\n    return this._query[key] || this._post[key];\n  }\n\n  /**\n   * Get a specific parameter value as boolean, given the key.\n   * @param key\n   */\n  public getParameterAsBoolean(key: string): boolean | undefined {\n    const parameter: string | undefined = this.getParameter(key);\n    return parameter ? parameter.toLowerCase() === 'true' : undefined;\n  }\n\n  /**\n   * Clear GET parameters from the storage\n   * @param paramsToClear the list on key that you want to clear in get parameters\n   */\n  public clearQueryParameters(paramsToClear?: string[]) {\n    const newQuery = (paramsToClear ? Object.keys(this._query).filter((key) => !paramsToClear.includes(key)) : [])\n      .reduce<{ [k: string]: string }>((acc, key) => {\n        acc[key] = this._query[key];\n        return acc;\n      }, {});\n    if (this.config.storage) {\n      this.config.storage.setItem('_query', JSON.stringify(newQuery));\n    }\n    this._query = newQuery;\n  }\n\n  /**\n   * Clear POST parameters from the storage\n   * @param paramsToClear the list on key that you want to clean in post parameters\n   */\n  public clearPostParameters(paramsToClear?: string[]) {\n    const newPost = (paramsToClear ? Object.keys(this._post).filter((key) => !paramsToClear.includes(key)) : [])\n      .reduce<{ [k: string]: string }>((acc, key) => {\n        acc[key] = this._post[key];\n        return acc;\n      }, {});\n    if (this.config.storage) {\n      this.config.storage.setItem('_post', JSON.stringify(newPost));\n    }\n    this._post = newPost;\n  }\n\n  /**\n   * Get all the parameters in a map.\n   * @param priority the parameter to be given priority in case same key is in get and post params.\n   */\n  public getParams(priority: ParamsList = 'query') {\n    return priority === 'query' ? { ...this._post, ...this._query } : { ...this._query, ...this._post };\n  }\n\n  /**\n   * Filter Parameters(both Query/POST) from the storage\n   * @param paramstoFilter the list on key that you want to filter from parameters\n   * @param priority the priorty of the parameter type(POST/Query)\n   */\n  public getFilteredParameters(paramstoFilter?: string[], priority: ParamsList = 'query') {\n    const params = this.getParams(priority);\n    if (!paramstoFilter) {\n      return params;\n    }\n    return Object.keys(params)\n      .filter((key) => !paramstoFilter.includes(key))\n      .reduce<{ [k: string]: string }>((acc, key) => {\n        acc[key] = params[key];\n        return acc;\n      }, {});\n  }\n}\n","import {\n  makeEnvironmentProviders,\n} from '@angular/core';\nimport {\n  RequestParametersConfig,\n} from './request-parameters-config';\nimport {\n  RequestParametersService,\n} from './request-parameters-service';\nimport {\n  REQUEST_PARAMETERS_CONFIG_TOKEN,\n} from './request-parameters-token';\n\n/**\n * Empty configuration factory, used when config is not provided. It needs a separate function for AOT.\n */\nexport function defaultConfigFactory() {\n  return {};\n}\n\n/**\n * Provide request parameters config\n * We don't provide directly the value and use a factory because otherwise AOT compilation will resolve to undefined whatever is taken from window\n * @param config\n */\nexport function provideRequestParameters(config: () => Partial<RequestParametersConfig> = defaultConfigFactory) {\n  return makeEnvironmentProviders([\n    {\n      provide: REQUEST_PARAMETERS_CONFIG_TOKEN,\n      useFactory: config\n    },\n    RequestParametersService\n  ]);\n}\n","import {\n  NgModule,\n} from '@angular/core';\n\n/**\n * @deprecated Will be removed in v15\n */\n@NgModule({})\nexport class StyleLazyLoaderModule {}\n","import {\n  inject,\n  Injectable,\n} from '@angular/core';\nimport {\n  firstValueFrom,\n} from 'rxjs';\nimport {\n  DynamicContentService,\n} from '../dynamic-content/index';\n\n/**\n * Interface to describe a style to lazy load from a url.\n */\nexport interface StyleURL {\n  /** url to file */\n  href: string;\n  /** id of the HTML element */\n  id?: string;\n  /** html integrity attribute to verify fetched resources */\n  integrity?: string;\n  /** html crossOrigin attribute for CORS support. */\n  crossOrigin?: 'anonymous' | 'use-credentials' | '';\n}\n\n/**\n * Service to lazy load a CSS file\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class StyleLazyLoader {\n  private readonly dcService = inject(DynamicContentService);\n\n  private readonly DEFAULT_STYLE_ELEMENT_ID = 'external-theme';\n\n  /**\n   * Load a new CSS from an absolute URL, if we already HTML element exists with the url, otherwise\n   * @param styleUrlConfig object containing CSS File absolute URL to load, integrity and crossOrigin attributes\n   * and the styleId id of the dynamic style in the body tag.\n   */\n  public loadStyleFromURL(styleUrlConfig: StyleURL) {\n    const elementId = styleUrlConfig.id || this.DEFAULT_STYLE_ELEMENT_ID;\n    let style = document.querySelector<HTMLLinkElement>(`#${elementId}`);\n\n    if (style === null) {\n      style = document.createElement('link');\n      style.rel = 'stylesheet';\n      style.type = 'text/css';\n      const head = document.querySelectorAll('head')[0];\n      head.append(style);\n    }\n    if (styleUrlConfig.integrity) {\n      style.integrity = styleUrlConfig.integrity;\n    }\n    if (styleUrlConfig.crossOrigin !== undefined) {\n      style.crossOrigin = styleUrlConfig.crossOrigin;\n    }\n    style.href = styleUrlConfig.href;\n\n    return style;\n  }\n\n  /**\n   * Load a new CSS File\n   * @param styleUrlConfig CSS File config containing URL to load, integrity and crossOrigin attributes\n   * and the styleId id of the dynamic style in the body tag\n   */\n  public async asyncLoadStyleFromDynamicContent(styleUrlConfig: StyleURL) {\n    const dynamicContentPath = await firstValueFrom(\n      this.dcService.getContentPathStream(styleUrlConfig.href)\n    );\n    styleUrlConfig.href = dynamicContentPath;\n    this.loadStyleFromURL(styleUrlConfig);\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.setAssetPathOverride"],"mappings":"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"}