{"version":3,"file":"grandgular-yandex-metrika.mjs","sources":["../../../../projects/yandex-metrika/src/lib/ym-config-token.ts","../../../../projects/yandex-metrika/src/lib/ym-lib-name.ts","../../../../projects/yandex-metrika/src/lib/ym-init-service.ts","../../../../projects/yandex-metrika/src/lib/ym-provider.ts","../../../../projects/yandex-metrika/src/lib/ym-method-enum.ts","../../../../projects/yandex-metrika/src/lib/ym-method-args-type.ts","../../../../projects/yandex-metrika/src/lib/ym-service.ts","../../../../projects/yandex-metrika/src/grandgular-yandex-metrika.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { YMConfig } from './ym-config-interface';\n\nexport const YM_CONFIG_TOKEN = new InjectionToken<YMConfig[]>('YM_CONFIG_TOKEN');\nexport const YM_DEFAULT_CONFIG_TOKEN = new InjectionToken<YMConfig | null>(\n  'YM_DEFAULT_CONFIG_TOKEN',\n);\n","export const libName = '@grandgular/yandex-metrika' as const;\n","import { DOCUMENT, inject, Injectable, isDevMode, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { YMConfig } from './ym-config-interface';\nimport { libName } from './ym-lib-name';\n\n@Injectable({ providedIn: 'root' })\nexport class YMInitService {\n  readonly #document = inject(DOCUMENT);\n  readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n  readonly #defaultScriptUrl = 'https://mc.yandex.ru/metrika/tag.js';\n\n  public initialize(config: YMConfig): void {\n    if (!this.canInit(config)) return;\n\n    this.loadScript(config);\n    this.addNoscriptFallback(config.id);\n  }\n\n  private canInit(config: YMConfig): boolean {\n    return this.#isBrowser && !!config && !!config.id && (!config?.prodOnly || !isDevMode());\n  }\n\n  private loadScript(config: YMConfig): void {\n    this.initializeYMQueue();\n\n    const script = this.#document.createElement('script');\n    script.src = config?.alternativeScriptUrl || this.#defaultScriptUrl;\n    script.async = config.loading === 'async';\n    script.defer = config.loading === 'defer';\n\n    (window as any).ym(config.id, 'init', config.options);\n\n    script.onload = () =>\n      console.log(`${libName}: Скрипт для счетчика ${config.id} успешно загружен`);\n    script.onerror = (error) =>\n      console.error(`${libName}: Не удалось загрузить скрипт для счетчика ${config.id}: `, error);\n\n    this.#document.head.appendChild(script);\n  }\n\n  private addNoscriptFallback(id: number): void {\n    const noscript = this.#document.createElement('noscript');\n    const div = this.#document.createElement('div');\n    const img = this.#document.createElement('img');\n\n    img.src = `https://mc.yandex.ru/watch/${id}`;\n    img.style.position = 'absolute';\n    img.style.left = '-9999px';\n    img.alt = '';\n\n    div.appendChild(img);\n    noscript.appendChild(div);\n    this.#document.body.appendChild(noscript);\n  }\n\n  private initializeYMQueue(): void {\n    if ((window as any).ym) return;\n\n    (window as any).ym = function (...args: any[]) {\n      ((window as any).ym.a = (window as any).ym.a || []).push(args);\n    };\n    (window as any).ym.l = new Date().getTime();\n  }\n}\n","import {\n  EnvironmentProviders,\n  inject,\n  isDevMode,\n  makeEnvironmentProviders,\n  provideAppInitializer,\n} from '@angular/core';\nimport { YM_CONFIG_TOKEN, YM_DEFAULT_CONFIG_TOKEN } from './ym-config-token';\nimport { YMInitService } from './ym-init-service';\nimport { YMConfig } from './ym-config-interface';\nimport { libName } from './ym-lib-name';\n\n/**\n * Функция для предоставления и настройки Яндекс.Метрики в Angular приложениях.\n *\n * Настраивает один или несколько счетчиков Яндекс.Метрики с учетом окружения и автоматически\n * инициализирует их при запуске приложения.\n *\n * @example\n * // Один счетчик\n * provideYandexMetrika({\n *   id: 104120889,\n *   prodOnly: true,\n *   options: { webvisor: true }\n * })\n *\n * @example\n * // Несколько счетчиков\n * provideYandexMetrika([\n *   {\n *     id: 104120889,\n *     name: 'продакшен',\n *     prodOnly: true,\n *     default: true\n *   },\n *   {\n *     id: 35567075,\n *     name: 'тестовый',\n *     options: { trackLinks: true }\n *   }\n * ])\n *\n * @param config - Объект конфигурации YMConfig или массив конфигураций для нескольких счетчиков.\n * При использовании нескольких счетчиков, первый счетчик с `default: true` будет использоваться по умолчанию,\n * в противном случае будет выбран первый доступный счетчик в массиве.\n *\n * @returns EnvironmentProviders с настроенными провайдерами для интеграции с Яндекс.Метрикой\n *\n * @remarks\n * - Счетчики с `prodOnly: true` автоматически пропускаются в режиме разработки\n * - Выводит предупреждения в консоль для неправильно настроенных или недоступных счетчиков\n * - Поддерживает как одиночные, так и множественные конфигурации счетчиков\n *\n * @throws Выводит предупреждения в консоль при проблемах с конфигурацией, но не выбрасывает исключения\n *\n * @see YMConfig - Интерфейс конфигурации счетчика\n * @see YMService - Для работы с API после инициализации\n */\nexport function provideYandexMetrika(config: YMConfig | YMConfig[]): EnvironmentProviders {\n  const configs = Array.isArray(config) ? config : [config];\n  const isDev = isDevMode();\n  const availableConfigs = configs.filter((config) => !config.prodOnly || !isDev);\n\n  if (availableConfigs.length === 0) {\n    console.warn(\n      `${libName}: Нет доступных счетчиков для текущего окружения. Счетчики будут инициализированы только в продакшене.`,\n    );\n  } else if (availableConfigs.length < configs.length) {\n    console.log(\n      `${libName}: ${configs.length - availableConfigs.length} счетчик(ов) пропущены из-за настройки prodOnly`,\n    );\n  }\n\n  const defaultCounter =\n    availableConfigs.find((config) => config.default) || availableConfigs[0] || null;\n  const explicitDefault = configs.find((config) => config.default);\n\n  if (explicitDefault && !availableConfigs.some((config) => config.id === explicitDefault.id)) {\n    console.warn(\n      `${libName}: Явно указанный счетчик по умолчанию \"${explicitDefault.name || explicitDefault.id}\" недоступен в текущем окружении`,\n    );\n  }\n\n  return makeEnvironmentProviders([\n    {\n      provide: YM_CONFIG_TOKEN,\n      useValue: configs,\n    },\n    {\n      provide: YM_DEFAULT_CONFIG_TOKEN,\n      useValue: defaultCounter,\n    },\n    provideAppInitializer(() => {\n      const metrika = inject(YMInitService);\n      const configs = inject(YM_CONFIG_TOKEN);\n\n      configs.forEach((config) => metrika.initialize(config));\n\n      return Promise.resolve();\n    }),\n  ]);\n}\n","/**\n * Enum всех доступных методов API Яндекс.Метрики\n *\n * @remarks\n * Используется для типобезопасного вызова методов через универсальный интерфейс\n *\n * @see https://yandex.ru/support/metrica/ru/objects/method-reference - Документация API\n */\nexport enum YMMethod {\n  /**\n   * Добавить поддержку расширения файла\n   * @see https://yandex.ru/support/metrica/ru/objects/addfileextension\n   */\n  AddFileExtension = 'addFileExtension',\n\n  /**\n   * Отправка информации о переходе по внешней ссылке\n   * @see https://yandex.ru/support/metrica/ru/objects/extlink\n   */\n  ExtLink = 'extLink',\n\n  /**\n   * Отправка информации о загрузке файла\n   * @see https://yandex.ru/support/metrica/ru/objects/file\n   */\n  File = 'file',\n\n  /**\n   * Отправка контактной информации посетителей сайта\n   * @see https://yandex.ru/support/metrica/ru/objects/first-party-params\n   */\n  FirstPartyParams = 'firstPartyParams',\n\n  /**\n   * Отправка контактной информации посетителей сайта с возможностью самостоятельного хеширования данных\n   * @see https://yandex.ru/support/metrica/ru/objects/first-party-params-hash\n   */\n  FirstPartyParamsHashed = 'firstPartyParamsHashed',\n\n  /**\n   * Получение идентификатора посетителя, заданного Метрикой\n   * @see https://yandex.ru/support/metrica/ru/objects/get-client-id\n   */\n  GetClientID = 'getClientID',\n\n  /**\n   * Отправка вручную данных о просмотрах для AJAX- и Flash-сайтов\n   * @see https://yandex.ru/support/metrica/ru/objects/hit\n   */\n  Hit = 'hit',\n\n  /**\n   * Передача информации о том, что визит пользователя не является отказом\n   * @see https://yandex.ru/support/metrica/ru/objects/notbounce\n   */\n  NotBounce = 'notBounce',\n\n  /**\n   * Дополнительный способ передачи пользовательских параметров в отчет Параметры визитов\n   * @see https://yandex.ru/support/metrica/ru/objects/params-method\n   */\n  Params = 'params',\n\n  /**\n   * Достижение цели\n   * @see https://yandex.ru/support/metrica/ru/objects/reachgoal\n   */\n  ReachGoal = 'reachGoal',\n\n  /**\n   * Передача идентификатора посетителя, заданного владельцем сайта\n   * @see https://yandex.ru/support/metrica/ru/objects/set-user-id\n   */\n  SetUserID = 'setUserID',\n\n  /**\n   * Способ передачи пользовательских параметров в отчет Параметры посетителей\n   * @see https://yandex.ru/support/metrica/ru/objects/user-params\n   */\n  UserParams = 'userParams',\n}\n","import { YMMethod } from './ym-method-enum';\n\n/**\n * Union тип всех доступных методов как строковых литералов\n */\nexport type YMMethodString =\n  | 'addFileExtension'\n  | 'extLink'\n  | 'file'\n  | 'firstPartyParams'\n  | 'firstPartyParamsHashed'\n  | 'getClientID'\n  | 'hit'\n  | 'notBounce'\n  | 'params'\n  | 'reachGoal'\n  | 'setUserID'\n  | 'userParams';\n\n/**\n * Объединенный тип для метода (enum + string literal)\n */\nexport type YMMethodType = YMMethod | YMMethodString | string;\n\n/**\n * Интерфейс аргументов для каждого метода Яндекс.Метрики\n */\nexport type YMMethodArgs = {\n  [YMMethod.AddFileExtension]: [extensions: string | string[]];\n  [YMMethod.ExtLink]: [\n    url: string,\n    options?: {\n      callback?: Function;\n      ctx?: Object;\n      params?: {\n        order_price?: number;\n        currency?: string;\n      };\n      title?: string;\n    },\n  ];\n  [YMMethod.File]: [\n    string,\n    {\n      callback?: Function;\n      ctx?: Object;\n      params?: {\n        order_price?: number;\n        currency?: string;\n      };\n      referer?: string;\n      title?: string;\n    }?,\n  ];\n  [YMMethod.FirstPartyParams]: [\n    parameters: {\n      email?: string;\n      phone_number?: string;\n      first_name?: string;\n      last_name?: string;\n      yandex_cid?: number | string;\n    },\n  ];\n  [YMMethod.FirstPartyParamsHashed]: [\n    parameters: {\n      email?: string; // SHA-256 хеш email\n      phone_number?: string; // SHA-256 хеш номера телефона (только цифры)\n      first_name?: string; // SHA-256 хеш имени\n      last_name?: string; // SHA-256 хеш фамилии\n      yandex_cid?: number | string; // не хешируется\n    },\n  ];\n  [YMMethod.GetClientID]: [callback: (clientID: string) => void];\n  [YMMethod.Hit]: [\n    url?: string,\n    options?: {\n      callback?: Function;\n      ctx?: Object;\n      params?: {\n        order_price?: number;\n        currency?: string;\n      };\n      referer?: string;\n      title?: string;\n    },\n  ];\n  [YMMethod.NotBounce]: [\n    options?: {\n      callback?: Function;\n      ctx?: Object;\n    },\n  ];\n  [YMMethod.Params]: [parameters: Record<string, any> | Array<Record<string, any>>];\n  [YMMethod.ReachGoal]: [\n    target: string,\n    params?: {\n      order_price?: number;\n      price?: number;\n      currency?: string;\n    },\n    callback?: Function,\n    ctx?: Object,\n  ];\n  [YMMethod.SetUserID]: [userID: string];\n  [YMMethod.UserParams]: [\n    parameters: {\n      UserID?: string | number;\n      [key: string]: any;\n    },\n  ];\n};\n\n/**\n * Тип для аргументов известных методов\n */\nexport type KnownMethodArgs<T extends YMMethodType> = T extends YMMethod\n  ? YMMethodArgs[T]\n  : T extends YMMethodString\n    ? YMMethodArgs[Extract<YMMethod, T>]\n    : any[];\n\n/**\n * Список известных методов для проверки\n */\nexport const KNOWN_METHODS = new Set(Object.values(YMMethod));\n","import { Injectable, PLATFORM_ID, inject, isDevMode } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { YM_CONFIG_TOKEN, YM_DEFAULT_CONFIG_TOKEN } from './ym-config-token';\nimport { YMConfig } from './ym-config-interface';\nimport { libName } from './ym-lib-name';\nimport { YMMethod } from './ym-method-enum';\nimport { KNOWN_METHODS, KnownMethodArgs, YMMethodArgs, YMMethodType } from './ym-method-args-type';\n\n/**\n * Сервис для типобезопасной работы с Яндекс.Метрикой в Angular приложениях\n *\n * Предоставляет современный API для взаимодействия с API Яндекс.Метрики с полной TypeScript поддержкой,\n * проверкой типов и автодополнением. Поддерживает все методы API, работу с несколькими счетчиками\n * и различные сценарии использования.\n *\n * @example\n * // Внедрение сервиса\n * private metrika = inject(YMService);\n *\n * // Базовые сценарии использования\n * trackPageView() {\n *   this.metrika.hit('/page-url');\n * }\n *\n * trackGoal() {\n *   this.metrika.reachGoal('purchase', { order_price: 1000 });\n * }\n *\n * trackUser() {\n *   this.metrika.setUserID('user-123');\n * }\n *\n * // Работа с несколькими счетчиками\n * trackWithCustomCounter() {\n *   this.metrika.hitWithCounter('secondary', '/page');\n * }\n *\n * // Универсальные методы для произвольных вызовов\n * customTracking() {\n *   this.metrika.execute('customMethod', 'data');\n *   this.metrika.executeWithCounter('analytics', YMMethod.Hit, '/page');\n * }\n *\n * // Chaining примеры\n * trackUserJourney() {\n *   this.metrika\n *     .hit('/page')\n *     .reachGoal('view')\n *     .setUserID('user-123');\n * }\n *\n * @remarks\n * - 🛡️ Полная типобезопасность с автодополнением для всех методов API\n * - 🔧 Поддержка как enum (YMMethod), так и строковых литералов\n * - 🎯 Работа с одним или несколькими счетчиками\n * - 🌐 SSR-совместимость (Angular Universal)\n * - 🚀 Production-оптимизации (prodOnly флаг)\n * - ⚡ Автоматические проверки окружения (браузер, доступность API)\n * - 📝 Предупреждения о возможных опечатках в названиях методов\n * - ⛓️ Chaining поддержка для группировки вызовов\n * - 📚 Специализированные методы для каждого API вызова Яндекс.Метрики\n * - 🔄 Универсальные методы execute() и executeWithCounter() для гибкости\n *\n * ## Уровни доступа к API:\n *\n * ### 1. Специализированные методы (рекомендуется)\n * Полностью типобезопасные методы для каждого API вызова:\n * - `hit()`, `reachGoal()`, `setUserID()` и другие\n * - `methodNameWithCounter()` версии для конкретных счетчиков\n *\n * ### 2. Универсальные методы (для продвинутых сценариев)\n * Гибкие методы для произвольных вызовов:\n * - `execute(method, ...args)` - для счетчика по умолчанию\n * - `executeWithCounter(counter, method, ...args)` - для указанного счетчика\n *\n * ### 3. Низкоуровневый метод (устаревший)\n * - `ym()` - прямой вызов API (deprecated, будет удален в будущих версиях)\n *\n * @see YMConfig - Конфигурация счетчиков\n * @see provideYandexMetrika - Настройка провайдеров\n * @see YMMethod - Enum доступных методов API\n * @see YMMethodArgs - Типы аргументов для всех методов\n *\n * @publicApi\n */\n@Injectable({ providedIn: 'root' })\nexport class YMService {\n  readonly #configs = inject(YM_CONFIG_TOKEN, { optional: true });\n  readonly #defaultConfig = inject(YM_DEFAULT_CONFIG_TOKEN, { optional: true });\n  readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n  // ==================== УНИВЕРСАЛЬНЫЕ МЕТОДЫ ====================\n\n  /**\n   * Универсальный метод для вызова любого метода API Яндекс.Метрики.\n   * @deprecated Станет приватным в следующей мажорной версии. Используйте типобезопасные методы execute и executeWithCounter.\n   */\n  public ym(counterIdOrName: number | string, ...args: unknown[]): void;\n  public ym(...args: unknown[]): void;\n\n  public ym(...args: unknown[]): void {\n    if (args.length === 0) {\n      console.warn(`${libName}: Не предоставлены аргументы`);\n      return;\n    }\n\n    const firstArg = args[0];\n    const isFirstArgId = typeof firstArg === 'number';\n    const isFirstArgName = typeof firstArg === 'string' && this.isCounterName(firstArg);\n\n    let counterIdentifier: string | number | undefined;\n    let methodArgs: unknown[];\n    let targetCounterId: number | undefined;\n\n    if (isFirstArgId) {\n      counterIdentifier = firstArg;\n      methodArgs = args.slice(1);\n      targetCounterId = firstArg;\n    } else if (isFirstArgName) {\n      counterIdentifier = firstArg;\n      methodArgs = args.slice(1);\n      targetCounterId = this.getCounterIdByName(firstArg);\n    } else {\n      methodArgs = args;\n      targetCounterId = this.#defaultConfig?.id;\n    }\n\n    if (!this.canExecute(counterIdentifier)) return;\n\n    if (!targetCounterId) {\n      console.warn(`${libName}: Не найден действительный ID счетчика`);\n      return;\n    }\n\n    if (methodArgs.length === 0) {\n      console.warn(`${libName}: Отсутствует название метода`);\n      return;\n    }\n\n    const methodName = methodArgs[0];\n\n    if (typeof methodName !== 'string') {\n      console.warn(`${libName}: Название метода должно быть строкой`);\n      return;\n    }\n\n    try {\n      (window as any).ym(targetCounterId, ...methodArgs);\n    } catch (error) {\n      console.error(`${libName}: Ошибка вызова метода: `, error, {\n        counterId: targetCounterId,\n        methodArgs,\n      });\n    }\n  }\n\n  /**\n   * Типобезопасный вызов метода API для счетчика по умолчанию\n   *\n   * Поддерживает все методы Яндекс.Метрики с полной проверкой типов аргументов.\n   * При использовании неизвестных методов выводит предупреждение в консоль.\n   *\n   * @param method - Название метода (enum, строковый литерал или произвольная строка)\n   * @param args - Аргументы метода с типобезопасностью для известных методов\n   * @returns this для поддержки chaining\n   *\n   * @example\n   * // Использование enum (рекомендуется)\n   * this.metrika.execute(YMMethod.Hit, '/page');\n   *\n   * // Использование строкового литерала\n   * this.metrika.execute('reachGoal', 'purchase', { order_price: 1000 });\n   *\n   * // Произвольный метод (с предупреждением)\n   * this.metrika.execute('customMethod', 'data');\n   *\n   * // Chaining\n   * this.metrika\n   *   .execute(YMMethod.Hit, '/page')\n   *   .execute('reachGoal', 'view')\n   *   .execute(YMMethod.SetUserID, 'user-123');\n   */\n  public execute<T extends YMMethodType>(method: T, ...args: KnownMethodArgs<T>): this {\n    this.validateMethod(method);\n    this.ym(method as any, ...args);\n    return this;\n  }\n\n  /**\n   * Типобезопасный вызов метода API для указанного счетчика\n   *\n   * Аналогично методу execute, но позволяет явно указать целевой счетчик\n   * по его ID или имени.\n   *\n   * @param counterIdOrName - ID счетчика или его имя из конфигурации\n   * @param method - Название метода (enum, строковый литерал или произвольная строка)\n   * @param args - Аргументы метода с типобезопасностью для известных методов\n   * @returns this для поддержки chaining\n   *\n   * @example\n   * // По ID счетчика\n   * this.metrika.executeWithCounter(1234567, YMMethod.Hit, '/page');\n   *\n   * // По имени счетчика\n   * this.metrika.executeWithCounter('secondary', 'reachGoal', 'signup');\n   *\n   * // Chaining\n   * this.metrika\n   *   .executeWithCounter('main', YMMethod.Hit, '/page')\n   *   .executeWithCounter('secondary', YMMethod.ReachGoal, 'conversion');\n   */\n  public executeWithCounter<T extends YMMethodType>(\n    counterIdOrName: number | string,\n    method: T,\n    ...args: KnownMethodArgs<T>\n  ): this {\n    this.validateMethod(method);\n    this.ym(counterIdOrName, method as any, ...args);\n    return this;\n  }\n\n  // ==================== СПЕЦИАЛИЗИРОВАННЫЕ МЕТОДЫ ====================\n\n  /**\n   * Добавить поддержку расширения файла\n   * @see https://yandex.ru/support/metrica/ru/objects/addfileextension\n   */\n  public addFileExtension(...args: YMMethodArgs[YMMethod.AddFileExtension]): this {\n    return this.execute(YMMethod.AddFileExtension, ...args);\n  }\n\n  /**\n   * Добавить поддержку расширения файла (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/addfileextension\n   */\n  public addFileExtensionWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.AddFileExtension]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.AddFileExtension, ...args);\n  }\n\n  /**\n   * Отправка информации о переходе по внешней ссылке\n   * @see https://yandex.ru/support/metrica/ru/objects/extlink\n   */\n  public extLink(...args: YMMethodArgs[YMMethod.ExtLink]): this {\n    return this.execute(YMMethod.ExtLink, ...args);\n  }\n\n  /**\n   * Отправка информации о переходе по внешней ссылке (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/extlink\n   */\n  public extLinkWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.ExtLink]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.ExtLink, ...args);\n  }\n\n  /**\n   * Отправка информации о загрузке файла\n   * @see https://yandex.ru/support/metrica/ru/objects/file\n   */\n  public file(...args: YMMethodArgs[YMMethod.File]): this {\n    return this.execute(YMMethod.File, ...args);\n  }\n\n  /**\n   * Отправка информации о загрузке файла (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/file\n   */\n  public fileWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.File]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.File, ...args);\n  }\n\n  /**\n   * Отправка контактной информации посетителей сайта\n   * @see https://yandex.ru/support/metrica/ru/objects/first-party-params\n   */\n  public firstPartyParams(...args: YMMethodArgs[YMMethod.FirstPartyParams]): this {\n    return this.execute(YMMethod.FirstPartyParams, ...args);\n  }\n\n  /**\n   * Отправка контактной информации посетителей сайта (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/first-party-params\n   */\n  public firstPartyParamsWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.FirstPartyParams]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.FirstPartyParams, ...args);\n  }\n\n  /**\n   * Отправка контактной информации посетителей сайта с возможностью самостоятельного хеширования данных\n   * @see https://yandex.ru/support/metrica/ru/objects/first-party-params-hash\n   */\n  public firstPartyParamsHashed(...args: YMMethodArgs[YMMethod.FirstPartyParamsHashed]): this {\n    return this.execute(YMMethod.FirstPartyParamsHashed, ...args);\n  }\n\n  /**\n   * Отправка контактной информации посетителей сайта с возможностью самостоятельного хеширования данных (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/first-party-params-hash\n   */\n  public firstPartyParamsHashedWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.FirstPartyParamsHashed]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.FirstPartyParamsHashed, ...args);\n  }\n\n  /**\n   * Получение идентификатора посетителя, заданного Метрикой\n   * @see https://yandex.ru/support/metrica/ru/objects/get-client-id\n   */\n  public getClientID(...args: YMMethodArgs[YMMethod.GetClientID]): this {\n    return this.execute(YMMethod.GetClientID, ...args);\n  }\n\n  /**\n   * Получение идентификатора посетителя, заданного Метрикой (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/get-client-id\n   */\n  public getClientIDWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.GetClientID]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.GetClientID, ...args);\n  }\n\n  /**\n   * Отправка вручную данных о просмотрах для AJAX- и Flash-сайтов\n   * @see https://yandex.ru/support/metrica/ru/objects/hit\n   */\n  public hit(...args: YMMethodArgs[YMMethod.Hit]): this {\n    return this.execute(YMMethod.Hit, ...args);\n  }\n\n  /**\n   * Отправка вручную данных о просмотрах для AJAX- и Flash-сайтов (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/hit\n   */\n  public hitWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.Hit]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.Hit, ...args);\n  }\n\n  /**\n   * Передача информации о том, что визит пользователя не является отказом\n   * @see https://yandex.ru/support/metrica/ru/objects/notbounce\n   */\n  public notBounce(...args: YMMethodArgs[YMMethod.NotBounce]): this {\n    return this.execute(YMMethod.NotBounce, ...args);\n  }\n\n  /**\n   * Передача информации о том, что визит пользователя не является отказом (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/notbounce\n   */\n  public notBounceWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.NotBounce]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.NotBounce, ...args);\n  }\n\n  /**\n   * Дополнительный способ передачи пользовательских параметров в отчет Параметры визитов\n   * @see https://yandex.ru/support/metrica/ru/objects/params-method\n   */\n  public params(...args: YMMethodArgs[YMMethod.Params]): this {\n    return this.execute(YMMethod.Params, ...args);\n  }\n\n  /**\n   * Дополнительный способ передачи пользовательских параметров в отчет Параметры визитов (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/params-method\n   */\n  public paramsWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.Params]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.Params, ...args);\n  }\n\n  /**\n   * Достижение цели\n   * @see https://yandex.ru/support/metrica/ru/objects/reachgoal\n   */\n  public reachGoal(...args: YMMethodArgs[YMMethod.ReachGoal]): this {\n    return this.execute(YMMethod.ReachGoal, ...args);\n  }\n\n  /**\n   * Достижение цели (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/reachgoal\n   */\n  public reachGoalWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.ReachGoal]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.ReachGoal, ...args);\n  }\n\n  /**\n   * Передача идентификатора посетителя, заданного владельцем сайта\n   * @see https://yandex.ru/support/metrica/ru/objects/set-user-id\n   */\n  public setUserID(...args: YMMethodArgs[YMMethod.SetUserID]): this {\n    return this.execute(YMMethod.SetUserID, ...args);\n  }\n\n  /**\n   * Передача идентификатора посетителя, заданного владельцем сайта (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/set-user-id\n   */\n  public setUserIDWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.SetUserID]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.SetUserID, ...args);\n  }\n\n  /**\n   * Способ передачи пользовательских параметров в отчет Параметры посетителей\n   * @see https://yandex.ru/support/metrica/ru/objects/user-params\n   */\n  public userParams(...args: YMMethodArgs[YMMethod.UserParams]): this {\n    return this.execute(YMMethod.UserParams, ...args);\n  }\n\n  /**\n   * Способ передачи пользовательских параметров в отчет Параметры посетителей (для конкретного счетчика)\n   * @see https://yandex.ru/support/metrica/ru/objects/user-params\n   */\n  public userParamsWithCounter(\n    counterIdOrName: number | string,\n    ...args: YMMethodArgs[YMMethod.UserParams]\n  ): this {\n    return this.executeWithCounter(counterIdOrName, YMMethod.UserParams, ...args);\n  }\n\n  // ==================== ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ====================\n\n  /**\n   * Проверяет метод и выводит предупреждение если метод неизвестен\n   */\n  private validateMethod(method: YMMethodType): void {\n    if (typeof method !== 'string') return;\n\n    const methodName = method as string;\n\n    if (!KNOWN_METHODS.has(methodName as YMMethod)) {\n      console.warn(\n        `${libName}: Вызывается неизвестный метод \"${methodName}\". ` +\n          `Возможна опечатка. Доступные методы: ${Array.from(KNOWN_METHODS).join(', ')}`,\n      );\n    }\n  }\n\n  private isCounterName(name: string): boolean {\n    return this.#configs?.some((config) => config.name === name) ?? false;\n  }\n\n  private getCounterIdByName(name: string): number | undefined {\n    return this.#configs?.find((config) => config.name === name)?.id;\n  }\n\n  private canExecute(counterIdOrName?: string | number): boolean {\n    if (!this.#isBrowser || typeof (window as any).ym !== 'function') return false;\n\n    if (!this.#configs || this.#configs.length === 0) {\n      console.warn(`${libName}: Не настроены счетчики`);\n      return false;\n    }\n\n    if (counterIdOrName !== undefined) {\n      const config = this.getCounterConfig(counterIdOrName);\n\n      if (!config) {\n        const availableCounters = this.#configs\n          .map((c) => (c.name ? `${c.name} (${c.id})` : c.id.toString()))\n          .join(', ');\n        console.warn(\n          `${libName}: Счетчик \"${counterIdOrName}\" не найден. Доступные: ${availableCounters}`,\n        );\n        return false;\n      }\n\n      return !!config.id && (!config.prodOnly || !isDevMode());\n    }\n\n    if (!this.#defaultConfig) {\n      console.warn(`${libName}: Не настроен счетчик по умолчанию`);\n      return false;\n    }\n\n    return !!this.#defaultConfig.id && (!this.#defaultConfig.prodOnly || !isDevMode());\n  }\n\n  private getCounterConfig(counterIdOrName: string | number): YMConfig | undefined {\n    if (!this.#configs) return undefined;\n\n    if (typeof counterIdOrName === 'number') {\n      return this.#configs.find((config) => config.id === counterIdOrName);\n    } else {\n      return this.#configs.find((config) => config.name === counterIdOrName);\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}