{"version":3,"sources":["send.ts"],"sourcesContent":["import { isBrowser } from \"framer-motion\"\n\n/* Source: https://github.com/elgorditosalsero/react-gtm-hook/tree/master/src/utils */\n\n/**\n * The shape of the dataLayer\n */\ninterface DateLayerType {\n    dataLayer: Object | undefined\n    dataLayerName: string\n}\n\n/**\n * The shape of the GTM Snippets\n */\ninterface SnippetsType {\n    gtmDataLayer: string\n    gtmIframe: string\n    gtmScript: string\n}\n\n/**\n * The variables required to use a GTM custom environment\n */\ninterface CustomEnvironmentParamsType {\n    /**\n     * For the `gtm_auth` parameter.\n     */\n    gtm_auth: string\n\n    /**\n     * For the `gtm_preview` parameter.\n     */\n    gtm_preview: string\n}\n\n/**\n * The shape of the GTM Snippets params\n */\ninterface SnippetsParamsType {\n    dataLayer?: Pick<DateLayerType, \"dataLayer\">[\"dataLayer\"]\n    dataLayerName?: Pick<DateLayerType, \"dataLayerName\">[\"dataLayerName\"]\n    environment?: CustomEnvironmentParamsType\n    nonce?: string\n    id: string\n    injectScript?: boolean\n    /** Defaults to https://www.googletagmanager.com */\n    customDomain?: string\n    /** Defaults to gtm.js */\n    customScriptName?: string\n}\n\n/**\n * The shape of the setupGTM function\n */\ninterface SetupGTMType {\n    getDataLayerScript(): HTMLElement\n    getScript(): HTMLElement\n}\n\nexport const DEFAULT_DOMAIN = \"https://www.googletagmanager.com\"\nexport const DEFAULT_SCRIPT_NAME = \"gtm.js\"\n\n/**\n * Function to get and set dataLayer\n * @param dataLayer - The dataLayer\n * @param dataLayerName - The dataLayer name\n */\nconst getDataLayerSnippet = (\n    dataLayer: Pick<DateLayerType, \"dataLayer\">[\"dataLayer\"],\n    dataLayerName: Pick<\n        DateLayerType,\n        \"dataLayerName\"\n    >[\"dataLayerName\"] = \"dataLayer\"\n): Pick<SnippetsType, \"gtmDataLayer\">[\"gtmDataLayer\"] =>\n    `window['${dataLayerName}']=window['${dataLayerName}']||[];` +\n    (dataLayer\n        ? `window['${dataLayerName}'].push(${JSON.stringify(dataLayer)});`\n        : \"\") +\n    `window['${dataLayerName}'].push({'gtm.start':new Date().getTime(),event:'gtm.js'})`\n\n/**\n * Function to get the GTM script\n * @param dataLayerName - The name of the dataLayer\n * @param customDomain - Custom domain for gtm\n * @param customScriptName - Custom script file name for gtm\n * @param environment - The parameters to use a custom environment\n * @param id - The id of the container\n */\nconst getGTMScript = (\n    dataLayerName: Pick<SnippetsParamsType, \"dataLayerName\">[\"dataLayerName\"],\n    id: Pick<SnippetsParamsType, \"id\">[\"id\"],\n    environment?: CustomEnvironmentParamsType,\n    customDomain: SnippetsParamsType[\"customDomain\"] = DEFAULT_DOMAIN,\n    customScriptName: SnippetsParamsType[\"customScriptName\"] = DEFAULT_SCRIPT_NAME\n) => {\n    let params = \"\"\n    if (environment) {\n        const { gtm_auth, gtm_preview } = environment\n        params = `&gtm_auth=${gtm_auth}&gtm_preview=${gtm_preview}&gtm_cookies_win=x`\n    }\n\n    return `${customDomain}/${customScriptName}?id=${id}${\n        dataLayerName === \"dataLayer\" ? \"\" : `&l=${dataLayerName}`\n    }${params}`\n}\n\n/**\n * Function to setup the Google Tag Manager\n * @param params - The snippets params\n */\nconst setupGTM = (params: SnippetsParamsType): SetupGTMType => {\n    const getDataLayerScript = (): HTMLElement => {\n        const dataLayerScript = document.createElement(\"script\")\n        if (params.nonce) {\n            dataLayerScript.setAttribute(\"nonce\", params.nonce)\n        }\n        dataLayerScript.innerHTML = getDataLayerSnippet(\n            params.dataLayer,\n            params.dataLayerName\n        )\n        return dataLayerScript\n    }\n\n    const getScript = (): HTMLElement => {\n        const script = document.createElement(\"script\")\n        if (params.nonce) {\n            script.setAttribute(\"nonce\", params.nonce)\n        }\n        script.src = getGTMScript(\n            params.dataLayerName,\n            params.id,\n            params.environment,\n            params.customDomain,\n            params.customScriptName\n        )\n        script.crossOrigin = \"anonymous\" // allows for more detailed INP collection\n        return script\n    }\n\n    return {\n        getDataLayerScript,\n        getScript,\n    }\n}\n\n/**\n * Function to init the GTM\n * @param dataLayer - The dataLayer\n * @param dataLayerName - The dataLayer name\n * @param environment - Specify the custom environment to use\n * @param nonce - Server-generated nonce\n * @param id - The ID of the GTM\n */\nexport const initGTM = ({\n    dataLayer,\n    dataLayerName,\n    environment,\n    nonce,\n    id,\n    customDomain,\n    customScriptName,\n}: SnippetsParamsType): void => {\n    const gtm = setupGTM({\n        dataLayer,\n        dataLayerName,\n        environment,\n        nonce,\n        id,\n        customDomain,\n        customScriptName,\n    })\n\n    const dataLayerScript = gtm.getDataLayerScript()\n    const script = gtm.getScript()\n\n    document.head.append(dataLayerScript, script)\n}\n\nexport function sendToGTM(...args: any[])\nexport function sendToGTM() {\n    if (isBrowser) {\n        window[\"dataLayer\"] = window[\"dataLayer\"] || []\n        window[\"dataLayer\"].push(arguments)\n    }\n}\n"],"names":[],"mappings":"AAAA,OAAS,SAAS,KAAQ,gBAAe,AA4DzC,OAAO,MAAM,eAAiB,mCAAkC,AAChE,OAAO,MAAM,oBAAsB,SAAQ,AAE3C;;;;CAIC,EACD,MAAM,oBAAsB,CACxB,UACA,cAGqB,WAAW,GAEhC,CAAC,QAAQ,EAAE,cAAc,WAAW,EAAE,cAAc,OAAO,CAAC,CAC5D,CAAC,UACK,CAAC,QAAQ,EAAE,cAAc,QAAQ,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAChE,EAAE,EACR,CAAC,QAAQ,EAAE,cAAc,0DAA0D,CAAC,CAExF;;;;;;;CAOC,EACD,MAAM,aAAe,CACjB,cACA,GACA,YACA,aAAmD,cAAc,CACjE,iBAA2D,mBAAmB,IAE9E,IAAI,OAAS,GACb,GAAI,YAAa,CACb,KAAM,CAAE,QAAQ,CAAE,WAAW,CAAE,CAAG,YAClC,OAAS,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,YAAY,kBAAkB,CAAC,CACjF,CAEA,MAAO,CAAC,EAAE,aAAa,CAAC,EAAE,iBAAiB,IAAI,EAAE,GAAG,EAChD,gBAAkB,YAAc,GAAK,CAAC,GAAG,EAAE,cAAc,CAAC,CAC7D,EAAE,OAAO,CAAC,CACf,EAEA;;;CAGC,EACD,MAAM,SAAW,AAAC,SACd,MAAM,mBAAqB,KACvB,MAAM,gBAAkB,SAAS,aAAa,CAAC,UAC/C,GAAI,OAAO,KAAK,CAAE,CACd,gBAAgB,YAAY,CAAC,QAAS,OAAO,KAAK,EACtD,CACA,gBAAgB,SAAS,CAAG,oBACxB,OAAO,SAAS,CAChB,OAAO,aAAa,EAExB,OAAO,gBACX,EAEA,MAAM,UAAY,KACd,MAAM,OAAS,SAAS,aAAa,CAAC,UACtC,GAAI,OAAO,KAAK,CAAE,CACd,OAAO,YAAY,CAAC,QAAS,OAAO,KAAK,EAC7C,CACA,OAAO,GAAG,CAAG,aACT,OAAO,aAAa,CACpB,OAAO,EAAE,CACT,OAAO,WAAW,CAClB,OAAO,YAAY,CACnB,OAAO,gBAAgB,EAE3B,OAAO,WAAW,CAAG,WAAY,0CAA0C;CAC3E,OAAO,OACX,EAEA,MAAO,CACH,mBACA,SACJ,EACJ,EAEA;;;;;;;CAOC,EACD,OAAO,MAAM,QAAU,CAAC,CACpB,SAAS,CACT,aAAa,CACb,WAAW,CACX,KAAK,CACL,EAAE,CACF,YAAY,CACZ,gBAAgB,CACC,IACjB,MAAM,IAAM,SAAS,CACjB,UACA,cACA,YACA,MACA,GACA,aACA,gBACJ,GAEA,MAAM,gBAAkB,IAAI,kBAAkB,GAC9C,MAAM,OAAS,IAAI,SAAS,GAE5B,SAAS,IAAI,CAAC,MAAM,CAAC,gBAAiB,QAC1C,EAAC,AAGD,OAAO,SAAS,YACZ,GAAI,UAAW,CACX,MAAM,CAAC,YAAY,CAAG,MAAM,CAAC,YAAY,EAAI,EAAE,CAC/C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAC7B,CACJ"}