{"version":3,"sources":["../src/components/YandexMetrika.tsx","../src/hooks/usePageViews.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import Script from 'next/script'\n\nfunction YandexMetrikaTag({\n  yid,\n  clickmap = true,\n  trackLinks = true,\n  accurateTrackBounce = true,\n  webvisor = false,\n  strategy = 'afterInteractive',\n}: {\n  yid: number,\n  clickmap?: boolean,\n  trackLinks?: boolean,\n  accurateTrackBounce?: boolean,\n  webvisor?: boolean,\n  strategy?: 'lazyOnload' | 'afterInteractive' | 'beforeInteractive'\n}) {\n  return (\n    <Script id=\"yandex-metrika-tag\" strategy={strategy}>\n      {`\n        (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};\n        m[i].l=1*new Date();\n        for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}\n        k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})\n        (window, document, \"script\", \"https://mc.webvisor.org/metrika/tag_ww.js\", \"ym\");\n\n        ym(${yid}, \"init\", {\n            clickmap:${clickmap},\n            trackLinks:${trackLinks},\n            accurateTrackBounce:${accurateTrackBounce},\n            webvisor:${webvisor}\n        });\n      `}\n    </Script>\n  );\n}\n\nfunction YandexMetrikaPixel({ yid }: { yid: number }) {\n  const src = `https://mc.yandex.ru/watch/${yid}`;\n\n  /* eslint-disable @next/next/no-img-element */\n  return (\n    <noscript id=\"yandex-metrika-pixel\">\n      <div>\n        <img\n          src={src}\n          style={{ position: \"absolute\", left: \"-9999px\" }}\n          alt=\"\"\n        />\n      </div>\n    </noscript>\n  );\n}\n\nexport function YandexMetrika({\n  yid,\n  clickmap = true,\n  trackLinks = true,\n  accurateTrackBounce = true,\n  webvisor = false,\n  strategy = 'afterInteractive'\n}: {\n  yid?: number,\n  clickmap?: boolean,\n  trackLinks?: boolean,\n  accurateTrackBounce?: boolean,\n  webvisor?: boolean,\n  strategy?: 'lazyOnload' | 'afterInteractive' | 'beforeInteractive'\n}) {\n  yid = yid ?? Number(process.env.NEXT_PUBLIC_YANDEX_ID)\n\n  if (!yid) {\n    console.warn('Yandex Metrika ID is not set')\n    return null\n  }\n\n  return (\n    <>\n      <YandexMetrikaTag\n        yid={yid}\n        clickmap={clickmap}\n        trackLinks={trackLinks}\n        accurateTrackBounce={accurateTrackBounce}\n        webvisor={webvisor}\n        strategy={strategy}\n      />\n      <YandexMetrikaPixel yid={yid} />\n    </>\n  );\n}\n","'use client'\n\nimport { useEffect } from 'react'\nimport { Router } from \"next/router\";\n\ntype HitOptions = {\n  callback?: () => void\n  ctx?: object\n  params?: {\n    order_price?: number\n    currency?: string\n  }\n  referer?: string\n  title?: string\n}\n\ninterface UsePageViewsOptions {\n  ignoreHashChange?: boolean\n  disabled?: boolean\n}\n\nconst trackPageView = (url: string, options?: HitOptions) => {\n  if (typeof window !== 'undefined' && 'ym' in window) {\n    const ym = window.ym as unknown as (yid: number, method: string, url: string, options?: HitOptions) => void\n    const yid = Number(process.env.NEXT_PUBLIC_YANDEX_ID)\n\n    if (!ym || !yid) {\n      return\n    }\n\n    https://yandex.ru/support/metrica/code/counter-spa-setup.html\n    ym(yid, 'hit', url, {\n      ...options,\n      title: options?.title || document.title\n    })\n  }\n}\n\nexport function usePageViews({\n  ignoreHashChange,\n  disabled\n}: UsePageViewsOptions = {}) {\n\n  useEffect(() => {\n    if (disabled) {\n      return\n    }\n\n    const handleRouteChange = (url: string) => {\n      trackPageView(url)\n    }\n\n    if (typeof window !== 'undefined') {\n      Router.events.on('routeChangeComplete', handleRouteChange)\n\n      if (!ignoreHashChange) {\n        Router.events.on('hashChangeComplete', handleRouteChange) \n      }\n\n      return () => {\n        Router.events.off('routeChangeComplete', handleRouteChange)\n        \n        if (!ignoreHashChange) {\n          Router.events.off('hashChangeComplete', handleRouteChange)\n        }\n      }\n    }\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [Router.events, ignoreHashChange, disabled])\n}\n"]}