{"version":3,"file":"ngx-matomo-client-core.mjs","sources":["../../../projects/ngx-matomo-client/core/utils/function.ts","../../../projects/ngx-matomo-client/core/utils/url.ts","../../../projects/ngx-matomo-client/core/tracker/script-factory.ts","../../../projects/ngx-matomo-client/core/utils/coercion.ts","../../../projects/ngx-matomo-client/core/utils/script-injector.ts","../../../projects/ngx-matomo-client/core/tracker/configuration.ts","../../../projects/ngx-matomo-client/core/holder.ts","../../../projects/ngx-matomo-client/core/tracker/internal-matomo-tracker.service.ts","../../../projects/ngx-matomo-client/core/testing/testing-tracker.ts","../../../projects/ngx-matomo-client/core/tracker/errors.ts","../../../projects/ngx-matomo-client/core/tracker/matomo-tracker.service.ts","../../../projects/ngx-matomo-client/core/tracker/matomo-initializer.service.ts","../../../projects/ngx-matomo-client/core/providers.ts","../../../projects/ngx-matomo-client/core/directives/matomo-opt-out-form.component.ts","../../../projects/ngx-matomo-client/core/directives/matomo-opt-out-form.component.html","../../../projects/ngx-matomo-client/core/directives/matomo-track-click.directive.ts","../../../projects/ngx-matomo-client/core/directives/matomo-tracker.directive.ts","../../../projects/ngx-matomo-client/core/matomo.module.ts","../../../projects/ngx-matomo-client/core/public-api.ts","../../../projects/ngx-matomo-client/core/ngx-matomo-client-core.ts"],"sourcesContent":["function coerceErrorHandler<T, ARGS extends unknown[]>(\n  errorOrHandler: string | ((...args: ARGS) => T | never),\n): (...args: ARGS) => T | never {\n  return typeof errorOrHandler === 'string'\n    ? () => {\n        throw new Error(errorOrHandler);\n      }\n    : errorOrHandler;\n}\n\n/** Wrap a function to ensure it is called only once, ignoring all subsequent calls */\nexport function runOnce<T, ARGS extends unknown[]>(\n  fn: (...args: ARGS) => T,\n): (...args: ARGS) => T | void;\n/** Wrap a function to ensure it is called only once, calling an error handler otherwise */\nexport function runOnce<T, ARGS extends unknown[], U = T>(\n  fn: (...args: ARGS) => T,\n  errorOrHandler: string | ((...args: ARGS) => U | never),\n): (...args: ARGS) => T | U;\nexport function runOnce<T, ARGS extends unknown[], U = T>(\n  fn: (...args: ARGS) => T,\n  errorOrHandler?: string | ((...args: ARGS) => U | never),\n): (...args: ARGS) => T | U | void {\n  const errorHandler = errorOrHandler ? coerceErrorHandler(errorOrHandler) : () => undefined;\n  let run = false;\n\n  return (...args: ARGS) => {\n    if (run) {\n      return errorHandler(...args);\n    }\n\n    run = true;\n\n    return fn(...args);\n  };\n}\n","export function appendTrailingSlash(str: string): string {\n  return str.endsWith('/') ? str : `${str}/`;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type MatomoScriptFactory = (scriptUrl: string, document: Document) => HTMLScriptElement;\n\nexport const createDefaultMatomoScriptElement: MatomoScriptFactory = (scriptUrl, document) => {\n  const g = document.createElement('script');\n\n  g.type = 'text/javascript';\n  g.defer = true;\n  g.async = true;\n  g.src = scriptUrl;\n\n  return g;\n};\n\nexport const MATOMO_SCRIPT_FACTORY = new InjectionToken<MatomoScriptFactory>(\n  'MATOMO_SCRIPT_FACTORY',\n  {\n    providedIn: 'root',\n    factory: () => createDefaultMatomoScriptElement,\n  },\n);\n","export type CssSizeInput = string | number | null | undefined;\n\nexport function requireNonNull<T>(value: T | null | undefined, message: string): T {\n  if (value === null || value === undefined) {\n    throw new Error('Unexpected ' + value + ' value: ' + message);\n  }\n\n  return value;\n}\n\n/** Coerce a data-bound value to a boolean */\nexport function coerceCssSizeBinding(value: CssSizeInput): string {\n  if (value == null) {\n    return '';\n  }\n\n  return typeof value === 'string' ? value : `${value}px`;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, INJECTOR, runInInjectionContext } from '@angular/core';\nimport { MATOMO_SCRIPT_FACTORY } from '../tracker/script-factory';\nimport { requireNonNull } from './coercion';\n\n@Injectable()\nexport class ScriptInjector {\n  private readonly scriptFactory = inject(MATOMO_SCRIPT_FACTORY);\n  private readonly injector = inject(INJECTOR);\n  private readonly document = inject(DOCUMENT);\n\n  injectDOMScript(scriptUrl: string): void {\n    const scriptElement = runInInjectionContext(this.injector, () =>\n      this.scriptFactory(scriptUrl, this.document),\n    );\n    const selfScript = requireNonNull(\n      this.document.getElementsByTagName('script')[0],\n      'no existing script found',\n    );\n    const parent = requireNonNull(selfScript.parentNode, \"no script's parent node found\");\n\n    parent.insertBefore(scriptElement, selfScript);\n  }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { requireNonNull } from '../utils/coercion';\n\nconst CONFIG_NOT_FOUND =\n  'No Matomo configuration found! Have you included Matomo module using MatomoModule.forRoot() or provideMatomo()?';\n\n/** Internal marker token to detect that router has been enabled */\nexport const MATOMO_ROUTER_ENABLED = new InjectionToken<boolean>('MATOMO_ROUTER_ENABLED', {\n  factory() {\n    return false;\n  },\n});\n\n/** Injection token for {@link MatomoConfiguration} */\nexport const MATOMO_CONFIGURATION = new InjectionToken<MatomoConfiguration>('MATOMO_CONFIGURATION');\n\n/**\n * For internal use only. Injection token for {@link InternalMatomoConfiguration}\n *\n */\nexport const INTERNAL_MATOMO_CONFIGURATION = new InjectionToken<InternalMatomoConfiguration>(\n  'INTERNAL_MATOMO_CONFIGURATION',\n);\n\nexport function createInternalMatomoConfiguration(): InternalMatomoConfiguration {\n  const { mode, requireConsent, ...restConfig } = requireNonNull(\n    inject(MATOMO_CONFIGURATION, { optional: true }),\n    CONFIG_NOT_FOUND,\n  );\n\n  return {\n    mode: mode ? coerceInitializationMode(mode) : undefined,\n    disabled: false,\n    enableLinkTracking: true,\n    trackAppInitialLoad: !inject(MATOMO_ROUTER_ENABLED),\n    requireConsent: requireConsent ? coerceConsentRequirement(requireConsent) : 'none',\n    enableJSErrorTracking: false,\n    runOutsideAngularZone: false,\n    disableCampaignParameters: false,\n    acceptDoNotTrack: false,\n    ...restConfig,\n  };\n}\n\n/**\n * For internal use only. Injection token for deferred {@link InternalMatomoConfiguration}.\n *\n */\nexport const DEFERRED_INTERNAL_MATOMO_CONFIGURATION =\n  new InjectionToken<DeferredInternalMatomoConfiguration>('DEFERRED_INTERNAL_MATOMO_CONFIGURATION');\n\nexport function createDeferredInternalMatomoConfiguration(): DeferredInternalMatomoConfiguration {\n  const base = inject(INTERNAL_MATOMO_CONFIGURATION);\n  let resolveFn: ((configuration: InternalMatomoConfiguration) => void) | undefined;\n  const configuration = new Promise<InternalMatomoConfiguration>(resolve => (resolveFn = resolve));\n\n  return {\n    configuration,\n    markReady(configuration) {\n      requireNonNull(\n        resolveFn,\n        'resolveFn',\n      )({\n        ...base,\n        ...configuration,\n      });\n    },\n  };\n}\n\n/**\n * For internal use only. Injection token for fully loaded async {@link InternalMatomoConfiguration}.\n *\n */\nexport const ASYNC_INTERNAL_MATOMO_CONFIGURATION = new InjectionToken<\n  Promise<InternalMatomoConfiguration>\n>('ASYNC_INTERNAL_MATOMO_CONFIGURATION');\n\n/**\n * For internal use only. Module configuration merged with default values.\n *\n */\nexport type InternalMatomoConfiguration = Omit<MatomoConfiguration, 'mode' | 'requireConsent'> &\n  Omit<Required<BaseMatomoConfiguration>, 'requireConsent'> & {\n    mode?: MatomoInitializationBehavior;\n    requireConsent: MatomoConsentRequirement;\n  };\n\nexport interface DeferredInternalMatomoConfiguration {\n  readonly configuration: Promise<InternalMatomoConfiguration>;\n\n  markReady(configuration: InternalMatomoConfiguration): void;\n}\n\n/**\n * - __auto__: automatically inject matomo script using provided configuration\n * - __manual__: do not inject Matomo script. In this case, initialization script must be provided\n * - __deferred__: automatically inject matomo script when deferred tracker configuration is provided using `MatomoInitializerService.initializeTracker()`.\n */\nexport type MatomoInitializationBehavior = 'auto' | 'manual' | 'deferred';\n\n/** @deprecated Use {@link MatomoInitializationBehavior} instead */\nexport enum MatomoInitializationMode {\n  /**\n   * Automatically inject matomo script using provided configuration\n   *\n   * @deprecated Use `'auto'` instead\n   */\n  AUTO,\n  /**\n   * Do not inject Matomo script. In this case, initialization script must be provided\n   *\n   * @deprecated Use `'manual'` instead\n   */\n  MANUAL,\n  /**\n   * Automatically inject matomo script when deferred tracker configuration is provided using `MatomoInitializerService.initializeTracker()`.\n   *\n   * @deprecated Use `'deferred'` instead\n   */\n  AUTO_DEFERRED,\n}\n\nexport function coerceInitializationMode(\n  value: MatomoInitializationBehaviorInput,\n): MatomoInitializationBehavior {\n  switch (value) {\n    case MatomoInitializationMode.AUTO:\n      return 'auto';\n    case MatomoInitializationMode.MANUAL:\n      return 'manual';\n    case MatomoInitializationMode.AUTO_DEFERRED:\n      return 'deferred';\n    default:\n      return value;\n  }\n}\n\nexport type MatomoConsentRequirement = 'none' | 'cookie' | 'tracking';\n\n/** @deprecated Use {@link MatomoConsentRequirement} instead */\nexport enum MatomoConsentMode {\n  /** Do not require any consent, always track users */\n  NONE,\n  /** Require cookie consent */\n  COOKIE,\n  /** Require tracking consent */\n  TRACKING,\n}\n\nexport function coerceConsentRequirement(\n  value: MatomoConsentMode | MatomoConsentRequirement,\n): MatomoConsentRequirement {\n  switch (value) {\n    case MatomoConsentMode.NONE:\n      return 'none';\n    case MatomoConsentMode.COOKIE:\n      return 'cookie';\n    case MatomoConsentMode.TRACKING:\n      return 'tracking';\n    default:\n      return value;\n  }\n}\n\nexport interface MatomoTrackerConfiguration {\n  /** Matomo site id */\n  siteId: number | string;\n\n  /** Matomo server url */\n  trackerUrl: string;\n\n  /** The trackerUrlSuffix is always appended to the trackerUrl. It defaults to matomo.php */\n  trackerUrlSuffix?: string;\n}\n\nexport interface MultiTrackersConfiguration {\n  /**\n   * Configure multiple tracking servers. <b>Order matters: if no custom script url is\n   * provided, Matomo script will be downloaded from first tracker.</b>\n   */\n  trackers: MatomoTrackerConfiguration[];\n}\n\nexport interface BaseMatomoConfiguration {\n  /** Set to `true` to disable tracking */\n  disabled?: boolean;\n\n  /** If `true`, track a page view when app loads (default `false`) */\n  trackAppInitialLoad?: boolean;\n\n  /**\n   * Configure link clicks tracking\n   *\n   * If `true` (the default value), enable link tracking, excluding middle-clicks and contextmenu events.\n   * If `enable-pseudo`, enable link tracking, including middle-clicks and contextmenu events.\n   * If `false`, to disable this Matomo feature (default `true`).\n   *\n   * Used when {@link trackAppInitialLoad} is `true` and when automatic page tracking is enabled.\n   *\n   * @see {@link MatomoTracker.enableLinkTracking} for more details\n   */\n  enableLinkTracking?: boolean | 'enable-pseudo';\n\n  /** Set to `true` to not track users who opt out of tracking using <i>Do Not Track</i> setting */\n  acceptDoNotTrack?: boolean;\n\n  /**\n   * Configure user consent requirement\n   *\n   * To identify whether you need to ask for any consent, you need to determine whether your lawful\n   * basis for processing personal data is \"Consent\" or \"Legitimate interest\", or whether you can\n   * avoid collecting personal data altogether.\n   *\n   * Matomo differentiates between cookie and tracking consent:\n   * - In the context of <b>tracking consent</b> no cookies will be used and no tracking request\n   *   will be sent unless consent was given. As soon as consent was given, tracking requests will\n   *   be sent and cookies will be used.\n   * - In the context of <b>cookie consent</b> tracking requests will always be sent. However,\n   *   cookies will be only used if consent for storing and using cookies was given by the user.\n   *\n   * Note that cookies impact reports accuracy.\n   *\n   * See Matomo guide: {@link https://developer.matomo.org/guides/tracking-consent}\n   */\n  requireConsent?: MatomoConsentRequirement | MatomoConsentMode;\n\n  /** Set to `true` to enable Javascript errors tracking as <i>events</i> (with category <i>JavaScript Errors</i>) */\n  enableJSErrorTracking?: boolean;\n\n  /** Set to `true` to run matomo calls outside of angular NgZone. This may fix angular freezes. */\n  runOutsideAngularZone?: boolean;\n\n  /**\n   * Set to `true` to avoid sending campaign parameters\n   *\n   * By default, Matomo will send campaign parameters (mtm, utm, etc.) to the tracker and record that information.\n   * Some privacy regulations may not allow for this information to be collected.\n   *\n   * <b>This is available as of Matomo 5.1 only.</b>\n   */\n  disableCampaignParameters?: boolean;\n}\n\n/**\n * Mapping type to extend input types with legacy `MatomoInitializationMode` type\n *\n * TODO remove when `MatomoInitializationMode` is removed\n */\nexport interface MatomoInitializationBehaviorInputMapping {\n  manual: MatomoInitializationMode.MANUAL;\n  auto: MatomoInitializationMode.AUTO;\n  deferred: MatomoInitializationMode.AUTO_DEFERRED;\n}\n\n/**\n * Special type to map a `MatomoInitializationBehavior` to either itself or the legacy equivalent `MatomoInitializationMode`\n *\n * @example\n * MatomoInitializationBehaviorInput<'auto'>\n *   // Equivalent to:\n * 'auto' | MatomoInitializationMode.AUTO\n *\n * MatomoInitializationBehaviorInput<'manual'>\n *   // Equivalent to:\n * 'manual' | MatomoInitializationMode.MANUAL\n *\n * MatomoInitializationBehaviorInput<'deferred'>\n *   // Equivalent to:\n * 'deferred' | MatomoInitializationMode.AUTO_DEFERRED\n *\n * TODO remove when `MatomoInitializationMode` is removed and use `MatomoInitializationBehavior` instead\n */\nexport type MatomoInitializationBehaviorInput<\n  T extends MatomoInitializationBehavior = MatomoInitializationBehavior,\n> = T | MatomoInitializationBehaviorInputMapping[T];\n\nexport interface BaseAutoMatomoConfiguration<M extends 'auto' | 'deferred' = 'auto'> {\n  /**\n   * Set the script initialization mode (default is `'auto'`)\n   *\n   * @see MatomoInitializationBehavior\n   */\n  mode?: MatomoInitializationBehaviorInput<M>;\n\n  /** Matomo script url (default is `matomo.js` appended to main tracker url) */\n  scriptUrl: string;\n}\n\ntype Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };\ntype XOR<T, U> = T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;\ntype XOR3<T, U, V> = XOR<T, XOR<U, V>>;\n\nexport type ManualMatomoConfiguration = {\n  /**\n   * Set the script initialization mode (default is `'auto'`)\n   *\n   * @see MatomoInitializationBehavior\n   */\n  mode: MatomoInitializationBehaviorInput<'manual'>;\n};\n\nexport type DeferredMatomoConfiguration = {\n  /**\n   * Set the script initialization mode (default is `'auto'`)\n   *\n   * @see MatomoInitializationBehavior\n   */\n  mode: MatomoInitializationBehaviorInput<'deferred'>;\n};\n\nexport type ExplicitAutoConfiguration<M extends 'auto' | 'deferred' = 'auto'> = Partial<\n  BaseAutoMatomoConfiguration<M>\n> &\n  XOR<MatomoTrackerConfiguration, MultiTrackersConfiguration>;\n\nexport type EmbeddedAutoConfiguration<M extends 'auto' | 'deferred' = 'auto'> =\n  BaseAutoMatomoConfiguration<M> & Partial<MultiTrackersConfiguration>;\n\nexport type AutoMatomoConfiguration<M extends 'auto' | 'deferred' = 'auto'> = XOR<\n  ExplicitAutoConfiguration<M>,\n  EmbeddedAutoConfiguration<M>\n>;\n\nexport type MatomoConfiguration = BaseMatomoConfiguration &\n  XOR3<AutoMatomoConfiguration, ManualMatomoConfiguration, DeferredMatomoConfiguration>;\n\nexport function isAutoConfigurationMode(\n  config: MatomoConfiguration | InternalMatomoConfiguration,\n): config is AutoMatomoConfiguration {\n  return (\n    config.mode == null || config.mode === 'auto' || config.mode === MatomoInitializationMode.AUTO\n  );\n}\n\nfunction hasMainTrackerConfiguration<M extends 'auto' | 'deferred'>(\n  config: AutoMatomoConfiguration<M>,\n): config is ExplicitAutoConfiguration<M> {\n  // If one is undefined, both should be\n  return config.siteId != null && config.trackerUrl != null;\n}\n\nexport function isEmbeddedTrackerConfiguration<M extends 'auto' | 'deferred'>(\n  config: AutoMatomoConfiguration<M>,\n): config is EmbeddedAutoConfiguration<M> {\n  return config.scriptUrl != null && !hasMainTrackerConfiguration(config);\n}\n\nexport function isExplicitTrackerConfiguration<M extends 'auto' | 'deferred'>(\n  config: AutoMatomoConfiguration<M>,\n): config is ExplicitAutoConfiguration<M> {\n  return hasMainTrackerConfiguration(config) || isMultiTrackerConfiguration(config);\n}\n\nexport function isMultiTrackerConfiguration(\n  config: AutoMatomoConfiguration<'auto' | 'deferred'>,\n): config is MultiTrackersConfiguration {\n  return Array.isArray(config.trackers);\n}\n\nexport function getTrackersConfiguration(\n  config: ExplicitAutoConfiguration<'auto' | 'deferred'>,\n): MatomoTrackerConfiguration[] {\n  return isMultiTrackerConfiguration(config)\n    ? config.trackers\n    : [\n        {\n          trackerUrl: config.trackerUrl,\n          siteId: config.siteId,\n          trackerUrlSuffix: config.trackerUrlSuffix,\n        },\n      ];\n}\n","declare let window: MatomoHolder;\n\nexport interface MatomoHolder extends Window {\n  _paq: { push: Array<unknown>['push'] };\n}\n\nexport function initializeMatomoHolder() {\n  window._paq = window._paq || [];\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, NgZone, PLATFORM_ID } from '@angular/core';\nimport { initializeMatomoHolder, MatomoHolder } from '../holder';\nimport { Getters, NonEmptyArray, PrefixedType } from '../utils/types';\nimport { INTERNAL_MATOMO_CONFIGURATION } from './configuration';\n\ndeclare const window: MatomoHolder;\n\ntype ReturnType<T> = T extends (...args: any) => infer R ? R : any;\n\nfunction trimTrailingUndefinedElements<T>(array: T[]): T[] {\n  const trimmed = [...array];\n\n  while (trimmed.length > 0 && trimmed[trimmed.length - 1] === undefined) {\n    trimmed.pop();\n  }\n\n  return trimmed;\n}\n\nexport type InternalMatomoTrackerType = Pick<\n  InternalMatomoTracker<unknown, string>,\n  'get' | 'push' | 'pushFn'\n>;\n\nexport function createInternalMatomoTracker(): InternalMatomoTrackerType {\n  const disabled = inject(INTERNAL_MATOMO_CONFIGURATION).disabled;\n  const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n  return disabled || !isBrowser ? new NoopMatomoTracker() : new InternalMatomoTracker();\n}\n\n@Injectable()\nexport class InternalMatomoTracker<MATOMO, PREFIX extends string = ''> {\n  private readonly ngZone = inject(NgZone);\n  private readonly config = inject(INTERNAL_MATOMO_CONFIGURATION);\n\n  constructor() {\n    initializeMatomoHolder();\n  }\n\n  /** Asynchronously call provided method name on matomo tracker instance */\n  get<K extends Getters<PrefixedType<MATOMO, PREFIX>>>(\n    getter: K extends keyof PrefixedType<MATOMO, PREFIX> ? K : never,\n  ): Promise<ReturnType<PrefixedType<MATOMO, PREFIX>[K]>> {\n    return this.pushFn(matomo => (matomo[getter as keyof PrefixedType<MATOMO, PREFIX>] as any)());\n  }\n\n  pushFn<T>(fn: (matomo: PrefixedType<MATOMO, PREFIX>) => T): Promise<T> {\n    return new Promise(resolve => {\n      this.push([\n        function (this: PrefixedType<MATOMO, PREFIX>): void {\n          resolve(fn(this));\n        },\n      ]);\n    });\n  }\n\n  push(args: NonEmptyArray<unknown>): void {\n    if (this.config.runOutsideAngularZone) {\n      this.ngZone.runOutsideAngular(() => {\n        window._paq.push(trimTrailingUndefinedElements(args));\n      });\n    } else {\n      window._paq.push(trimTrailingUndefinedElements(args));\n    }\n  }\n}\n\n@Injectable()\nexport class NoopMatomoTracker<MATOMO = unknown, PREFIX extends string = ''>\n  implements InternalMatomoTrackerType\n{\n  /** Asynchronously call provided method name on matomo tracker instance */\n  async get<K extends keyof PrefixedType<MATOMO, PREFIX>>(_: K): Promise<never> {\n    return Promise.reject('MatomoTracker is disabled');\n  }\n\n  push(_: unknown[]): void {\n    // No-op\n  }\n\n  async pushFn<T>(_: (matomo: PrefixedType<MATOMO, PREFIX>) => T): Promise<T> {\n    return Promise.reject('MatomoTracker is disabled');\n  }\n}\n","import { ApplicationInitStatus, inject, Injectable, Provider } from '@angular/core';\nimport {\n  InternalMatomoTracker,\n  InternalMatomoTrackerType,\n} from '../tracker/internal-matomo-tracker.service';\nimport { PrefixedType } from '../utils/types';\n\nexport function provideTestingTracker(): Provider[] {\n  return [\n    MatomoTestingTracker,\n    {\n      provide: InternalMatomoTracker,\n      useExisting: MatomoTestingTracker,\n    },\n  ];\n}\n\n@Injectable()\nexport class MatomoTestingTracker<MATOMO = unknown, PREFIX extends string = ''>\n  implements InternalMatomoTrackerType\n{\n  private readonly initStatus = inject(ApplicationInitStatus);\n\n  /** Get list of all calls until initialization */\n  callsOnInit: unknown[][] = [];\n  /** Get list of all calls after initialization */\n  callsAfterInit: unknown[][] = [];\n\n  /** Get a copy of all calls since application startup */\n  get calls(): unknown[] {\n    return [...this.callsOnInit, ...this.callsAfterInit];\n  }\n\n  countCallsAfterInit(command: string): number {\n    return this.callsAfterInit.filter(call => call[0] === command).length;\n  }\n\n  reset() {\n    this.callsOnInit = [];\n    this.callsAfterInit = [];\n  }\n\n  /** Asynchronously call provided method name on matomo tracker instance */\n  async get<K extends keyof PrefixedType<MATOMO, PREFIX>>(_: K): Promise<never> {\n    return Promise.reject('MatomoTracker is disabled');\n  }\n\n  push(arg: unknown[]): void {\n    if (this.initStatus.done) {\n      this.callsAfterInit.push(arg);\n    } else {\n      this.callsOnInit.push(arg);\n    }\n  }\n\n  async pushFn<T>(_: (matomo: PrefixedType<MATOMO, PREFIX>) => T): Promise<T> {\n    return Promise.reject('MatomoTracker is disabled');\n  }\n}\n","export const ALREADY_INJECTED_ERROR = 'Matomo trackers have already been initialized';\nexport const ALREADY_INITIALIZED_ERROR = 'Matomo has already been initialized';\n","import { DestroyRef, inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { NonEmptyReadonlyArray, RequireAtLeastOne } from '../utils/types';\nimport { InternalMatomoTracker } from './internal-matomo-tracker.service';\n\nexport interface MatomoECommerceItem {\n  productSKU: string;\n  productName?: string;\n  productCategory?: string;\n  price?: number;\n  quantity?: number;\n}\n\nexport type MatomoECommerceItemView = Omit<MatomoECommerceItem, 'quantity'>;\nexport type MatomoECommerceCategoryView = Required<Pick<MatomoECommerceItem, 'productCategory'>>;\nexport type MatomoECommerceView = MatomoECommerceItemView | MatomoECommerceCategoryView;\n\nexport type PagePerformanceTimings = RequireAtLeastOne<{\n  networkTimeInMs?: number;\n  serverTimeInMs?: number;\n  transferTimeInMs?: number;\n  domProcessingTimeInMs?: number;\n  domCompletionTimeInMs?: number;\n  onloadTimeInMs?: number;\n}>;\n\nfunction isECommerceCategoryView(\n  param: string | MatomoECommerceView,\n): param is MatomoECommerceCategoryView {\n  return (\n    typeof param === 'object' && Object.keys(param).length === 1 && param.productCategory != null\n  );\n}\n\nfunction isECommerceItemView(\n  param: string | MatomoECommerceView,\n): param is MatomoECommerceItemView {\n  return typeof param === 'object' && 'productSKU' in param;\n}\n\n/** Matomo's internal tracker instance */\nexport interface MatomoInstance {\n  getMatomoUrl(): string;\n\n  getPiwikUrl(): string;\n\n  getCurrentUrl(): string;\n\n  getLinkTrackingTimer(): number;\n\n  getVisitorId(): string;\n\n  // see https://github.com/matomo-org/matomo/blob/3cee577117ad92db739dd3f22571520207eca02e/js/piwik.js#L3306\n  getVisitorInfo(): unknown[];\n\n  /**\n   *\n   * @return array of getAttributionCampaignName, getAttributionCampaignKeyword, getAttributionReferrerTimestamp, getAttributionReferrerUrl\n   */\n  getAttributionInfo(): string[];\n\n  getAttributionCampaignName(): string;\n\n  getAttributionCampaignKeyword(): string;\n\n  getAttributionReferrerTimestamp(): string;\n\n  getAttributionReferrerUrl(): string;\n\n  getUserId(): string;\n\n  getPageViewId(): string;\n\n  getCustomData(): unknown;\n\n  getCustomVariable(index: number, scope: string): string;\n\n  getCustomDimension(customDimensionId: number): string;\n\n  getEcommerceItems(): MatomoECommerceItem[];\n\n  hasCookies(): boolean;\n\n  getCrossDomainLinkingUrlParameter(): string;\n\n  hasRememberedConsent(): boolean;\n\n  getRememberedConsent(): number | string;\n\n  getRememberedCookieConsent(): number | string;\n\n  isConsentRequired(): boolean;\n\n  areCookiesEnabled(): boolean;\n\n  isUserOptedOut(): boolean;\n\n  getCustomPagePerformanceTiming(): string;\n\n  getExcludedReferrers(): string[];\n}\n\n@Injectable()\nexport class MatomoTracker {\n  private readonly delegate: InternalMatomoTracker<MatomoInstance> = inject(InternalMatomoTracker);\n\n  private readonly _pageViewTracked = new Subject<void>();\n\n  readonly pageViewTracked = this._pageViewTracked.asObservable();\n\n  constructor() {\n    inject(DestroyRef).onDestroy(() => this._pageViewTracked.complete());\n  }\n\n  /**\n   * Logs a visit to this page.\n   *\n   * @param [customTitle] Optional title of the visited page.\n   */\n  trackPageView(customTitle?: string): void {\n    this.delegate.push(['trackPageView', customTitle]);\n    this._pageViewTracked.next();\n  }\n\n  /**\n   * Logs an event with an event category (Videos, Music, Games…), an event action (Play, Pause, Duration,\n   * Add Playlist, Downloaded, Clicked…), and an optional event name and optional numeric value.\n   *\n   * @param category Category of the event.\n   * @param action Action of the event.\n   * @param [name] Optional name of the event.\n   * @param [value] Optional value for the event.\n   * @param [customData] Optional custom data for the event.\n   */\n  trackEvent(\n    category: string,\n    action: string,\n    name?: string,\n    value?: number,\n    customData?: unknown,\n  ): void {\n    this.delegate.push(['trackEvent', category, action, name, value, customData]);\n  }\n\n  /**\n   * Logs an internal site search for a specific keyword, in an optional category,\n   * specifying the optional count of search results in the page.\n   *\n   * @param keyword Keywords of the search query.\n   * @param [category] Optional category of the search query.\n   * @param [resultsCount] Optional number of results returned by the search query.\n   * @param [customData] Optional custom data for the search query.\n   */\n  trackSiteSearch(\n    keyword: string,\n    category?: string,\n    resultsCount?: number,\n    customData?: unknown,\n  ): void {\n    this.delegate.push(['trackSiteSearch', keyword, category, resultsCount, customData]);\n  }\n\n  /**\n   * Manually logs a conversion for the numeric goal ID, with an optional numeric custom revenue customRevenue.\n   *\n   * @param idGoal numeric ID of the goal to log a conversion for.\n   * @param [customRevenue] Optional custom revenue to log for the goal.\n   * @param [customData] Optional custom data for the goal.\n   */\n  trackGoal(idGoal: number, customRevenue?: number, customData?: unknown): void {\n    this.delegate.push(['trackGoal', idGoal, customRevenue, customData]);\n  }\n\n  /**\n   * Manually logs a click from your own code.\n   *\n   * @param url Full URL which is to be tracked as a click.\n   * @param linkType Either 'link' for an outlink or 'download' for a download.\n   * @param [customData] Optional custom data for the link.\n   */\n  trackLink(url: string, linkType: 'link' | 'download', customData?: unknown): void {\n    this.delegate.push(['trackLink', url, linkType, customData]);\n  }\n\n  /**\n   * Scans the entire DOM for all content blocks and tracks all impressions once the DOM ready event has been triggered.\n   *\n   */\n  trackAllContentImpressions(): void {\n    this.delegate.push(['trackAllContentImpressions']);\n  }\n\n  /**\n   * Scans the entire DOM for all content blocks as soon as the page is loaded.<br />\n   * It tracks an impression only if a content block is actually visible.\n   *\n   * @param checkOnScroll If true, checks for new content blocks while scrolling the page.\n   * @param timeInterval Duration, in milliseconds, between two checks upon scroll.\n   */\n  trackVisibleContentImpressions(checkOnScroll: boolean, timeInterval: number): void {\n    this.delegate.push(['trackVisibleContentImpressions', checkOnScroll, timeInterval]);\n  }\n\n  /**\n   * Scans the given DOM node and its children for content blocks and tracks an impression for them\n   * if no impression was already tracked for it.\n   *\n   * @param node DOM node in which to look for content blocks which have not been previously tracked.\n   */\n  trackContentImpressionsWithinNode(node: Node): void {\n    this.delegate.push(['trackContentImpressionsWithinNode', node]);\n  }\n\n  /**\n   * Tracks an interaction with the given DOM node/content block.\n   *\n   * @param node DOM node for which to track a content interaction.\n   * @param contentInteraction Name of the content interaction.\n   */\n  trackContentInteractionNode(node: Node, contentInteraction: string): void {\n    this.delegate.push(['trackContentInteractionNode', node, contentInteraction]);\n  }\n\n  /**\n   * Tracks a content impression using the specified values.\n   *\n   * @param contentName Content name.\n   * @param contentPiece Content piece.\n   * @param contentTarget Content target.\n   */\n  trackContentImpression(contentName: string, contentPiece: string, contentTarget: string): void {\n    this.delegate.push(['trackContentImpression', contentName, contentPiece, contentTarget]);\n  }\n\n  /**\n   * Tracks a content interaction using the specified values.\n   *\n   * @param contentInteraction Content interaction.\n   * @param contentName Content name.\n   * @param contentPiece Content piece.\n   * @param contentTarget Content target.\n   */\n  trackContentInteraction(\n    contentInteraction: string,\n    contentName: string,\n    contentPiece: string,\n    contentTarget: string,\n  ): void {\n    this.delegate.push([\n      'trackContentInteraction',\n      contentInteraction,\n      contentName,\n      contentPiece,\n      contentTarget,\n    ]);\n  }\n\n  /**\n   * Logs all found content blocks within a page to the console. This is useful to debug / test content tracking.\n   */\n  logAllContentBlocksOnPage(): void {\n    this.delegate.push(['logAllContentBlocksOnPage']);\n  }\n\n  /**\n   * Send a ping request\n   * <p>\n   * Ping requests do not track new actions.\n   * If they are sent within the standard visit length, they will update the existing visit time.\n   * If sent after the standard visit length, ping requests will be ignored.\n   * See also {@link #enableHeartBeatTimer enableHeartBeatTimer()}.\n   *\n   * @see enableHeartBeatTimer\n   */\n  ping(): void {\n    this.delegate.push(['ping']);\n  }\n\n  /**\n   * Install a Heart beat timer that will regularly send requests to Matomo in order to better measure the time spent on the page.<br />\n   * These requests will be sent only when the user is actively viewing the page (when the tab is active and in focus).<br />\n   * These requests will not track additional actions or page views.<br />\n   * By default, the delay is set to 15 seconds.\n   *\n   * @param delay Delay, in seconds, between two heart beats to the server.\n   */\n  enableHeartBeatTimer(delay: number): void {\n    this.delegate.push(['enableHeartBeatTimer', delay]);\n  }\n\n  /**\n   * Installs link tracking on all applicable link elements.\n   *\n   * @param usePseudoClickHandler Set to `true` to use pseudo click-handler (treat middle click and open contextmenu as\n   * left click).<br />\n   * A right click (or any click that opens the context menu) on a link will be tracked as clicked even if \"Open in new tab\"\n   * is not selected.<br />\n   * If \"false\" (default), nothing will be tracked on open context menu or middle click.\n   */\n  enableLinkTracking(usePseudoClickHandler = false): void {\n    this.delegate.push(['enableLinkTracking', usePseudoClickHandler]);\n  }\n\n  /** Disables page performance tracking */\n  disablePerformanceTracking(): void {\n    this.delegate.push(['disablePerformanceTracking']);\n  }\n\n  /**\n   * Enables cross domain linking. By default, the visitor ID that identifies a unique visitor is stored in the browser's\n   * first party cookies.<br />\n   * This means the cookie can only be accessed by pages on the same domain.<br />\n   * If you own multiple domains and would like to track all the actions and pageviews of a specific visitor into the same visit,\n   * you may enable cross domain linking.<br />\n   * Whenever a user clicks on a link it will append a URL parameter pk_vid to the clicked URL which forwards the current\n   * visitor ID value to the page of the different domain.\n   *\n   */\n  enableCrossDomainLinking(): void {\n    this.delegate.push(['enableCrossDomainLinking']);\n  }\n\n  /**\n   * By default, the two visits across domains will be linked together when the link is clicked and the page is loaded within\n   * a 180 seconds timeout window.\n   *\n   * @param timeout Timeout, in seconds, between two actions across two domains before creating a new visit.\n   */\n  setCrossDomainLinkingTimeout(timeout: number): void {\n    this.delegate.push(['setCrossDomainLinkingTimeout', timeout]);\n  }\n\n  /**\n   * Get the query parameter to append to links to handle cross domain linking.\n   *\n   * Use this to add cross domain support for links that are added to the DOM dynamically\n   */\n  getCrossDomainLinkingUrlParameter(): Promise<string> {\n    return this.delegate.get('getCrossDomainLinkingUrlParameter');\n  }\n\n  /**\n   * Overrides document.title\n   *\n   * @param title Title of the document.\n   */\n  setDocumentTitle(title: string): void {\n    this.delegate.push(['setDocumentTitle', title]);\n  }\n\n  /**\n   * Set array of hostnames or domains to be treated as local.<br />\n   * For wildcard subdomains, you can use: `setDomains('.example.com')`; or `setDomains('*.example.com');`.<br />\n   * You can also specify a path along a domain: `setDomains('*.example.com/subsite1');`.\n   *\n   * @param domains List of hostnames or domains, with or without path, to be treated as local.\n   */\n  setDomains(domains: string[]): void {\n    this.delegate.push(['setDomains', domains]);\n  }\n\n  /**\n   * Override the page's reported URL.\n   *\n   * @param url URL to be reported for the page.\n   */\n  setCustomUrl(url: string): void {\n    this.delegate.push(['setCustomUrl', url]);\n  }\n\n  /**\n   * Overrides the detected Http-Referer.\n   *\n   * @param url URL to be reported for the referer.\n   */\n  setReferrerUrl(url: string): void {\n    this.delegate.push(['setReferrerUrl', url]);\n  }\n\n  /**\n   * Specifies the website ID.<br />\n   * Redundant: can be specified in getTracker() constructor.\n   *\n   * @param siteId Site ID for the tracker.\n   */\n  setSiteId(siteId: number | string): void {\n    this.delegate.push(['setSiteId', siteId]);\n  }\n\n  /**\n   * Specify the Matomo HTTP API URL endpoint. Points to the root directory of matomo,\n   * e.g. http://matomo.example.org/ or https://example.org/matomo/.<br />\n   * This function is only useful when the 'Overlay' report is not working.<br />\n   * By default, you do not need to use this function.\n   *\n   * @param url URL for Matomo HTTP API endpoint.\n   */\n  setApiUrl(url: string): void {\n    this.delegate.push(['setApiUrl', url]);\n  }\n\n  /**\n   * Specifies the Matomo server URL.<br />\n   * Redundant: can be specified in getTracker() constructor.\n   *\n   * @param url URL for the Matomo server.\n   */\n  setTrackerUrl(url: string): void {\n    this.delegate.push(['setTrackerUrl', url]);\n  }\n\n  /**\n   * Register an additional Matomo server<br />\n   * Redundant: can be specified in getTracker() constructor.\n   *\n   * @param url URL for the Matomo server.\n   * @param siteId Site ID for the tracker\n   */\n  addTracker(url: string, siteId: number | string): void {\n    this.delegate.push(['addTracker', url, siteId]);\n  }\n\n  /**\n   * Returns the Matomo server URL.\n   *\n   * @returns Promise for the Matomo server URL.\n   */\n  getMatomoUrl(): Promise<string> {\n    return this.delegate.get('getMatomoUrl');\n  }\n\n  /** @deprecated use `getMatomoUrl` instead */\n  getPiwikUrl(): Promise<string> {\n    return this.delegate.get('getPiwikUrl');\n  }\n\n  /**\n   * Returns the current url of the page that is currently being visited.<br />\n   * If a custom URL was set before calling this method, the custom URL will be returned.\n   *\n   * @returns Promise for the URL of the current page.\n   */\n  getCurrentUrl(): Promise<string> {\n    return this.delegate.get('getCurrentUrl');\n  }\n\n  /**\n   * Set classes to be treated as downloads (in addition to piwik_download).\n   *\n   * @param classes Class, or list of classes to be treated as downloads.\n   */\n  setDownloadClasses(classes: string | string[]): void {\n    this.delegate.push(['setDownloadClasses', classes]);\n  }\n\n  /**\n   * Set list of file extensions to be recognized as downloads.<br />\n   * Example: `'docx'` or `['docx', 'xlsx']`.\n   *\n   * @param extensions Extension, or list of extensions to be recognized as downloads.\n   */\n  setDownloadExtensions(extensions: string | string[]): void {\n    this.delegate.push(['setDownloadExtensions', extensions]);\n  }\n\n  /**\n   * Set additional file extensions to be recognized as downloads.<br />\n   * Example: `'docx'` or `['docx', 'xlsx']`.\n   *\n   * @param extensions Extension, or list of extensions to be recognized as downloads.\n   */\n  addDownloadExtensions(extensions: string | string[]): void {\n    this.delegate.push(['addDownloadExtensions', extensions]);\n  }\n\n  /**\n   * Set file extensions to be removed from the list of download file extensions.<br />\n   * Example: `'docx'` or `['docx', 'xlsx']`.\n   *\n   * @param extensions Extension, or list of extensions not to be recognized as downloads.\n   */\n  removeDownloadExtensions(extensions: string | string[]): void {\n    this.delegate.push(['removeDownloadExtensions', extensions]);\n  }\n\n  /**\n   * Set classes to be ignored if present in link (in addition to piwik_ignore).\n   *\n   * @param classes Class, or list of classes to be ignored if present in link.\n   */\n  setIgnoreClasses(classes: string | string[]): void {\n    this.delegate.push(['setIgnoreClasses', classes]);\n  }\n\n  /**\n   * Set classes to be treated as outlinks (in addition to piwik_link).\n   *\n   * @param classes Class, or list of classes to be treated as outlinks.\n   */\n  setLinkClasses(classes: string | string[]): void {\n    this.delegate.push(['setLinkClasses', classes]);\n  }\n\n  /**\n   * Set delay for link tracking (in milliseconds).\n   *\n   * @param delay Delay, in milliseconds, for link tracking.\n   */\n  setLinkTrackingTimer(delay: number): void {\n    this.delegate.push(['setLinkTrackingTimer', delay]);\n  }\n\n  /**\n   * Returns delay for link tracking.\n   *\n   * @returns Promise for the delay in milliseconds.\n   */\n  getLinkTrackingTimer(): Promise<number> {\n    return this.delegate.get('getLinkTrackingTimer');\n  }\n\n  /**\n   * Set to true to not record the hash tag (anchor) portion of URLs.\n   *\n   * @param value If true, the hash tag portion of the URLs won't be recorded.\n   */\n  discardHashTag(value: boolean): void {\n    this.delegate.push(['discardHashTag', value]);\n  }\n\n  /**\n   * By default, Matomo uses the browser DOM Timing API to accurately determine the time it takes to generate and download\n   * the page. You may overwrite this value with this function.\n   *\n   * <b>This feature has been deprecated since Matomo 4. Any call will be ignored with Matomo 4. Use {@link setPagePerformanceTiming setPagePerformanceTiming()} instead.</b>\n   *\n   * @param generationTime Time, in milliseconds, of the page generation.\n   */\n  setGenerationTimeMs(generationTime: number): void {\n    this.delegate.push(['setGenerationTimeMs', generationTime]);\n  }\n\n  /**\n   * Manually set performance metrics in milliseconds in a Single Page App or when Matomo cannot detect some metrics.\n   *\n   * You can set parameters to undefined if you do not want to track this metric. At least one parameter needs to be set.\n   * The set performance timings will be tracked only on the next page view. If you track another page view then you will need to set the performance timings again.\n   *\n   * <b>Requires Matomo 4.5 or newer.</b>\n   *\n   */\n  setPagePerformanceTiming(timings: PagePerformanceTimings): void;\n  /**\n   * Manually set performance metrics in milliseconds in a Single Page App or when Matomo cannot detect some metrics.\n   *\n   * You can set parameters to undefined if you do not want to track this metric. At least one parameter needs to be set.\n   * The set performance timings will be tracked only on the next page view. If you track another page view then you will need to set the performance timings again.\n   *\n   * <b>Requires Matomo 4.5 or newer.</b>\n   *\n   */\n  setPagePerformanceTiming(\n    networkTimeInMs: number | undefined,\n    serverTimeInMs?: number,\n    transferTimeInMs?: number,\n    domProcessingTimeInMs?: number,\n    domCompletionTimeInMs?: number,\n    onloadTimeInMs?: number,\n  ): void;\n  setPagePerformanceTiming(\n    networkTimeInMsOrTimings: PagePerformanceTimings | number | undefined,\n    serverTimeInMs?: number,\n    transferTimeInMs?: number,\n    domProcessingTimeInMs?: number,\n    domCompletionTimeInMs?: number,\n    onloadTimeInMs?: number,\n  ): void {\n    let networkTimeInMs: number | undefined;\n\n    if (typeof networkTimeInMsOrTimings === 'object' && !!networkTimeInMsOrTimings) {\n      networkTimeInMs = networkTimeInMsOrTimings.networkTimeInMs;\n      serverTimeInMs = networkTimeInMsOrTimings.serverTimeInMs;\n      transferTimeInMs = networkTimeInMsOrTimings.transferTimeInMs;\n      domProcessingTimeInMs = networkTimeInMsOrTimings.domProcessingTimeInMs;\n      domCompletionTimeInMs = networkTimeInMsOrTimings.domCompletionTimeInMs;\n      onloadTimeInMs = networkTimeInMsOrTimings.onloadTimeInMs;\n    } else {\n      networkTimeInMs = networkTimeInMsOrTimings;\n    }\n\n    this.delegate.push([\n      'setPagePerformanceTiming',\n      networkTimeInMs,\n      serverTimeInMs,\n      transferTimeInMs,\n      domProcessingTimeInMs,\n      domCompletionTimeInMs,\n      onloadTimeInMs,\n    ]);\n  }\n\n  getCustomPagePerformanceTiming(): Promise<string> {\n    return this.delegate.get('getCustomPagePerformanceTiming');\n  }\n\n  /**\n   * Appends a custom string to the end of the HTTP request to matomo.php.\n   *\n   * @param appendToUrl String to append to the end of the HTTP request to matomo.php.\n   */\n  appendToTrackingUrl(appendToUrl: string): void {\n    this.delegate.push(['appendToTrackingUrl', appendToUrl]);\n  }\n\n  /** Set to `true` to not track users who opt out of tracking using <i>Do Not Track</i> setting */\n  setDoNotTrack(doNotTrack: boolean): void {\n    this.delegate.push(['setDoNotTrack', doNotTrack]);\n  }\n\n  /**\n   * Enables a frame-buster to prevent the tracked web page from being framed/iframed.\n   */\n  killFrame(): void {\n    this.delegate.push(['killFrame']);\n  }\n\n  /**\n   * Forces the browser to load the live URL if the tracked web page is loaded from a local file\n   * (e.g., saved to someone's desktop).\n   *\n   * @param url URL to track instead of file:// URLs.\n   */\n  redirectFile(url: string): void {\n    this.delegate.push(['redirectFile', url]);\n  }\n\n  /**\n   * Records how long the page has been viewed if the minimumVisitLength is attained;\n   * the heartBeatDelay determines how frequently to update the server.\n   *\n   * @param minimumVisitLength Duration before notifying the server for the duration of the visit to a page.\n   * @param heartBeatDelay Delay, in seconds, between two updates to the server.\n   */\n  setHeartBeatTimer(minimumVisitLength: number, heartBeatDelay: number): void {\n    this.delegate.push(['setHeartBeatTimer', minimumVisitLength, heartBeatDelay]);\n  }\n\n  /**\n   * Returns the 16 characters ID for the visitor.\n   *\n   * @returns Promise for the the 16 characters ID for the visitor.\n   */\n  getVisitorId(): Promise<string> {\n    return this.delegate.get('getVisitorId');\n  }\n\n  /**\n   * Set the 16 characters ID for the visitor\n   * <p/>\n   * The visitorId needs to be a 16 digit hex string.\n   * It won't be persisted in a cookie and needs to be set on every new page load.\n   *\n   * @param visitorId a 16 digit hex string\n   */\n  setVisitorId(visitorId: string): void {\n    this.delegate.push(['setVisitorId', visitorId]);\n  }\n\n  /**\n   * Returns the visitor cookie contents in an array.\n   *\n   * @returns Promise for the cookie contents in an array.\n   *\n   * TODO better return type\n   */\n  getVisitorInfo(): Promise<unknown[]> {\n    return this.delegate.get('getVisitorInfo');\n  }\n\n  /**\n   * Returns the visitor attribution array (Referer information and/or Campaign name & keyword).<br />\n   * Attribution information is used by Matomo to credit the correct referrer (first or last referrer)\n   * used when a user triggers a goal conversion.\n   *\n   * @returns Promise for the visitor attribution array (Referer information and/or Campaign name & keyword).\n   */\n  getAttributionInfo(): Promise<string[]> {\n    return this.delegate.get('getAttributionInfo');\n  }\n\n  /**\n   * Returns the attribution campaign name.\n   *\n   * @returns Promise for the the attribution campaign name.\n   */\n  getAttributionCampaignName(): Promise<string> {\n    return this.delegate.get('getAttributionCampaignName');\n  }\n\n  /**\n   * Returns the attribution campaign keyword.\n   *\n   * @returns Promise for the attribution campaign keyword.\n   */\n  getAttributionCampaignKeyword(): Promise<string> {\n    return this.delegate.get('getAttributionCampaignKeyword');\n  }\n\n  /**\n   * Returns the attribution referrer timestamp.\n   *\n   * @returns Promise for the attribution referrer timestamp (as string).\n   */\n  getAttributionReferrerTimestamp(): Promise<string> {\n    return this.delegate.get('getAttributionReferrerTimestamp');\n  }\n\n  /**\n   * Returns the attribution referrer URL.\n   *\n   * @returns Promise for the attribution referrer URL\n   */\n  getAttributionReferrerUrl(): Promise<string> {\n    return this.delegate.get('getAttributionReferrerUrl');\n  }\n\n  /**\n   * Returns the User ID string if it was set.\n   *\n   * @returns Promise for the User ID for the visitor.\n   */\n  getUserId(): Promise<string> {\n    return this.delegate.get('getUserId');\n  }\n\n  /**\n   * Set a User ID to this user (such as an email address or a username).\n   *\n   * @param userId User ID to set for the current visitor.\n   */\n  setUserId(userId: string): void {\n    this.delegate.push(['setUserId', userId]);\n  }\n\n  /**\n   * Reset the User ID which also generates a new Visitor ID.\n   *\n   */\n  resetUserId(): void {\n    this.delegate.push(['resetUserId']);\n  }\n\n  /**\n   * Override PageView id for every use of logPageView() <b>THIS SHOULD PROBABLY NOT BE CALLED IN A SINGLE-PAGE APP!</b>\n   *\n   * Do not use this if you call trackPageView() multiple times during tracking (e.g. when tracking a single page application)\n   *\n   * @param pageView\n   */\n  setPageViewId(pageView: string): void {\n    this.delegate.push(['setPageViewId', pageView]);\n  }\n\n  /**\n   * Returns the PageView id. If not set manually using setPageViewId, this method will return the dynamic PageView id, used in the last tracked page view, or undefined if no page view was tracked yet\n   */\n  getPageViewId(): Promise<string> {\n    return this.delegate.get('getPageViewId');\n  }\n\n  /**\n   * Set custom data for the next request\n   *\n   * @param key\n   * @param value\n   */\n  setCustomData(key: PropertyKey, value: unknown): void;\n  /**\n   * Overwrite custom data for the next request\n   *\n   * @param data\n   */\n  setCustomData(data: unknown): void;\n  setCustomData(...args: unknown[]): void {\n    this.delegate.push(['setCustomData', ...args]);\n  }\n\n  /**\n   * Retrieves custom data.\n   *\n   * @returns Promise for the value of custom data.\n   */\n  getCustomData(): Promise<unknown> {\n    return this.delegate.get('getCustomData');\n  }\n\n  /**\n   * Set a custom variable.\n   *\n   * @param index Index, the number from 1 to 5 where this custom variable name is stored for the current page view.\n   * @param name Name, the name of the variable, for example: Category, Sub-category, UserType.\n   * @param value Value, for example: \"Sports\", \"News\", \"World\", \"Business\"…\n   * @param scope Scope of the custom variable:<br />\n   * - \"page\" means the custom variable applies to the current page view.\n   * - \"visit\" means the custom variable applies to the current visitor.\n   */\n  setCustomVariable(\n    index: number,\n    name: string,\n    value: string,\n    scope: 'page' | 'visit' | 'event',\n  ): void {\n    this.delegate.push(['setCustomVariable', index, name, value, scope]);\n  }\n\n  /**\n   * Deletes a custom variable.\n   *\n   * @param index Index of the custom variable to delete.\n   * @param scope Scope of the custom variable to delete.\n   */\n  deleteCustomVariable(index: number, scope: 'page' | 'visit' | 'event'): void {\n    this.delegate.push(['deleteCustomVariable', index, scope]);\n  }\n\n  /**\n   * Deletes all custom variables.\n   *\n   * @param scope Scope of the custom variables to delete.\n   */\n  deleteCustomVariables(scope: 'page' | 'visit' | 'event'): void {\n    this.delegate.push(['deleteCustomVariables', scope]);\n  }\n\n  /**\n   * Retrieves a custom variable.\n   *\n   * @param index Index of the custom variable to retrieve.\n   * @param scope Scope of the custom variable to retrieve.\n   * @returns Promise for the value of custom variable.\n   */\n  getCustomVariable(index: number, scope: 'page' | 'visit' | 'event'): Promise<string> {\n    return this.delegate.pushFn(matomo => matomo.getCustomVariable(index, scope));\n  }\n\n  /**\n   * When called then the Custom Variables of scope \"visit\" will be stored (persisted) in a first party cookie\n   * for the duration of the visit.<br />\n   * This is useful if you want to call getCustomVariable later in the visit.<br />\n   * (by default custom variables are not stored on the visitor's computer.)\n   *\n   */\n  storeCustomVariablesInCookie(): void {\n    this.delegate.push(['storeCustomVariablesInCookie']);\n  }\n\n  /**\n   * Set a custom dimension.<br />\n   * (requires Matomo 2.15.1 + Custom Dimensions plugin)\n   *\n   * @param customDimensionId ID of the custom dimension to set.\n   * @param customDimensionValue Value to be set.\n   */\n  setCustomDimension(customDimensionId: number, customDimensionValue: string): void {\n    this.delegate.push(['setCustomDimension', customDimensionId, customDimensionValue]);\n  }\n\n  /**\n   * Deletes a custom dimension.<br />\n   * (requires Matomo 2.15.1 + Custom Dimensions plugin)\n   *\n   * @param customDimensionId ID of the custom dimension to delete.\n   */\n  deleteCustomDimension(customDimensionId: number): void {\n    this.delegate.push(['deleteCustomDimension', customDimensionId]);\n  }\n\n  /**\n   * Retrieve a custom dimension.<br />\n   * (requires Matomo 2.15.1 + Custom Dimensions plugin)\n   *\n   * @param customDimensionId ID of the custom dimension to retrieve.\n   * @return Promise for the value for the requested custom dimension.\n   */\n  getCustomDimension(customDimensionId: number): Promise<string> {\n    return this.delegate.pushFn(matomo => matomo.getCustomDimension(customDimensionId));\n  }\n\n  /**\n   * Set campaign name parameter(s).\n   *\n   * @param name Name of the campaign\n   */\n  setCampaignNameKey(name: string): void {\n    this.delegate.push(['setCampaignNameKey', name]);\n  }\n\n  /**\n   * Set campaign keyword parameter(s).\n   *\n   * @param keyword Keyword parameter(s) of the campaign.\n   */\n  setCampaignKeywordKey(keyword: string): void {\n    this.delegate.push(['setCampaignKeywordKey', keyword]);\n  }\n\n  /**\n   * Set to true to attribute a conversion to the first referrer.<br />\n   * By default, conversion is attributed to the most recent referrer.\n   *\n   * @param conversionToFirstReferrer If true, Matomo will attribute the Goal conversion to the first referrer used\n   * instead of the last one.\n   */\n  setConversionAttributionFirstReferrer(conversionToFirstReferrer: boolean): void {\n    this.delegate.push(['setConversionAttributionFirstReferrer', conversionToFirstReferrer]);\n  }\n\n  /**\n   * Set the current page view as a product page view.<br />\n   * When you call setEcommerceView, it must be followed by a call to trackPageView to record the product or category page view.\n   *\n   * @param productSKU SKU of the viewed product.\n   * @param productName Name of the viewed product.\n   * @param productCategory Category of the viewed product.\n   * @param price Price of the viewed product.\n   */\n  setEcommerceView(\n    productSKU: string,\n    productName?: string,\n    productCategory?: string,\n    price?: number,\n  ): void;\n\n  /**\n   * Set the current page view as a product page view.<br />\n   * When you call setEcommerceView, it must be followed by a call to trackPageView to record the product or category page view.\n   *\n   */\n  setEcommerceView(product: MatomoECommerceItemView): void;\n\n  /**\n   * Set the current page view as a category page view.<br />\n   * When you call setEcommerceView, it must be followed by a call to trackPageView to record the product or category page view.\n   *\n   */\n  setEcommerceView(product: MatomoECommerceCategoryView): void;\n\n  /**\n   * Set the current page view as a product or category page view.<br />\n   * When you call setEcommerceView, it must be followed by a call to trackPageView to record the product or category page view.\n   *\n   */\n  setEcommerceView(product: MatomoECommerceView): void;\n\n  setEcommerceView(\n    productOrSKU: string | MatomoECommerceView,\n    productName?: string,\n    productCategory?: string,\n    price?: number,\n  ): void {\n    if (isECommerceCategoryView(productOrSKU)) {\n      this.delegate.push(['setEcommerceView', false, false, productOrSKU.productCategory]);\n    } else if (isECommerceItemView(productOrSKU)) {\n      this.delegate.push([\n        'setEcommerceView',\n        productOrSKU.productSKU,\n        productOrSKU.productName,\n        productOrSKU.productCategory,\n        productOrSKU.price,\n      ]);\n    } else {\n      this.delegate.push(['setEcommerceView', productOrSKU, productName, productCategory, price]);\n    }\n  }\n\n  /**\n   * Adds a product into the eCommerce order.<br />\n   * Must be called for each product in the order.\n   *\n   * @param productSKU SKU of the product to add.\n   * @param [productName] Optional name of the product to add.\n   * @param [productCategory] Optional category of the product to add.\n   * @param [price] Optional price of the product to add.\n   * @param [quantity] Optional quantity of the product to add.\n   */\n  addEcommerceItem(\n    productSKU: string,\n    productName?: string,\n    productCategory?: string,\n    price?: number,\n    quantity?: number,\n  ): void;\n\n  /**\n   * Adds a product into the eCommerce order.<br />\n   * Must be called for each product in the order.\n   *\n   */\n  addEcommerceItem(product: MatomoECommerceItem): void;\n  addEcommerceItem(\n    productOrSKU: string | MatomoECommerceItem,\n    productName?: string,\n    productCategory?: string,\n    price?: number,\n    quantity?: number,\n  ): void {\n    if (typeof productOrSKU === 'string') {\n      this.delegate.push([\n        'addEcommerceItem',\n        productOrSKU,\n        productName,\n        productCategory,\n        price,\n        quantity,\n      ]);\n    } else {\n      this.delegate.push([\n        'addEcommerceItem',\n        productOrSKU.productSKU,\n        productOrSKU.productName,\n        productOrSKU.productCategory,\n        productOrSKU.price,\n        productOrSKU.quantity,\n      ]);\n    }\n  }\n\n  /**\n   * Remove the specified product from the untracked ecommerce order\n   *\n   * @param productSKU SKU of the product to remove.\n   */\n  removeEcommerceItem(productSKU: string): void {\n    this.delegate.push(['removeEcommerceItem', productSKU]);\n  }\n\n  /**\n   * Remove all products in the untracked ecommerce order\n   *\n   * Note: This is done automatically after {@link #trackEcommerceOrder trackEcommerceOrder()} is called\n   */\n  clearEcommerceCart(): void {\n    this.delegate.push(['clearEcommerceCart']);\n  }\n\n  /**\n   * Return all ecommerce items currently in the untracked ecommerce order\n   * <p/>\n   * The returned array will be a copy, so changing it won't affect the ecommerce order.\n   * To affect what gets tracked, use the {@link #addEcommerceItem addEcommerceItem()}, {@link #removeEcommerceItem removeEcommerceItem()},\n   * {@link #clearEcommerceCart clearEcommerceCart()} methods.\n   * Use this method to see what will be tracked before you track an order or cart update.\n   */\n  getEcommerceItems(): Promise<MatomoECommerceItem[]> {\n    return this.delegate.get('getEcommerceItems');\n  }\n\n  /**\n   * Tracks a shopping cart.<br />\n   * Call this function every time a user is adding, updating or deleting a product from the cart.\n   *\n   * @param grandTotal Grand total of the shopping cart.\n   */\n  trackEcommerceCartUpdate(grandTotal: number): void {\n    this.delegate.push(['trackEcommerceCartUpdate', grandTotal]);\n  }\n\n  /**\n   * Tracks an Ecommerce order, including any eCommerce item previously added to the order.<br />\n   * orderId and grandTotal (ie.revenue) are required parameters.\n   *\n   * @param orderId ID of the tracked order.\n   * @param grandTotal Grand total of the tracked order.\n   * @param [subTotal] Sub total of the tracked order.\n   * @param [tax] Taxes for the tracked order.\n   * @param [shipping] Shipping fees for the tracked order.\n   * @param [discount] Discount granted for the tracked order.\n   */\n  trackEcommerceOrder(\n    orderId: string,\n    grandTotal: number,\n    subTotal?: number,\n    tax?: number,\n    shipping?: number,\n    discount?: number,\n  ): void {\n    this.delegate.push([\n      'trackEcommerceOrder',\n      orderId,\n      grandTotal,\n      subTotal,\n      tax,\n      shipping,\n      discount,\n    ]);\n  }\n\n  /**\n   * Require nothing is tracked until a user consents\n   *\n   * By default the Matomo tracker assumes consent to tracking.\n   *\n   * @see `requireConsent` module configuration property\n   */\n  requireConsent(): void {\n    this.delegate.push(['requireConsent']);\n  }\n\n  /**\n   * Mark that the current user has consented\n   *\n   * The consent is one-time only, so in a subsequent browser session, the user will have to consent again.\n   * To remember consent, see {@link rememberConsentGiven}.\n   */\n  setConsentGiven(): void {\n    this.delegate.push(['setConsentGiven']);\n  }\n\n  /**\n   * Mark that the current user has consented, and remembers this consent through a browser cookie.\n   *\n   * The next time the user visits the site, Matomo will remember that they consented, and track them.\n   * If you call this method, you do not need to call {@link setConsentGiven}.\n   *\n   * @param hoursToExpire After how many hours the consent should expire. By default the consent is valid\n   *                          for 30 years unless cookies are deleted by the user or the browser prior to this\n   */\n  rememberConsentGiven(hoursToExpire?: number): void {\n    this.delegate.push(['rememberConsentGiven', hoursToExpire]);\n  }\n\n  /**\n   * Remove a user's consent, both if the consent was one-time only and if the consent was remembered.\n   *\n   * After calling this method, the user will have to consent again in order to be tracked.\n   */\n  forgetConsentGiven(): void {\n    this.delegate.push(['forgetConsentGiven']);\n  }\n\n  /** Return whether the current visitor has given consent previously or not */\n  hasRememberedConsent(): Promise<boolean> {\n    return this.delegate.get('hasRememberedConsent');\n  }\n\n  /**\n   * If consent was given, returns the timestamp when the visitor gave consent\n   *\n   * Only works if {@link rememberConsentGiven} was used and not when {@link setConsentGiven} was used.\n   * The timestamp is the local timestamp which depends on the visitors time.\n   */\n  getRememberedConsent(): Promise<string | number> {\n    return this.delegate.get('getRememberedConsent');\n  }\n\n  /** Return whether {@link requireConsent} was called previously */\n  isConsentRequired(): Promise<boolean> {\n    return this.delegate.get('isConsentRequired');\n  }\n\n  /**\n   * Require no cookies are used\n   *\n   * By default the Matomo tracker assumes consent to using cookies\n   */\n  requireCookieConsent(): void {\n    this.delegate.push(['requireCookieConsent']);\n  }\n\n  /**\n   * Mark that the current user has consented to using cookies\n   *\n   * The consent is one-time only, so in a subsequent browser session, the user will have to consent again.\n   * To remember cookie consent, see {@link rememberCookieConsentGiven}.\n   */\n  setCookieConsentGiven(): void {\n    this.delegate.push(['setCookieConsentGiven']);\n  }\n\n  /**\n   * Mark that the current user has consented to using cookies, and remembers this consent through a browser cookie.\n   *\n   * The next time the user visits the site, Matomo will remember that they consented, and use cookies.\n   * If you call this method, you do not need to call {@link setCookieConsentGiven}.\n   *\n   * @param hoursToExpire After how many hours the cookie consent should expire. By default the consent is valid\n   *                          for 30 years unless cookies are deleted by the user or the browser prior to this\n   */\n  rememberCookieConsentGiven(hoursToExpire?: number): void {\n    this.delegate.push(['rememberCookieConsentGiven', hoursToExpire]);\n  }\n\n  /**\n   * Remove a user's cookie consent, both if the consent was one-time only and if the consent was remembered.\n   *\n   * After calling this method, the user will have to consent again in order for cookies to be used.\n   */\n  forgetCookieConsentGiven(): void {\n    this.delegate.push(['forgetCookieConsentGiven']);\n  }\n\n  getRememberedCookieConsent(): Promise<number | string> {\n    return this.delegate.get('getRememberedCookieConsent');\n  }\n\n  /** Return whether cookies are currently enabled or disabled */\n  areCookiesEnabled(): Promise<boolean> {\n    return this.delegate.get('areCookiesEnabled');\n  }\n\n  /** After calling this function, the user will be opted out and no longer be tracked */\n  optUserOut(): void {\n    this.delegate.push(['optUserOut']);\n  }\n\n  /** After calling this method the user will be tracked again */\n  forgetUserOptOut(): void {\n    this.delegate.push(['forgetUserOptOut']);\n  }\n\n  /**\n   * Return whether the user is opted out or not\n   *\n   * Note: This method might not return the correct value if you are using the opt out iframe.\n   */\n  isUserOptedOut(): Promise<boolean> {\n    return this.delegate.get('isUserOptedOut');\n  }\n\n  /**\n   * Disables all first party cookies.<br />\n   * Existing Matomo cookies for this websites will be deleted on the next page view.\n   */\n  disableCookies(): void {\n    this.delegate.push(['disableCookies']);\n  }\n\n  /**\n   * Deletes the tracking cookies currently set (useful when creating new visits).\n   */\n  deleteCookies(): void {\n    this.delegate.push(['deleteCookies']);\n  }\n\n  /**\n   * Returns whether cookies are enabled and supported by this browser.\n   *\n   * @returns Promise for the support and activation of cookies.\n   */\n  hasCookies(): Promise<boolean> {\n    return this.delegate.get('hasCookies');\n  }\n\n  /**\n   * Set the tracking cookie name prefix.<br />\n   * Default prefix is 'pk'.\n   *\n   * @param prefix Prefix for the tracking cookie names.\n   */\n  setCookieNamePrefix(prefix: string): void {\n    this.delegate.push(['setCookieNamePrefix', prefix]);\n  }\n\n  /**\n   * Set the domain of the tracking cookies.<br />\n   * Default is the document domain.<br />\n   * If your website can be visited at both www.example.com and example.com, you would use: `'.example.com'` or `'*.example.com'`.\n   *\n   * @param domain Domain of the tracking cookies.\n   */\n  setCookieDomain(domain: string): void {\n    this.delegate.push(['setCookieDomain', domain]);\n  }\n\n  /**\n   * Set the path of the tracking cookies.<br />\n   * Default is '/'.\n   *\n   * @param path Path of the tracking cookies.\n   */\n  setCookiePath(path: string): void {\n    this.delegate.push(['setCookiePath', path]);\n  }\n\n  /**\n   * Set to true to enable the Secure cookie flag on all first party cookies.<br />\n   * This should be used when your website is only available under HTTPS so that all tracking cookies are always sent\n   * over secure connection.\n   *\n   * @param secure If true, the secure cookie flag will be set on all first party cookies.\n   */\n  setSecureCookie(secure: boolean): void {\n    this.delegate.push(['setSecureCookie', secure]);\n  }\n\n  /**\n   * Set cookie <i>same site</i>\n   * <p/>\n   * Defaults to Lax.\n   * Can be set to None or Strict.\n   * None requires all traffic to be on HTTPS and will also automatically set the secure cookie.\n   * It can be useful for example if the tracked website is an iframe.\n   * Strict only works if your Matomo and the website runs on the very same domain.\n   */\n  setCookieSameSite(sameSite: 'Strict' | 'Lax' | 'None'): void {\n    this.delegate.push(['setCookieSameSite', sameSite]);\n  }\n\n  /**\n   * Set the visitor cookie timeout.<br />\n   * Default is 13 months.\n   *\n   * @param timeout Timeout, in seconds, for the visitor cookie timeout.\n   */\n  setVisitorCookieTimeout(timeout: number): void {\n    this.delegate.push(['setVisitorCookieTimeout', timeout]);\n  }\n\n  /**\n   * Set the referral cookie timeout.<br />\n   * Default is 6 months.\n   *\n   * @param timeout Timeout, in seconds, for the referral cookie timeout.\n   */\n  setReferralCookieTimeout(timeout: number): void {\n    this.delegate.push(['setReferralCookieTimeout', timeout]);\n  }\n\n  /**\n   * Set the session cookie timeout.<br />\n   * Default is 30 minutes.\n   *\n   * @param timeout Timeout, in seconds, for the session cookie timeout.\n   */\n  setSessionCookieTimeout(timeout: number): void {\n    this.delegate.push(['setSessionCookieTimeout', timeout]);\n  }\n\n  /**\n   * Adds a click listener to a specific link element.<br />\n   * When clicked, Matomo will log the click automatically.\n   *\n   * @param element Element on which to add a click listener.\n   */\n  addListener(element: Element): void {\n    this.delegate.push(['addListener', element]);\n  }\n\n  /**\n   * Set the request method to either \"GET\" or \"POST\". (The default is \"GET\".)<br />\n   * To use the POST request method, either:<br />\n   * 1) the Matomo host is the same as the tracked website host (Matomo installed in the same domain as your tracked website), or<br />\n   * 2) if Matomo is not installed on the same host as your website, you need to enable CORS (Cross domain requests).\n   *\n   * @param method HTTP method for sending information to the Matomo server.\n   */\n  setRequestMethod(method: string): void {\n    this.delegate.push(['setRequestMethod', method]);\n  }\n\n  /**\n   * Set a function that will process the request content.<br />\n   * The function will be called once the request (query parameters string) has been prepared, and before the request content is sent.\n   *\n   * @param callback Function that will process the request content.\n   */\n  setCustomRequestProcessing(callback: (queryParameters: string) => void): void {\n    this.delegate.push(['setCustomRequestProcessing', callback]);\n  }\n\n  /**\n   * Set request Content-Type header value.<br />\n   * Applicable when \"POST\" request method is used via setRequestMethod.\n   *\n   * @param contentType Value for Content-Type HTTP header.\n   */\n  setRequestContentType(contentType: string): void {\n    this.delegate.push(['setRequestContentType', contentType]);\n  }\n\n  /**\n   * Disable the feature which groups together multiple tracking requests and send them as a bulk POST request.\n   * <p/>\n   * Disabling this feature is useful when you want to be able to replay all logs:\n   * one must use disableQueueRequest to disable this behaviour to later be able to replay logged\n   * Matomo logs (otherwise a subset of the requests wouldn't be able to be replayed).\n   */\n  disableQueueRequest(): void {\n    this.delegate.push(['disableQueueRequest']);\n  }\n\n  /**\n   * Defines after how many ms a queued requests will be executed after the request was queued initially\n   * <p/>\n   * The higher the value the more tracking requests can be sent together at once\n   *\n   * @param interval Interval in milliseconds, must be at least 1000, defaults to 2500\n   */\n  setRequestQueueInterval(interval: number): void {\n    this.delegate.push(['setRequestQueueInterval', interval]);\n  }\n\n  /** Disable sending tracking requests using `navigator.sendBeacon` which is enabled by default */\n  disableAlwaysUseSendBeacon(): void {\n    this.delegate.push(['disableAlwaysUseSendBeacon']);\n  }\n\n  /** Enable sending tracking requests using `navigator.sendBeacon` (enabled by default) */\n  alwaysUseSendBeacon(): void {\n    this.delegate.push(['alwaysUseSendBeacon']);\n  }\n\n  /**\n   * Enable Javascript errors tracking. JS errors are then tracked as events with category\n   * \"JavaScript Errors\". Refer to official doc for more details.\n   *\n   * @see https://matomo.org/faq/how-to/how-do-i-enable-basic-javascript-error-tracking-and-reporting-in-matomo-browser-console-error-messages/\n   */\n  enableJSErrorTracking(): void {\n    this.delegate.push(['enableJSErrorTracking']);\n  }\n\n  /**\n   * Enable tracking of file:// protocol actions. By default, the file:// protocol is not tracked.\n   */\n  enableFileTracking(): void {\n    this.delegate.push(['enableFileTracking']);\n  }\n\n  /**\n   * Set array of hostnames or domains that should be ignored as referrers.\n   *\n   * For wildcard subdomains, you can use: `setExcludedReferrers('.example.com');` or `setExcludedReferrers('*.example.com');`.\n   * You can also specify a path along a domain: `setExcludedReferrers('*.example.com/subsite1');`.\n   *\n   * This method is available as of Matomo 4.12.\n   */\n  setExcludedReferrers(...excludedReferrers: NonEmptyReadonlyArray<string | string[]>): void {\n    const flattened = excludedReferrers.flat();\n\n    this.delegate.push(['setExcludedReferrers', flattened]);\n  }\n\n  /**\n   * Returns the list of excluded referrers, which was previously set using setExcludedReferrers\n   */\n  getExcludedReferrers(): Promise<string[]> {\n    return this.delegate.get('getExcludedReferrers');\n  }\n\n  /**\n   * By default, Matomo accesses information from the visitor's browser to detect the current browser resolution\n   * and what browser plugins (for example PDF and cookies) are supported.\n   *\n   * This information is used to show you reports on your visitor's browser resolution, supported browser plugins,\n   * and it is also used to generate a short-lived identifier for every visitor which we call the config_id.\n   * Some privacy regulations may only allow accessing information from a visitor's device after having consent.\n   * If this applies to you, call this method to no longer access this information.\n   *\n   * @see https://matomo.org/faq/how-do-i-disable-browser-feature-detection-completely/\n   */\n  disableBrowserFeatureDetection(): void {\n    this.delegate.push(['disableBrowserFeatureDetection']);\n  }\n\n  /** Enable the browser feature detection if you previously disabled it */\n  enableBrowserFeatureDetection(): void {\n    this.delegate.push(['enableBrowserFeatureDetection']);\n  }\n\n  /**\n   * By default, Matomo will send campaign parameters (mtm, utm, etc.) to the tracker and record that information.\n   * Some privacy regulations may not allow for this information to be collected.\n   * If this applies to you, call this method to prevent campaign parameters from being sent to the tracker.\n   *\n   * <b>This method is available as of Matomo 5.1.</b>\n   */\n  disableCampaignParameters(): void {\n    this.delegate.push(['disableCampaignParameters']);\n  }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { initializeMatomoHolder } from '../holder';\nimport { runOnce } from '../utils/function';\nimport { ScriptInjector } from '../utils/script-injector';\nimport { PublicInterface } from '../utils/types';\nimport { appendTrailingSlash } from '../utils/url';\nimport {\n  AutoMatomoConfiguration,\n  DEFERRED_INTERNAL_MATOMO_CONFIGURATION,\n  getTrackersConfiguration,\n  INTERNAL_MATOMO_CONFIGURATION,\n  InternalMatomoConfiguration,\n  isAutoConfigurationMode,\n  isEmbeddedTrackerConfiguration,\n  isExplicitTrackerConfiguration,\n  MatomoTrackerConfiguration,\n} from './configuration';\nimport { ALREADY_INITIALIZED_ERROR, ALREADY_INJECTED_ERROR } from './errors';\nimport { MatomoTracker } from './matomo-tracker.service';\n\nfunction coerceSiteId(siteId: number | string): string {\n  return `${siteId}`;\n}\n\nfunction buildTrackerUrl(url: string, suffix: string | undefined): string {\n  if (suffix == null) {\n    return appendTrailingSlash(url) + DEFAULT_TRACKER_SUFFIX;\n  }\n  return url + suffix;\n}\n\nconst DEFAULT_TRACKER_SUFFIX = 'matomo.php';\nconst DEFAULT_SCRIPT_SUFFIX = 'matomo.js';\n\nexport function createMatomoInitializer(): PublicInterface<MatomoInitializerService> {\n  const disabled = inject(INTERNAL_MATOMO_CONFIGURATION).disabled;\n  const isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n  return disabled || !isBrowser ? new NoopMatomoInitializer() : new MatomoInitializerService();\n}\n\nexport class NoopMatomoInitializer implements PublicInterface<MatomoInitializerService> {\n  initialize(): void {\n    // No-op\n  }\n\n  init(): void {\n    // No-op\n  }\n\n  initializeTracker(_: AutoMatomoConfiguration<'deferred'>): void {\n    // No-op\n  }\n}\n\n@Injectable()\nexport class MatomoInitializerService {\n  private readonly config = inject(INTERNAL_MATOMO_CONFIGURATION);\n  private readonly deferredConfig = inject(DEFERRED_INTERNAL_MATOMO_CONFIGURATION);\n  private readonly tracker = inject(MatomoTracker);\n  private readonly scriptInjector = inject(ScriptInjector);\n\n  constructor() {\n    initializeMatomoHolder();\n  }\n\n  // TODO v7 remove\n  /** @deprecated Will be removed in v7+. Use {@link initialize initialize()} instead. */\n  init(): void {\n    this.initialize();\n  }\n\n  readonly initialize = runOnce(() => {\n    this.runPreInitTasks();\n\n    if (isAutoConfigurationMode(this.config)) {\n      this.injectMatomoScript(this.config);\n    } else {\n      // Mode is manual, immediately resolve deferred config\n      this.deferredConfig.markReady(this.config);\n    }\n  }, ALREADY_INITIALIZED_ERROR);\n\n  initializeTracker(config: AutoMatomoConfiguration<'deferred'>): void {\n    this.injectMatomoScript(config);\n  }\n\n  private readonly injectMatomoScript = runOnce(\n    (config: AutoMatomoConfiguration<'auto' | 'deferred'>): void => {\n      if (isExplicitTrackerConfiguration(config)) {\n        const { scriptUrl: customScriptUrl } = config;\n        const [mainTracker, ...additionalTrackers] = getTrackersConfiguration(config);\n        const scriptUrl =\n          customScriptUrl ?? appendTrailingSlash(mainTracker.trackerUrl) + DEFAULT_SCRIPT_SUFFIX;\n\n        this.registerMainTracker(mainTracker);\n        this.registerAdditionalTrackers(additionalTrackers);\n        this.scriptInjector.injectDOMScript(scriptUrl);\n      } else if (isEmbeddedTrackerConfiguration(config)) {\n        const { scriptUrl, trackers: additionalTrackers } = {\n          trackers: [],\n          ...config,\n        };\n\n        this.registerAdditionalTrackers(additionalTrackers);\n        this.scriptInjector.injectDOMScript(scriptUrl);\n      }\n\n      this.deferredConfig.markReady(config as InternalMatomoConfiguration);\n    },\n    ALREADY_INJECTED_ERROR,\n  );\n\n  private registerMainTracker(mainTracker: MatomoTrackerConfiguration): void {\n    const mainTrackerUrl = buildTrackerUrl(mainTracker.trackerUrl, mainTracker.trackerUrlSuffix);\n    const mainTrackerSiteId = coerceSiteId(mainTracker.siteId);\n\n    this.tracker.setTrackerUrl(mainTrackerUrl);\n    this.tracker.setSiteId(mainTrackerSiteId);\n  }\n\n  private registerAdditionalTrackers(additionalTrackers: MatomoTrackerConfiguration[]): void {\n    additionalTrackers.forEach(({ trackerUrl, siteId, trackerUrlSuffix }) => {\n      const additionalTrackerUrl = buildTrackerUrl(trackerUrl, trackerUrlSuffix);\n      const additionalTrackerSiteId = coerceSiteId(siteId);\n\n      this.tracker.addTracker(additionalTrackerUrl, additionalTrackerSiteId);\n    });\n  }\n\n  private runPreInitTasks(): void {\n    if (this.config.acceptDoNotTrack) {\n      this.tracker.setDoNotTrack(true);\n    }\n\n    if (this.config.requireConsent === 'cookie') {\n      this.tracker.requireCookieConsent();\n    } else if (this.config.requireConsent === 'tracking') {\n      this.tracker.requireConsent();\n    }\n\n    if (this.config.enableJSErrorTracking) {\n      this.tracker.enableJSErrorTracking();\n    }\n\n    if (this.config.disableCampaignParameters) {\n      this.tracker.disableCampaignParameters();\n    }\n\n    if (this.config.trackAppInitialLoad) {\n      this.tracker.trackPageView();\n    }\n\n    if (this.config.enableLinkTracking) {\n      this.tracker.enableLinkTracking(this.config.enableLinkTracking === 'enable-pseudo');\n    }\n  }\n}\n","import {\n  ENVIRONMENT_INITIALIZER,\n  EnvironmentProviders,\n  inject,\n  makeEnvironmentProviders,\n  Provider,\n} from '@angular/core';\nimport {\n  ASYNC_INTERNAL_MATOMO_CONFIGURATION,\n  createDeferredInternalMatomoConfiguration,\n  createInternalMatomoConfiguration,\n  DEFERRED_INTERNAL_MATOMO_CONFIGURATION,\n  INTERNAL_MATOMO_CONFIGURATION,\n  MATOMO_CONFIGURATION,\n  MatomoConfiguration,\n} from './tracker/configuration';\nimport {\n  createInternalMatomoTracker,\n  InternalMatomoTracker,\n} from './tracker/internal-matomo-tracker.service';\nimport {\n  createMatomoInitializer,\n  MatomoInitializerService,\n} from './tracker/matomo-initializer.service';\nimport { MatomoTracker } from './tracker/matomo-tracker.service';\nimport { MATOMO_SCRIPT_FACTORY, MatomoScriptFactory } from './tracker/script-factory';\nimport { ScriptInjector } from './utils/script-injector';\n\nconst PRIVATE_MATOMO_PROVIDERS = Symbol('MATOMO_PROVIDERS');\nconst PRIVATE_MATOMO_CHECKS = Symbol('MATOMO_CHECKS');\n\nexport type MatomoFeatureKind = unknown;\n\n/**\n * Additional Matomo features kind\n */\nexport const enum CoreMatomoFeatureKind {\n  /** @see withScriptFactory */\n  ScriptFactory = 'ScriptFactory',\n}\n\nexport interface MatomoFeature {\n  readonly kind: MatomoFeatureKind;\n  [PRIVATE_MATOMO_PROVIDERS]: Provider[];\n  [PRIVATE_MATOMO_CHECKS]?: (features: MatomoFeatureKind[]) => void;\n}\n\nexport function createMatomoFeature(\n  kind: MatomoFeatureKind,\n  providers: Provider[],\n  checks?: (features: MatomoFeatureKind[]) => void,\n): MatomoFeature {\n  return { kind, [PRIVATE_MATOMO_PROVIDERS]: providers, [PRIVATE_MATOMO_CHECKS]: checks };\n}\n\n/**\n * Return Matomo providers (typically added to an application's root module)\n *\n * Additional features may be provided as additional arguments, like this:\n * @example\n * // Simple configuration\n * providers: [ provideMatomo({ siteId: 1, trackerUrl: '...' }) ]\n *\n * // With additional features\n * providers: [\n *     provideMatomo(\n *         { siteId: 1, trackerUrl: '...' },\n *         withScriptFactory(...),\n *     )\n * ]\n *\n * // With advanced config factory function\n * providers: [\n *     provideMatomo(\n *         () => inject(MyService).getMatomoConfig(),\n *         withScriptFactory(...),\n *     )\n * ]\n *\n * @param config Matomo configuration (or configuration factory, which can use `inject`)\n * @param features Optional additional features to enable\n *\n * @see MatomoConfiguration\n * @see withScriptFactory\n * @see withRouter\n * @see withRouterInterceptors\n * @see withRouteData\n */\nexport function provideMatomo(\n  config: MatomoConfiguration | (() => MatomoConfiguration),\n  ...features: MatomoFeature[]\n): EnvironmentProviders {\n  const providers: Provider[] = [\n    MatomoTracker,\n    ScriptInjector,\n    {\n      provide: InternalMatomoTracker,\n      useFactory: createInternalMatomoTracker,\n    },\n    {\n      provide: MatomoInitializerService,\n      useFactory: createMatomoInitializer,\n    },\n    {\n      provide: INTERNAL_MATOMO_CONFIGURATION,\n      useFactory: createInternalMatomoConfiguration,\n    },\n    {\n      provide: DEFERRED_INTERNAL_MATOMO_CONFIGURATION,\n      useFactory: createDeferredInternalMatomoConfiguration,\n    },\n    {\n      provide: ASYNC_INTERNAL_MATOMO_CONFIGURATION,\n      useFactory: () => inject(DEFERRED_INTERNAL_MATOMO_CONFIGURATION).configuration,\n    },\n    {\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useValue() {\n        inject(MatomoInitializerService).initialize();\n      },\n    },\n  ];\n  const featuresKind: MatomoFeatureKind[] = [];\n\n  if (typeof config === 'function') {\n    providers.push({\n      provide: MATOMO_CONFIGURATION,\n      useFactory: config,\n    });\n  } else {\n    providers.push({\n      provide: MATOMO_CONFIGURATION,\n      useValue: config,\n    });\n  }\n\n  for (const feature of features) {\n    providers.push(...feature[PRIVATE_MATOMO_PROVIDERS]);\n    featuresKind.push(feature.kind);\n  }\n\n  for (const feature of features) {\n    feature[PRIVATE_MATOMO_CHECKS]?.(featuresKind);\n  }\n\n  return makeEnvironmentProviders(providers);\n}\n\n/** Add a custom script factory to use for Matomo's script element */\nexport function withScriptFactory(scriptFactory: MatomoScriptFactory): MatomoFeature {\n  return createMatomoFeature(CoreMatomoFeatureKind.ScriptFactory, [\n    { provide: MATOMO_SCRIPT_FACTORY, useValue: scriptFactory },\n  ]);\n}\n","import {\n  Component,\n  Inject,\n  Input,\n  LOCALE_ID,\n  OnChanges,\n  OnInit,\n  Optional,\n  SecurityContext,\n  SimpleChanges,\n} from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport {\n  ASYNC_INTERNAL_MATOMO_CONFIGURATION,\n  getTrackersConfiguration,\n  InternalMatomoConfiguration,\n  isAutoConfigurationMode,\n  isExplicitTrackerConfiguration,\n} from '../tracker/configuration';\nimport { coerceCssSizeBinding, CssSizeInput } from '../utils/coercion';\n\nconst DEFAULT_BORDER = '0';\nconst DEFAULT_WIDTH = '600px';\nconst DEFAULT_HEIGHT = '200px';\nconst URL_PATTERN =\n  '{SERVER}/index.php?module=CoreAdminHome&action=optOut&language={LOCALE}&backgroundColor={BG_COLOR}&fontColor={COLOR}&fontSize={FONT_SIZE}&fontFamily={FONT_FAMILY}';\n\nfunction missingServerUrlError(): Error {\n  return new Error(\n    `It is required to set [serverUrl] when Matomo configuration mode is set to 'manual'`,\n  );\n}\n\n/**\n * Basic opt-out form, based on an iframe auto-generated by Matomo.\n *\n * <b>WARNING:</b> By default, this component assumes the tracker url set in MatomoConfiguration is\n * safe to be used as an iframe `src`. You have to make sure that this url is safe before using this\n * component!\n *\n * Note: This component relies on the matomo-generated opt-out form, which is deprecated\n * since Matomo version 4.12.0. It will be marked as deprecated soon.\n *\n * @see https://developer.matomo.org/changelog#new-privacy-opt-out-options\n */\n@Component({\n  selector: 'matomo-opt-out-form',\n  templateUrl: './matomo-opt-out-form.component.html',\n  standalone: true,\n})\nexport class MatomoOptOutFormComponent implements OnInit, OnChanges {\n  private _defaultServerUrl?: string;\n  private _defaultServerUrlInitialized = false;\n  private _border: string = DEFAULT_BORDER;\n  private _width: string = DEFAULT_WIDTH;\n  private _height: string = DEFAULT_HEIGHT;\n  private _iframeSrc: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('');\n  private _serverUrlOverride?: SafeResourceUrl;\n\n  /**\n   * Set a custom locale for the opt-out form\n   * <br>\n   * Default is the current app locale available in LOCALE_ID token\n   */\n  @Input() locale: string;\n  /** Font color (note that Matomo currently only supports hexadecimal without leading hash notation) */\n  @Input() color: string = '';\n  /** Background color (note that Matomo currently only supports hexadecimal without leading hash notation) */\n  @Input() backgroundColor: string = '';\n  @Input() fontSize: string = '';\n  @Input() fontFamily: string = '';\n\n  constructor(\n    private readonly sanitizer: DomSanitizer,\n    @Inject(ASYNC_INTERNAL_MATOMO_CONFIGURATION)\n    private readonly config: Promise<InternalMatomoConfiguration>,\n    @Optional() @Inject(LOCALE_ID) locale: string = '',\n  ) {\n    // Set default locale\n    this.locale = locale;\n  }\n\n  get serverUrl(): SafeResourceUrl | undefined {\n    return this._serverUrlOverride;\n  }\n\n  /**\n   * Set a custom Matomo server url to be used for iframe generation\n   * <br>\n   * By default, tracker url is retrieved from MatomoConfiguration.\n   * <br>\n   * <b>WARNING:</b> This component assumes the url you provide is safe to be used as an iframe\n   * `src`. You have to make sure that this url is safe before using this component!\n   */\n  @Input()\n  set serverUrl(value: SafeResourceUrl | undefined) {\n    this._serverUrlOverride = value;\n  }\n\n  get iframeSrc(): SafeResourceUrl | undefined {\n    return this._iframeSrc;\n  }\n\n  get height(): string {\n    return this._height;\n  }\n\n  @Input()\n  set height(value: string) {\n    this._height = coerceCssSizeBinding(value);\n  }\n\n  get width(): string {\n    return this._width;\n  }\n\n  @Input()\n  set width(value: string) {\n    this._width = coerceCssSizeBinding(value);\n  }\n\n  get border(): string {\n    return this._border;\n  }\n\n  @Input()\n  set border(value: string) {\n    this._border = coerceCssSizeBinding(value);\n  }\n\n  ngOnInit() {\n    this.updateUrl();\n\n    this.config.then(config => {\n      if (isAutoConfigurationMode(config) && isExplicitTrackerConfiguration(config)) {\n        this._defaultServerUrl = getTrackersConfiguration(config)[0].trackerUrl;\n      }\n\n      this._defaultServerUrlInitialized = true;\n      this.updateUrl();\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      'serverUrl' in changes ||\n      'locale' in changes ||\n      'color' in changes ||\n      'backgroundColor' in changes ||\n      'fontSize' in changes ||\n      'fontFamily' in changes\n    ) {\n      this.updateUrl();\n    }\n  }\n\n  private updateUrl(): void {\n    let serverUrl: string | null | undefined = this._defaultServerUrl;\n\n    if (this._serverUrlOverride) {\n      serverUrl = this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, this._serverUrlOverride);\n    }\n\n    if (!serverUrl) {\n      if (this._defaultServerUrlInitialized) {\n        throw missingServerUrlError();\n      } else {\n        return;\n      }\n    }\n\n    const url = URL_PATTERN.replace('{SERVER}', serverUrl)\n      .replace('{LOCALE}', encodeURIComponent(this.locale))\n      .replace('{COLOR}', encodeURIComponent(this.color))\n      .replace('{BG_COLOR}', encodeURIComponent(this.backgroundColor))\n      .replace('{FONT_SIZE}', encodeURIComponent(this.fontSize))\n      .replace('{FONT_FAMILY}', encodeURIComponent(this.fontFamily));\n\n    this._iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(url);\n  }\n\n  static ngAcceptInputType_border: CssSizeInput;\n  static ngAcceptInputType_width: CssSizeInput;\n  static ngAcceptInputType_height: CssSizeInput;\n}\n","<iframe\n  [src]=\"iframeSrc\"\n  [style.border]=\"border\"\n  [style.height]=\"height\"\n  [style.width]=\"width\"\n></iframe>\n","import { Directive, HostListener, Input } from '@angular/core';\nimport { MatomoTracker } from '../tracker/matomo-tracker.service';\nimport { requireNonNull } from '../utils/coercion';\n\n@Directive({\n  selector: '[matomoClickCategory][matomoClickAction]',\n  standalone: true,\n})\nexport class MatomoTrackClickDirective {\n  @Input() matomoClickCategory?: string;\n  @Input() matomoClickAction?: string;\n  @Input() matomoClickName?: string;\n  @Input() matomoClickValue?: number;\n\n  constructor(private readonly tracker: MatomoTracker) {}\n\n  @HostListener('click')\n  onClick(): void {\n    this.tracker.trackEvent(\n      requireNonNull(this.matomoClickCategory, 'matomo category is required'),\n      requireNonNull(this.matomoClickAction, 'matomo action is required'),\n      this.matomoClickName,\n      this.matomoClickValue,\n    );\n  }\n}\n","import { Directive, ElementRef, Input, OnDestroy } from '@angular/core';\nimport { fromEvent, merge, Subscription } from 'rxjs';\nimport { MatomoTracker } from '../tracker/matomo-tracker.service';\nimport { requireNonNull } from '../utils/coercion';\n\nexport interface TrackArgs {\n  category?: string;\n  action?: string;\n  name?: string;\n  value?: number;\n}\n\ntype EventName = keyof GlobalEventHandlersEventMap | string;\ntype DOMEventInput = EventName | EventName[] | null | undefined;\n\nfunction coerceEventNames(input: DOMEventInput): EventName[] | null | undefined {\n  if (input && input.length > 0) {\n    return Array.isArray(input) ? input : [input];\n  } else {\n    return undefined;\n  }\n}\n\n@Directive({\n  selector: '[matomoTracker]',\n  exportAs: 'matomo',\n  standalone: true,\n})\nexport class MatomoTrackerDirective implements OnDestroy {\n  private sub?: Subscription;\n\n  /** Set the event category */\n  @Input() matomoCategory?: string;\n  /** Set the event action */\n  @Input() matomoAction?: string;\n  /** Set the event name */\n  @Input() matomoName?: string;\n  /** Set the event value */\n  @Input() matomoValue?: number;\n\n  constructor(\n    private readonly tracker: MatomoTracker,\n    private readonly elementRef: ElementRef,\n  ) {}\n\n  /** Track a Matomo event whenever specified DOM event is triggered */\n  @Input()\n  set matomoTracker(input: DOMEventInput) {\n    const eventNames = coerceEventNames(input);\n\n    this.sub?.unsubscribe();\n\n    if (eventNames) {\n      const handlers = eventNames.map(eventName =>\n        fromEvent(this.elementRef.nativeElement, eventName),\n      );\n\n      this.sub = merge(...handlers).subscribe(() => this.trackEvent());\n    } else {\n      this.sub = undefined;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.sub?.unsubscribe();\n  }\n\n  /** Track an event using category, action, name and value set as @Input() */\n  trackEvent(): void;\n\n  /** Track an event using category, action and name set as @Input() and provided value */\n  trackEvent(value: number): void;\n\n  /** Track an event using category and action set as @Input() and provided name and value */\n  trackEvent(name: string, value?: number): void;\n\n  /** Track an event using provided category, action, name and value (any @Input() is used as a default value) */\n  trackEvent(args: TrackArgs): void;\n\n  trackEvent(arg1?: TrackArgs | string | number, arg2?: number): void {\n    let category = this.matomoCategory;\n    let action = this.matomoAction;\n    let name = this.matomoName;\n    let value = this.matomoValue;\n\n    if (typeof arg1 === 'object') {\n      category = arg1.category ?? category;\n      action = arg1.action ?? action;\n      name = arg1.name ?? name;\n      value = arg1.value ?? value;\n    } else if (typeof arg1 === 'string') {\n      name = arg1;\n\n      if (typeof arg2 === 'number') {\n        value = arg2;\n      }\n    } else if (typeof arg1 === 'number') {\n      value = arg1;\n    }\n\n    this.tracker.trackEvent(\n      requireNonNull(category, 'matomo category is required'),\n      requireNonNull(action, 'matomo action is required'),\n      name,\n      value,\n    );\n  }\n}\n","import { EnvironmentProviders, ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatomoOptOutFormComponent } from './directives/matomo-opt-out-form.component';\nimport { MatomoTrackClickDirective } from './directives/matomo-track-click.directive';\nimport { MatomoTrackerDirective } from './directives/matomo-tracker.directive';\nimport { MatomoFeature, provideMatomo, withScriptFactory } from './providers';\nimport { MatomoConfiguration } from './tracker/configuration';\nimport { MatomoScriptFactory } from './tracker/script-factory';\n\nexport const MATOMO_DIRECTIVES = [\n  MatomoTrackerDirective,\n  MatomoTrackClickDirective,\n  MatomoOptOutFormComponent,\n] as const;\n\nfunction buildProviders(\n  config: MatomoConfiguration,\n  scriptFactory?: MatomoScriptFactory,\n): EnvironmentProviders {\n  const features: MatomoFeature[] = [];\n\n  if (scriptFactory) {\n    features.push(withScriptFactory(scriptFactory));\n  }\n\n  return provideMatomo(config, ...features);\n}\n\n@NgModule({\n  imports: [...MATOMO_DIRECTIVES],\n  exports: [...MATOMO_DIRECTIVES],\n})\nexport class MatomoModule {\n  static forRoot(\n    config: MatomoConfiguration,\n    scriptFactory?: MatomoScriptFactory,\n  ): ModuleWithProviders<MatomoModule> {\n    return {\n      ngModule: MatomoModule,\n      providers: [buildProviders(config, scriptFactory)],\n    };\n  }\n}\n\n/**\n * @deprecated use MatomoModule instead\n * @breaking-change 8.0.0\n */\n@NgModule({\n  imports: [MatomoModule],\n  exports: [MatomoModule],\n})\nexport class NgxMatomoModule {\n  static forRoot(\n    config: MatomoConfiguration,\n    scriptFactory?: MatomoScriptFactory,\n  ): ModuleWithProviders<NgxMatomoModule> {\n    return {\n      ngModule: NgxMatomoModule,\n      providers: [buildProviders(config, scriptFactory)],\n    };\n  }\n}\n\n/**\n * @deprecated use MatomoModule instead\n * @breaking-change 8.0.0\n */\n@NgModule({\n  imports: [NgxMatomoModule],\n  exports: [NgxMatomoModule],\n})\nexport class NgxMatomoTrackerModule {\n  static forRoot(\n    config: MatomoConfiguration,\n    scriptFactory?: MatomoScriptFactory,\n  ): ModuleWithProviders<NgxMatomoTrackerModule> {\n    return {\n      ngModule: NgxMatomoTrackerModule,\n      providers: [buildProviders(config, scriptFactory)],\n    };\n  }\n}\n","/*\n * Public API Surface of tracker\n */\n\nexport * from './private-api';\n\nimport { INTERNAL_MATOMO_CONFIGURATION as ɵINTERNAL_MATOMO_CONFIGURATION } from './tracker/configuration';\n\n/**\n * @deprecated for internal use only\n * @breaking-change 6.0.0\n */\nconst INTERNAL_MATOMO_CONFIGURATION = ɵINTERNAL_MATOMO_CONFIGURATION;\n\n// TODO v6 remove public export\nexport { INTERNAL_MATOMO_CONFIGURATION };\n\nexport {\n  NgxMatomoModule,\n  NgxMatomoTrackerModule,\n  MatomoModule,\n  MATOMO_DIRECTIVES,\n} from './matomo.module';\nexport { provideMatomo, withScriptFactory, MatomoFeatureKind, MatomoFeature } from './providers';\nexport {\n  MatomoTracker,\n  MatomoECommerceItem,\n  MatomoECommerceView,\n  MatomoECommerceItemView,\n  MatomoECommerceCategoryView,\n  PagePerformanceTimings,\n  MatomoInstance,\n} from './tracker/matomo-tracker.service';\nexport { MatomoInitializerService } from './tracker/matomo-initializer.service';\nexport {\n  MatomoConfiguration,\n  MATOMO_CONFIGURATION,\n  AutoMatomoConfiguration,\n  MatomoInitializationMode,\n  MatomoInitializationBehavior,\n  MatomoConsentMode,\n  MatomoConsentRequirement,\n  InternalMatomoConfiguration,\n} from './tracker/configuration';\nexport {\n  MATOMO_SCRIPT_FACTORY,\n  MatomoScriptFactory,\n  createDefaultMatomoScriptElement,\n} from './tracker/script-factory';\nexport { MatomoTrackerDirective } from './directives/matomo-tracker.directive';\nexport { MatomoTrackClickDirective } from './directives/matomo-track-click.directive';\nexport { MatomoOptOutFormComponent } from './directives/matomo-opt-out-form.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["INTERNAL_MATOMO_CONFIGURATION","i1.MatomoTracker","ɵINTERNAL_MATOMO_CONFIGURATION"],"mappings":"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"}