@jwiedeman/gtm-kit-nuxt 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -20
- package/dist/index.cjs +13 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @jwiedeman/gtm-kit-nuxt
|
|
2
2
|
|
|
3
3
|
[](https://github.com/jwiedeman/react-gtm-kit/actions/workflows/ci.yml)
|
|
4
4
|
[](https://codecov.io/gh/jwiedeman/react-gtm-kit)
|
|
5
|
-
[](https://www.npmjs.com/package/@jwiedeman/gtm-kit-nuxt)
|
|
6
|
+
[](https://bundlephobia.com/package/@jwiedeman/gtm-kit-nuxt)
|
|
7
7
|
[](https://www.typescriptlang.org/)
|
|
8
8
|
[](https://opensource.org/licenses/MIT)
|
|
9
9
|
[](https://nuxt.com/)
|
|
@@ -17,15 +17,15 @@ The Nuxt adapter for GTM Kit - native module with automatic page tracking and SS
|
|
|
17
17
|
## Installation
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
npm install @
|
|
20
|
+
npm install @jwiedeman/gtm-kit @jwiedeman/gtm-kit-nuxt
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
yarn add @
|
|
24
|
+
yarn add @jwiedeman/gtm-kit @jwiedeman/gtm-kit-nuxt
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
pnpm add @
|
|
28
|
+
pnpm add @jwiedeman/gtm-kit @jwiedeman/gtm-kit-nuxt
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
---
|
|
@@ -36,7 +36,7 @@ pnpm add @react-gtm-kit/core @react-gtm-kit/nuxt
|
|
|
36
36
|
|
|
37
37
|
```ts
|
|
38
38
|
// plugins/gtm.client.ts
|
|
39
|
-
import { GtmPlugin } from '@
|
|
39
|
+
import { GtmPlugin } from '@jwiedeman/gtm-kit-nuxt';
|
|
40
40
|
|
|
41
41
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
42
42
|
nuxtApp.vueApp.use(GtmPlugin, { containers: 'GTM-XXXXXX' });
|
|
@@ -47,7 +47,7 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
47
47
|
|
|
48
48
|
```vue
|
|
49
49
|
<script setup>
|
|
50
|
-
import { useGtm } from '@
|
|
50
|
+
import { useGtm } from '@jwiedeman/gtm-kit-vue';
|
|
51
51
|
|
|
52
52
|
const { push } = useGtm();
|
|
53
53
|
|
|
@@ -76,8 +76,8 @@ push({ event: 'page_view' });
|
|
|
76
76
|
|
|
77
77
|
```ts
|
|
78
78
|
// plugins/gtm.client.ts
|
|
79
|
-
import { GtmPlugin } from '@
|
|
80
|
-
import { consentPresets } from '@
|
|
79
|
+
import { GtmPlugin } from '@jwiedeman/gtm-kit-nuxt';
|
|
80
|
+
import { consentPresets } from '@jwiedeman/gtm-kit';
|
|
81
81
|
|
|
82
82
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
83
83
|
nuxtApp.vueApp.use(GtmPlugin, {
|
|
@@ -95,13 +95,13 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
95
95
|
|
|
96
96
|
## Available Composables
|
|
97
97
|
|
|
98
|
-
All composables from `@
|
|
98
|
+
All composables from `@jwiedeman/gtm-kit-vue` are available:
|
|
99
99
|
|
|
100
100
|
### `useGtm()`
|
|
101
101
|
|
|
102
102
|
```vue
|
|
103
103
|
<script setup>
|
|
104
|
-
import { useGtm } from '@
|
|
104
|
+
import { useGtm } from '@jwiedeman/gtm-kit-vue';
|
|
105
105
|
|
|
106
106
|
const { push, updateConsent } = useGtm();
|
|
107
107
|
</script>
|
|
@@ -111,7 +111,7 @@ const { push, updateConsent } = useGtm();
|
|
|
111
111
|
|
|
112
112
|
```vue
|
|
113
113
|
<script setup>
|
|
114
|
-
import { useGtmPush } from '@
|
|
114
|
+
import { useGtmPush } from '@jwiedeman/gtm-kit-vue';
|
|
115
115
|
|
|
116
116
|
const push = useGtmPush();
|
|
117
117
|
|
|
@@ -123,7 +123,7 @@ push({ event: 'purchase', value: 99.99 });
|
|
|
123
123
|
|
|
124
124
|
```vue
|
|
125
125
|
<script setup>
|
|
126
|
-
import { useGtmConsent } from '@
|
|
126
|
+
import { useGtmConsent } from '@jwiedeman/gtm-kit-vue';
|
|
127
127
|
|
|
128
128
|
const { updateConsent } = useGtmConsent();
|
|
129
129
|
</script>
|
|
@@ -139,7 +139,7 @@ If you need custom page tracking:
|
|
|
139
139
|
|
|
140
140
|
```vue
|
|
141
141
|
<script setup>
|
|
142
|
-
import { useGtm } from '@
|
|
142
|
+
import { useGtm } from '@jwiedeman/gtm-kit-vue';
|
|
143
143
|
import { useRoute } from 'vue-router';
|
|
144
144
|
import { watch } from 'vue';
|
|
145
145
|
|
|
@@ -167,8 +167,8 @@ watch(
|
|
|
167
167
|
|
|
168
168
|
```ts
|
|
169
169
|
// plugins/gtm.client.ts
|
|
170
|
-
import { GtmPlugin } from '@
|
|
171
|
-
import { consentPresets } from '@
|
|
170
|
+
import { GtmPlugin } from '@jwiedeman/gtm-kit-nuxt';
|
|
171
|
+
import { consentPresets } from '@jwiedeman/gtm-kit';
|
|
172
172
|
|
|
173
173
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
174
174
|
nuxtApp.vueApp.use(GtmPlugin, {
|
|
@@ -184,8 +184,8 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
184
184
|
```vue
|
|
185
185
|
<!-- components/CookieBanner.vue -->
|
|
186
186
|
<script setup>
|
|
187
|
-
import { useGtmConsent } from '@
|
|
188
|
-
import { consentPresets } from '@
|
|
187
|
+
import { useGtmConsent } from '@jwiedeman/gtm-kit-vue';
|
|
188
|
+
import { consentPresets } from '@jwiedeman/gtm-kit';
|
|
189
189
|
|
|
190
190
|
const { updateConsent } = useGtmConsent();
|
|
191
191
|
|
|
@@ -304,7 +304,7 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|
|
304
304
|
|
|
305
305
|
- Nuxt 3.0+
|
|
306
306
|
- Vue 3.3+
|
|
307
|
-
- `@
|
|
307
|
+
- `@jwiedeman/gtm-kit` (peer dependency)
|
|
308
308
|
|
|
309
309
|
---
|
|
310
310
|
|
package/dist/index.cjs
CHANGED
|
@@ -4,7 +4,7 @@ var vue = require('vue');
|
|
|
4
4
|
var gtmKitVue = require('@jwiedeman/gtm-kit-vue');
|
|
5
5
|
var gtmKit = require('@jwiedeman/gtm-kit');
|
|
6
6
|
|
|
7
|
-
var C=(t,e)=>{var o;t.use(gtmKitVue.GtmPlugin,e);let i=(o=t.config.globalProperties.$gtm)==null?void 0:o.client;if(!i)throw new Error("[gtm-kit/nuxt] Failed to initialize GTM client");return i},h=gtmKitVue.useGtm,N=gtmKitVue.useGtmPush,k=gtmKitVue.useGtmConsent,y=gtmKitVue.useGtmClient,v=t=>{let{route:e,eventName:i="page_view",includeQueryParams:o=!0,additionalData:n,trackInitialPageView:l=!0}=t,r=t.client;if(!r)try{r=gtmKitVue.useGtmClient();}catch(u){}if(!r){console.warn("[gtm-kit/nuxt] useTrackPageViews: No GTM client available. Make sure GtmPlugin is installed or pass a client option.");return}let
|
|
7
|
+
var C=(t,e)=>{var o;t.use(gtmKitVue.GtmPlugin,e);let i=(o=t.config.globalProperties.$gtm)==null?void 0:o.client;if(!i)throw new Error("[gtm-kit/nuxt] Failed to initialize GTM client");return i},h=gtmKitVue.useGtm,N=gtmKitVue.useGtmPush,k=gtmKitVue.useGtmConsent,y=gtmKitVue.useGtmClient,v=t=>{let{route:e,eventName:i="page_view",includeQueryParams:o=!0,additionalData:n,trackInitialPageView:l=!0}=t,r=t.client;if(!r)try{r=gtmKitVue.useGtmClient();}catch(u){}if(!r){console.warn("[gtm-kit/nuxt] useTrackPageViews: No GTM client available. Make sure GtmPlugin is installed or pass a client option.");return}let a=vue.ref(""),c=()=>o?e.fullPath:e.path,p=()=>typeof n=="function"?n():n!=null?n:{},s=()=>{let u=c();u!==a.value&&(a.value=u,r.push({event:i,page_path:u,page_location:typeof window!="undefined"?window.location.href:void 0,page_title:typeof document!="undefined"?document.title:void 0,...p()}));};vue.onMounted(()=>{l&&s();}),vue.watch(()=>e.fullPath,()=>{s();});};
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, 'GTM_INJECTION_KEY', {
|
|
10
10
|
enumerable: true,
|
|
@@ -34,10 +34,22 @@ Object.defineProperty(exports, 'useGtmReady', {
|
|
|
34
34
|
enumerable: true,
|
|
35
35
|
get: function () { return gtmKitVue.useGtmReady; }
|
|
36
36
|
});
|
|
37
|
+
Object.defineProperty(exports, 'allGranted', {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function () { return gtmKit.allGranted; }
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(exports, 'analyticsOnly', {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get: function () { return gtmKit.analyticsOnly; }
|
|
44
|
+
});
|
|
37
45
|
Object.defineProperty(exports, 'consentPresets', {
|
|
38
46
|
enumerable: true,
|
|
39
47
|
get: function () { return gtmKit.consentPresets; }
|
|
40
48
|
});
|
|
49
|
+
Object.defineProperty(exports, 'eeaDefault', {
|
|
50
|
+
enumerable: true,
|
|
51
|
+
get: function () { return gtmKit.eeaDefault; }
|
|
52
|
+
});
|
|
41
53
|
Object.defineProperty(exports, 'pushEcommerce', {
|
|
42
54
|
enumerable: true,
|
|
43
55
|
get: function () { return gtmKit.pushEcommerce; }
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/module.ts","../src/index.ts"],"names":["ref","watch","onMounted","GtmPlugin","useGtm","useGtmPush","useGtmConsent","useGtmClient","createNuxtGtmPlugin","app","options","_a","client","useNuxtGtm","useNuxtGtmPush","useNuxtGtmConsent","useNuxtGtmClient","useTrackPageViews","route","eventName","includeQueryParams","additionalData","trackInitialPageView","e","lastTrackedPath","getPagePath","getAdditionalData","trackPageView","pagePath","useGtmReady","GTM_INJECTION_KEY","consentPresets","pushEvent","pushEcommerce"],"mappings":"AAAA,OAAS,OAAAA,EAAK,SAAAC,EAAO,aAAAC,MAA2B,MAEhD,OACE,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,MAGK,yBAmCA,IAAMC,EAAsB,CAACC,EAAUC,IAAuC,CA7CrF,IAAAC,EA+CEF,EAAI,IAAIN,EAAWO,CAAO,EAG1B,IAAME,GAAUD,EAAAF,EAAI,OAAO,iBAA2C,OAAtD,YAAAE,EAA4D,OAE5E,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,gDAAgD,EAGlE,OAAOA,CACT,EAeaC,EAAaT,EAMbU,EAAiBT,EAMjBU,EAAoBT,EAMpBU,EAAmBT,EAgEnBU,EAAqBP,GAAyC,CACzE,GAAM,CACJ,MAAAQ,EACA,UAAAC,EAAY,YACZ,mBAAAC,EAAqB,GACrB,eAAAC,EACA,qBAAAC,EAAuB,EACzB,EAAIZ,EAGAE,EAAgCF,EAAQ,OAE5C,GAAI,CAACE,EACH,GAAI,CACFA,EAASL,EAAa,CACxB,OAAQgB,EAAA,CAER,CAGF,GAAI,CAACX,EAAQ,CACX,QAAQ,KACN,sHAEF,EACA,MACF,CAEA,IAAMY,EAAkBxB,EAAY,EAAE,EAEhCyB,EAAc,IACdL,EACKF,EAAM,SAERA,EAAM,KAGTQ,EAAoB,IACpB,OAAOL,GAAmB,WACrBA,EAAe,EAEjBA,GAAA,KAAAA,EAAkB,CAAC,EAGtBM,EAAgB,IAAY,CAChC,IAAMC,EAAWH,EAAY,EAGzBG,IAAaJ,EAAgB,QAIjCA,EAAgB,MAAQI,EAExBhB,EAAQ,KAAK,CACX,MAAOO,EACP,UAAWS,EACX,cAAe,OAAO,QAAW,YAAc,OAAO,SAAS,KAAO,OACtE,WAAY,OAAO,UAAa,YAAc,SAAS,MAAQ,OAC/D,GAAGF,EAAkB,CACvB,CAAC,EACH,EAGAxB,EAAU,IAAM,CACVoB,GACFK,EAAc,CAElB,CAAC,EAGD1B,EACE,IAAMiB,EAAM,SACZ,IAAM,CACJS,EAAc,CAChB,CACF,CACF,EC5NA,OACE,UAAAvB,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,eAAAsB,EACA,aAAA1B,EACA,qBAAA2B,MACK,yBAYP,OAAS,kBAAAC,EAAgB,aAAAC,EAAW,iBAAAC,MAAqB","sourcesContent":["import { ref, watch, onMounted, type App } from 'vue';\nimport { type GtmClient } from '@jwiedeman/gtm-kit';\nimport {\n GtmPlugin,\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n type GtmPluginOptions,\n type GtmContext\n} from '@jwiedeman/gtm-kit-vue';\n\n/**\n * Options for the Nuxt GTM module.\n * Extends the Vue plugin options.\n *\n * For automatic page tracking, use the `useTrackPageViews` composable\n * in your app.vue or layout component.\n */\nexport type NuxtGtmOptions = GtmPluginOptions;\n\n/**\n * Extended context for Nuxt with additional helpers.\n */\nexport interface NuxtGtmContext extends GtmContext {\n /** Track a page view manually */\n trackPageView: (path?: string, additionalData?: Record<string, unknown>) => void;\n}\n\n/**\n * Creates a Nuxt plugin for GTM Kit.\n * Use this in your Nuxt plugins directory.\n *\n * @example\n * ```ts\n * // plugins/gtm.client.ts\n * import { createNuxtGtmPlugin } from '@jwiedeman/gtm-kit-nuxt';\n *\n * export default defineNuxtPlugin((nuxtApp) => {\n * createNuxtGtmPlugin(nuxtApp.vueApp, {\n * containers: 'GTM-XXXXXX'\n * });\n * });\n * ```\n */\nexport const createNuxtGtmPlugin = (app: App, options: NuxtGtmOptions): GtmClient => {\n // Install the Vue plugin\n app.use(GtmPlugin, options);\n\n // Get the client from the Vue plugin\n const client = (app.config.globalProperties as { $gtm?: GtmContext }).$gtm?.client;\n\n if (!client) {\n throw new Error('[gtm-kit/nuxt] Failed to initialize GTM client');\n }\n\n return client;\n};\n\n/**\n * Composable for accessing the full GTM context in Nuxt.\n * This is an alias for useGtm() from @jwiedeman/gtm-kit-vue.\n *\n * @example\n * ```vue\n * <script setup>\n * const { push, client } = useNuxtGtm();\n *\n * push({ event: 'custom_event' });\n * </script>\n * ```\n */\nexport const useNuxtGtm = useGtm;\n\n/**\n * Composable for pushing events in Nuxt.\n * This is an alias for useGtmPush() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmPush = useGtmPush;\n\n/**\n * Composable for consent management in Nuxt.\n * This is an alias for useGtmConsent() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmConsent = useGtmConsent;\n\n/**\n * Composable for accessing the raw GTM client in Nuxt.\n * This is an alias for useGtmClient() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmClient = useGtmClient;\n\n/**\n * Options for the useTrackPageViews composable.\n */\nexport interface TrackPageViewsOptions {\n /**\n * The GTM client instance to use.\n * If not provided, will use the client from the Vue plugin context.\n */\n client?: GtmClient;\n\n /**\n * Reactive route object to watch for changes.\n * Use useRoute() from Nuxt.\n */\n route: {\n fullPath: string;\n path: string;\n query?: Record<string, unknown>;\n };\n\n /**\n * Custom page view event name.\n * @default 'page_view'\n */\n eventName?: string;\n\n /**\n * Whether to include query parameters in page path.\n * @default true\n */\n includeQueryParams?: boolean;\n\n /**\n * Additional data to include with each page view event.\n */\n additionalData?: Record<string, unknown> | (() => Record<string, unknown>);\n\n /**\n * Whether to track the initial page view on mount.\n * @default true\n */\n trackInitialPageView?: boolean;\n}\n\n/**\n * Composable for automatic page view tracking with Nuxt Router.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTrackPageViews } from '@jwiedeman/gtm-kit-nuxt';\n *\n * const route = useRoute();\n *\n * useTrackPageViews({\n * route,\n * eventName: 'page_view',\n * additionalData: { site_section: 'main' }\n * });\n * </script>\n * ```\n */\nexport const useTrackPageViews = (options: TrackPageViewsOptions): void => {\n const {\n route,\n eventName = 'page_view',\n includeQueryParams = true,\n additionalData,\n trackInitialPageView = true\n } = options;\n\n // Try to get client from options or from context\n let client: GtmClient | undefined = options.client;\n\n if (!client) {\n try {\n client = useGtmClient();\n } catch {\n // Client not available from context, will throw later if needed\n }\n }\n\n if (!client) {\n console.warn(\n '[gtm-kit/nuxt] useTrackPageViews: No GTM client available. ' +\n 'Make sure GtmPlugin is installed or pass a client option.'\n );\n return;\n }\n\n const lastTrackedPath = ref<string>('');\n\n const getPagePath = (): string => {\n if (includeQueryParams) {\n return route.fullPath;\n }\n return route.path;\n };\n\n const getAdditionalData = (): Record<string, unknown> => {\n if (typeof additionalData === 'function') {\n return additionalData();\n }\n return additionalData ?? {};\n };\n\n const trackPageView = (): void => {\n const pagePath = getPagePath();\n\n // Skip if this path was already tracked\n if (pagePath === lastTrackedPath.value) {\n return;\n }\n\n lastTrackedPath.value = pagePath;\n\n client!.push({\n event: eventName,\n page_path: pagePath,\n page_location: typeof window !== 'undefined' ? window.location.href : undefined,\n page_title: typeof document !== 'undefined' ? document.title : undefined,\n ...getAdditionalData()\n });\n };\n\n // Track initial page view on mount if enabled\n onMounted(() => {\n if (trackInitialPageView) {\n trackPageView();\n }\n });\n\n // Watch for route changes\n watch(\n () => route.fullPath,\n () => {\n trackPageView();\n }\n );\n};\n\n// Note: Type augmentation for NuxtApp.$gtm should be done in the user's project\n// by adding a type declaration file with:\n//\n// declare module '#app' {\n// interface NuxtApp {\n// $gtm: import('@jwiedeman/gtm-kit-vue').GtmContext;\n// }\n// }\n","export type { NuxtGtmOptions, NuxtGtmContext } from './module';\nexport {\n createNuxtGtmPlugin,\n useNuxtGtm,\n useNuxtGtmPush,\n useNuxtGtmConsent,\n useNuxtGtmClient,\n useTrackPageViews\n} from './module';\n\n// Re-export Vue composables for convenience\nexport {\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n useGtmReady,\n GtmPlugin,\n GTM_INJECTION_KEY\n} from '@jwiedeman/gtm-kit-vue';\n\n// Re-export core types for convenience\nexport type {\n CreateGtmClientOptions,\n GtmClient,\n ConsentState,\n ConsentRegionOptions,\n DataLayerValue,\n ScriptLoadState\n} from '@jwiedeman/gtm-kit';\n\nexport { consentPresets, pushEvent, pushEcommerce } from '@jwiedeman/gtm-kit';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/module.ts","../src/index.ts"],"names":["ref","watch","onMounted","GtmPlugin","useGtm","useGtmPush","useGtmConsent","useGtmClient","createNuxtGtmPlugin","app","options","_a","client","useNuxtGtm","useNuxtGtmPush","useNuxtGtmConsent","useNuxtGtmClient","useTrackPageViews","route","eventName","includeQueryParams","additionalData","trackInitialPageView","e","lastTrackedPath","getPagePath","getAdditionalData","trackPageView","pagePath","useGtmReady","GTM_INJECTION_KEY","consentPresets","eeaDefault","allGranted","analyticsOnly","pushEvent","pushEcommerce"],"mappings":"AAAA,OAAS,OAAAA,EAAK,SAAAC,EAAO,aAAAC,MAA2B,MAEhD,OACE,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,MAGK,yBAmCA,IAAMC,EAAsB,CAACC,EAAUC,IAAuC,CA7CrF,IAAAC,EA+CEF,EAAI,IAAIN,EAAWO,CAAO,EAG1B,IAAME,GAAUD,EAAAF,EAAI,OAAO,iBAA2C,OAAtD,YAAAE,EAA4D,OAE5E,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,gDAAgD,EAGlE,OAAOA,CACT,EAeaC,EAAaT,EAMbU,EAAiBT,EAMjBU,EAAoBT,EAMpBU,EAAmBT,EAgEnBU,EAAqBP,GAAyC,CACzE,GAAM,CACJ,MAAAQ,EACA,UAAAC,EAAY,YACZ,mBAAAC,EAAqB,GACrB,eAAAC,EACA,qBAAAC,EAAuB,EACzB,EAAIZ,EAGAE,EAAgCF,EAAQ,OAE5C,GAAI,CAACE,EACH,GAAI,CACFA,EAASL,EAAa,CACxB,OAAQgB,EAAA,CAER,CAGF,GAAI,CAACX,EAAQ,CACX,QAAQ,KACN,sHAEF,EACA,MACF,CAEA,IAAMY,EAAkBxB,EAAY,EAAE,EAEhCyB,EAAc,IACdL,EACKF,EAAM,SAERA,EAAM,KAGTQ,EAAoB,IACpB,OAAOL,GAAmB,WACrBA,EAAe,EAEjBA,GAAA,KAAAA,EAAkB,CAAC,EAGtBM,EAAgB,IAAY,CAChC,IAAMC,EAAWH,EAAY,EAGzBG,IAAaJ,EAAgB,QAIjCA,EAAgB,MAAQI,EAExBhB,EAAQ,KAAK,CACX,MAAOO,EACP,UAAWS,EACX,cAAe,OAAO,QAAW,YAAc,OAAO,SAAS,KAAO,OACtE,WAAY,OAAO,UAAa,YAAc,SAAS,MAAQ,OAC/D,GAAGF,EAAkB,CACvB,CAAC,EACH,EAGAxB,EAAU,IAAM,CACVoB,GACFK,EAAc,CAElB,CAAC,EAGD1B,EACE,IAAMiB,EAAM,SACZ,IAAM,CACJS,EAAc,CAChB,CACF,CACF,EC5NA,OACE,UAAAvB,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,eAAAsB,EACA,aAAA1B,EACA,qBAAA2B,MACK,yBAYP,OAAS,kBAAAC,EAAgB,cAAAC,EAAY,cAAAC,EAAY,iBAAAC,EAAe,aAAAC,EAAW,iBAAAC,MAAqB","sourcesContent":["import { ref, watch, onMounted, type App } from 'vue';\nimport { type GtmClient } from '@jwiedeman/gtm-kit';\nimport {\n GtmPlugin,\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n type GtmPluginOptions,\n type GtmContext\n} from '@jwiedeman/gtm-kit-vue';\n\n/**\n * Options for the Nuxt GTM module.\n * Extends the Vue plugin options.\n *\n * For automatic page tracking, use the `useTrackPageViews` composable\n * in your app.vue or layout component.\n */\nexport type NuxtGtmOptions = GtmPluginOptions;\n\n/**\n * Extended context for Nuxt with additional helpers.\n */\nexport interface NuxtGtmContext extends GtmContext {\n /** Track a page view manually */\n trackPageView: (path?: string, additionalData?: Record<string, unknown>) => void;\n}\n\n/**\n * Creates a Nuxt plugin for GTM Kit.\n * Use this in your Nuxt plugins directory.\n *\n * @example\n * ```ts\n * // plugins/gtm.client.ts\n * import { createNuxtGtmPlugin } from '@jwiedeman/gtm-kit-nuxt';\n *\n * export default defineNuxtPlugin((nuxtApp) => {\n * createNuxtGtmPlugin(nuxtApp.vueApp, {\n * containers: 'GTM-XXXXXX'\n * });\n * });\n * ```\n */\nexport const createNuxtGtmPlugin = (app: App, options: NuxtGtmOptions): GtmClient => {\n // Install the Vue plugin\n app.use(GtmPlugin, options);\n\n // Get the client from the Vue plugin\n const client = (app.config.globalProperties as { $gtm?: GtmContext }).$gtm?.client;\n\n if (!client) {\n throw new Error('[gtm-kit/nuxt] Failed to initialize GTM client');\n }\n\n return client;\n};\n\n/**\n * Composable for accessing the full GTM context in Nuxt.\n * This is an alias for useGtm() from @jwiedeman/gtm-kit-vue.\n *\n * @example\n * ```vue\n * <script setup>\n * const { push, client } = useNuxtGtm();\n *\n * push({ event: 'custom_event' });\n * </script>\n * ```\n */\nexport const useNuxtGtm = useGtm;\n\n/**\n * Composable for pushing events in Nuxt.\n * This is an alias for useGtmPush() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmPush = useGtmPush;\n\n/**\n * Composable for consent management in Nuxt.\n * This is an alias for useGtmConsent() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmConsent = useGtmConsent;\n\n/**\n * Composable for accessing the raw GTM client in Nuxt.\n * This is an alias for useGtmClient() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmClient = useGtmClient;\n\n/**\n * Options for the useTrackPageViews composable.\n */\nexport interface TrackPageViewsOptions {\n /**\n * The GTM client instance to use.\n * If not provided, will use the client from the Vue plugin context.\n */\n client?: GtmClient;\n\n /**\n * Reactive route object to watch for changes.\n * Use useRoute() from Nuxt.\n */\n route: {\n fullPath: string;\n path: string;\n query?: Record<string, unknown>;\n };\n\n /**\n * Custom page view event name.\n * @default 'page_view'\n */\n eventName?: string;\n\n /**\n * Whether to include query parameters in page path.\n * @default true\n */\n includeQueryParams?: boolean;\n\n /**\n * Additional data to include with each page view event.\n */\n additionalData?: Record<string, unknown> | (() => Record<string, unknown>);\n\n /**\n * Whether to track the initial page view on mount.\n * @default true\n */\n trackInitialPageView?: boolean;\n}\n\n/**\n * Composable for automatic page view tracking with Nuxt Router.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTrackPageViews } from '@jwiedeman/gtm-kit-nuxt';\n *\n * const route = useRoute();\n *\n * useTrackPageViews({\n * route,\n * eventName: 'page_view',\n * additionalData: { site_section: 'main' }\n * });\n * </script>\n * ```\n */\nexport const useTrackPageViews = (options: TrackPageViewsOptions): void => {\n const {\n route,\n eventName = 'page_view',\n includeQueryParams = true,\n additionalData,\n trackInitialPageView = true\n } = options;\n\n // Try to get client from options or from context\n let client: GtmClient | undefined = options.client;\n\n if (!client) {\n try {\n client = useGtmClient();\n } catch {\n // Client not available from context, will throw later if needed\n }\n }\n\n if (!client) {\n console.warn(\n '[gtm-kit/nuxt] useTrackPageViews: No GTM client available. ' +\n 'Make sure GtmPlugin is installed or pass a client option.'\n );\n return;\n }\n\n const lastTrackedPath = ref<string>('');\n\n const getPagePath = (): string => {\n if (includeQueryParams) {\n return route.fullPath;\n }\n return route.path;\n };\n\n const getAdditionalData = (): Record<string, unknown> => {\n if (typeof additionalData === 'function') {\n return additionalData();\n }\n return additionalData ?? {};\n };\n\n const trackPageView = (): void => {\n const pagePath = getPagePath();\n\n // Skip if this path was already tracked\n if (pagePath === lastTrackedPath.value) {\n return;\n }\n\n lastTrackedPath.value = pagePath;\n\n client!.push({\n event: eventName,\n page_path: pagePath,\n page_location: typeof window !== 'undefined' ? window.location.href : undefined,\n page_title: typeof document !== 'undefined' ? document.title : undefined,\n ...getAdditionalData()\n });\n };\n\n // Track initial page view on mount if enabled\n onMounted(() => {\n if (trackInitialPageView) {\n trackPageView();\n }\n });\n\n // Watch for route changes\n watch(\n () => route.fullPath,\n () => {\n trackPageView();\n }\n );\n};\n\n// Note: Type augmentation for NuxtApp.$gtm should be done in the user's project\n// by adding a type declaration file with:\n//\n// declare module '#app' {\n// interface NuxtApp {\n// $gtm: import('@jwiedeman/gtm-kit-vue').GtmContext;\n// }\n// }\n","export type { NuxtGtmOptions, NuxtGtmContext } from './module';\nexport {\n createNuxtGtmPlugin,\n useNuxtGtm,\n useNuxtGtmPush,\n useNuxtGtmConsent,\n useNuxtGtmClient,\n useTrackPageViews\n} from './module';\n\n// Re-export Vue composables for convenience\nexport {\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n useGtmReady,\n GtmPlugin,\n GTM_INJECTION_KEY\n} from '@jwiedeman/gtm-kit-vue';\n\n// Re-export core types for convenience\nexport type {\n CreateGtmClientOptions,\n GtmClient,\n ConsentState,\n ConsentRegionOptions,\n DataLayerValue,\n ScriptLoadState\n} from '@jwiedeman/gtm-kit';\n\nexport { consentPresets, eeaDefault, allGranted, analyticsOnly, pushEvent, pushEcommerce } from '@jwiedeman/gtm-kit';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -3,7 +3,7 @@ import { GtmPluginOptions, GtmContext } from '@jwiedeman/gtm-kit-vue';
|
|
|
3
3
|
export { GTM_INJECTION_KEY, GtmPlugin, useGtm, useGtmClient, useGtmConsent, useGtmPush, useGtmReady } from '@jwiedeman/gtm-kit-vue';
|
|
4
4
|
import * as _jwiedeman_gtm_kit from '@jwiedeman/gtm-kit';
|
|
5
5
|
import { GtmClient } from '@jwiedeman/gtm-kit';
|
|
6
|
-
export { ConsentRegionOptions, ConsentState, CreateGtmClientOptions, DataLayerValue, GtmClient, ScriptLoadState, consentPresets, pushEcommerce, pushEvent } from '@jwiedeman/gtm-kit';
|
|
6
|
+
export { ConsentRegionOptions, ConsentState, CreateGtmClientOptions, DataLayerValue, GtmClient, ScriptLoadState, allGranted, analyticsOnly, consentPresets, eeaDefault, pushEcommerce, pushEvent } from '@jwiedeman/gtm-kit';
|
|
7
7
|
import { App } from 'vue';
|
|
8
8
|
|
|
9
9
|
/**
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { GtmPluginOptions, GtmContext } from '@jwiedeman/gtm-kit-vue';
|
|
|
3
3
|
export { GTM_INJECTION_KEY, GtmPlugin, useGtm, useGtmClient, useGtmConsent, useGtmPush, useGtmReady } from '@jwiedeman/gtm-kit-vue';
|
|
4
4
|
import * as _jwiedeman_gtm_kit from '@jwiedeman/gtm-kit';
|
|
5
5
|
import { GtmClient } from '@jwiedeman/gtm-kit';
|
|
6
|
-
export { ConsentRegionOptions, ConsentState, CreateGtmClientOptions, DataLayerValue, GtmClient, ScriptLoadState, consentPresets, pushEcommerce, pushEvent } from '@jwiedeman/gtm-kit';
|
|
6
|
+
export { ConsentRegionOptions, ConsentState, CreateGtmClientOptions, DataLayerValue, GtmClient, ScriptLoadState, allGranted, analyticsOnly, consentPresets, eeaDefault, pushEcommerce, pushEvent } from '@jwiedeman/gtm-kit';
|
|
7
7
|
import { App } from 'vue';
|
|
8
8
|
|
|
9
9
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ref, onMounted, watch } from 'vue';
|
|
2
2
|
import { GtmPlugin, useGtm, useGtmPush, useGtmConsent, useGtmClient } from '@jwiedeman/gtm-kit-vue';
|
|
3
3
|
export { GTM_INJECTION_KEY, GtmPlugin, useGtm, useGtmClient, useGtmConsent, useGtmPush, useGtmReady } from '@jwiedeman/gtm-kit-vue';
|
|
4
|
-
export { consentPresets, pushEcommerce, pushEvent } from '@jwiedeman/gtm-kit';
|
|
4
|
+
export { allGranted, analyticsOnly, consentPresets, eeaDefault, pushEcommerce, pushEvent } from '@jwiedeman/gtm-kit';
|
|
5
5
|
|
|
6
|
-
var C=(t,e)=>{var o;t.use(GtmPlugin,e);let i=(o=t.config.globalProperties.$gtm)==null?void 0:o.client;if(!i)throw new Error("[gtm-kit/nuxt] Failed to initialize GTM client");return i},h=useGtm,N=useGtmPush,k=useGtmConsent,y=useGtmClient,v=t=>{let{route:e,eventName:i="page_view",includeQueryParams:o=!0,additionalData:n,trackInitialPageView:l=!0}=t,r=t.client;if(!r)try{r=useGtmClient();}catch(u){}if(!r){console.warn("[gtm-kit/nuxt] useTrackPageViews: No GTM client available. Make sure GtmPlugin is installed or pass a client option.");return}let
|
|
6
|
+
var C=(t,e)=>{var o;t.use(GtmPlugin,e);let i=(o=t.config.globalProperties.$gtm)==null?void 0:o.client;if(!i)throw new Error("[gtm-kit/nuxt] Failed to initialize GTM client");return i},h=useGtm,N=useGtmPush,k=useGtmConsent,y=useGtmClient,v=t=>{let{route:e,eventName:i="page_view",includeQueryParams:o=!0,additionalData:n,trackInitialPageView:l=!0}=t,r=t.client;if(!r)try{r=useGtmClient();}catch(u){}if(!r){console.warn("[gtm-kit/nuxt] useTrackPageViews: No GTM client available. Make sure GtmPlugin is installed or pass a client option.");return}let a=ref(""),c=()=>o?e.fullPath:e.path,p=()=>typeof n=="function"?n():n!=null?n:{},s=()=>{let u=c();u!==a.value&&(a.value=u,r.push({event:i,page_path:u,page_location:typeof window!="undefined"?window.location.href:void 0,page_title:typeof document!="undefined"?document.title:void 0,...p()}));};onMounted(()=>{l&&s();}),watch(()=>e.fullPath,()=>{s();});};
|
|
7
7
|
|
|
8
8
|
export { C as createNuxtGtmPlugin, h as useNuxtGtm, y as useNuxtGtmClient, k as useNuxtGtmConsent, N as useNuxtGtmPush, v as useTrackPageViews };
|
|
9
9
|
//# sourceMappingURL=out.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/module.ts","../src/index.ts"],"names":["ref","watch","onMounted","GtmPlugin","useGtm","useGtmPush","useGtmConsent","useGtmClient","createNuxtGtmPlugin","app","options","_a","client","useNuxtGtm","useNuxtGtmPush","useNuxtGtmConsent","useNuxtGtmClient","useTrackPageViews","route","eventName","includeQueryParams","additionalData","trackInitialPageView","e","lastTrackedPath","getPagePath","getAdditionalData","trackPageView","pagePath","useGtmReady","GTM_INJECTION_KEY","consentPresets","pushEvent","pushEcommerce"],"mappings":"AAAA,OAAS,OAAAA,EAAK,SAAAC,EAAO,aAAAC,MAA2B,MAEhD,OACE,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,MAGK,yBAmCA,IAAMC,EAAsB,CAACC,EAAUC,IAAuC,CA7CrF,IAAAC,EA+CEF,EAAI,IAAIN,EAAWO,CAAO,EAG1B,IAAME,GAAUD,EAAAF,EAAI,OAAO,iBAA2C,OAAtD,YAAAE,EAA4D,OAE5E,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,gDAAgD,EAGlE,OAAOA,CACT,EAeaC,EAAaT,EAMbU,EAAiBT,EAMjBU,EAAoBT,EAMpBU,EAAmBT,EAgEnBU,EAAqBP,GAAyC,CACzE,GAAM,CACJ,MAAAQ,EACA,UAAAC,EAAY,YACZ,mBAAAC,EAAqB,GACrB,eAAAC,EACA,qBAAAC,EAAuB,EACzB,EAAIZ,EAGAE,EAAgCF,EAAQ,OAE5C,GAAI,CAACE,EACH,GAAI,CACFA,EAASL,EAAa,CACxB,OAAQgB,EAAA,CAER,CAGF,GAAI,CAACX,EAAQ,CACX,QAAQ,KACN,sHAEF,EACA,MACF,CAEA,IAAMY,EAAkBxB,EAAY,EAAE,EAEhCyB,EAAc,IACdL,EACKF,EAAM,SAERA,EAAM,KAGTQ,EAAoB,IACpB,OAAOL,GAAmB,WACrBA,EAAe,EAEjBA,GAAA,KAAAA,EAAkB,CAAC,EAGtBM,EAAgB,IAAY,CAChC,IAAMC,EAAWH,EAAY,EAGzBG,IAAaJ,EAAgB,QAIjCA,EAAgB,MAAQI,EAExBhB,EAAQ,KAAK,CACX,MAAOO,EACP,UAAWS,EACX,cAAe,OAAO,QAAW,YAAc,OAAO,SAAS,KAAO,OACtE,WAAY,OAAO,UAAa,YAAc,SAAS,MAAQ,OAC/D,GAAGF,EAAkB,CACvB,CAAC,EACH,EAGAxB,EAAU,IAAM,CACVoB,GACFK,EAAc,CAElB,CAAC,EAGD1B,EACE,IAAMiB,EAAM,SACZ,IAAM,CACJS,EAAc,CAChB,CACF,CACF,EC5NA,OACE,UAAAvB,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,eAAAsB,EACA,aAAA1B,EACA,qBAAA2B,MACK,yBAYP,OAAS,kBAAAC,EAAgB,aAAAC,EAAW,iBAAAC,MAAqB","sourcesContent":["import { ref, watch, onMounted, type App } from 'vue';\nimport { type GtmClient } from '@jwiedeman/gtm-kit';\nimport {\n GtmPlugin,\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n type GtmPluginOptions,\n type GtmContext\n} from '@jwiedeman/gtm-kit-vue';\n\n/**\n * Options for the Nuxt GTM module.\n * Extends the Vue plugin options.\n *\n * For automatic page tracking, use the `useTrackPageViews` composable\n * in your app.vue or layout component.\n */\nexport type NuxtGtmOptions = GtmPluginOptions;\n\n/**\n * Extended context for Nuxt with additional helpers.\n */\nexport interface NuxtGtmContext extends GtmContext {\n /** Track a page view manually */\n trackPageView: (path?: string, additionalData?: Record<string, unknown>) => void;\n}\n\n/**\n * Creates a Nuxt plugin for GTM Kit.\n * Use this in your Nuxt plugins directory.\n *\n * @example\n * ```ts\n * // plugins/gtm.client.ts\n * import { createNuxtGtmPlugin } from '@jwiedeman/gtm-kit-nuxt';\n *\n * export default defineNuxtPlugin((nuxtApp) => {\n * createNuxtGtmPlugin(nuxtApp.vueApp, {\n * containers: 'GTM-XXXXXX'\n * });\n * });\n * ```\n */\nexport const createNuxtGtmPlugin = (app: App, options: NuxtGtmOptions): GtmClient => {\n // Install the Vue plugin\n app.use(GtmPlugin, options);\n\n // Get the client from the Vue plugin\n const client = (app.config.globalProperties as { $gtm?: GtmContext }).$gtm?.client;\n\n if (!client) {\n throw new Error('[gtm-kit/nuxt] Failed to initialize GTM client');\n }\n\n return client;\n};\n\n/**\n * Composable for accessing the full GTM context in Nuxt.\n * This is an alias for useGtm() from @jwiedeman/gtm-kit-vue.\n *\n * @example\n * ```vue\n * <script setup>\n * const { push, client } = useNuxtGtm();\n *\n * push({ event: 'custom_event' });\n * </script>\n * ```\n */\nexport const useNuxtGtm = useGtm;\n\n/**\n * Composable for pushing events in Nuxt.\n * This is an alias for useGtmPush() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmPush = useGtmPush;\n\n/**\n * Composable for consent management in Nuxt.\n * This is an alias for useGtmConsent() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmConsent = useGtmConsent;\n\n/**\n * Composable for accessing the raw GTM client in Nuxt.\n * This is an alias for useGtmClient() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmClient = useGtmClient;\n\n/**\n * Options for the useTrackPageViews composable.\n */\nexport interface TrackPageViewsOptions {\n /**\n * The GTM client instance to use.\n * If not provided, will use the client from the Vue plugin context.\n */\n client?: GtmClient;\n\n /**\n * Reactive route object to watch for changes.\n * Use useRoute() from Nuxt.\n */\n route: {\n fullPath: string;\n path: string;\n query?: Record<string, unknown>;\n };\n\n /**\n * Custom page view event name.\n * @default 'page_view'\n */\n eventName?: string;\n\n /**\n * Whether to include query parameters in page path.\n * @default true\n */\n includeQueryParams?: boolean;\n\n /**\n * Additional data to include with each page view event.\n */\n additionalData?: Record<string, unknown> | (() => Record<string, unknown>);\n\n /**\n * Whether to track the initial page view on mount.\n * @default true\n */\n trackInitialPageView?: boolean;\n}\n\n/**\n * Composable for automatic page view tracking with Nuxt Router.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTrackPageViews } from '@jwiedeman/gtm-kit-nuxt';\n *\n * const route = useRoute();\n *\n * useTrackPageViews({\n * route,\n * eventName: 'page_view',\n * additionalData: { site_section: 'main' }\n * });\n * </script>\n * ```\n */\nexport const useTrackPageViews = (options: TrackPageViewsOptions): void => {\n const {\n route,\n eventName = 'page_view',\n includeQueryParams = true,\n additionalData,\n trackInitialPageView = true\n } = options;\n\n // Try to get client from options or from context\n let client: GtmClient | undefined = options.client;\n\n if (!client) {\n try {\n client = useGtmClient();\n } catch {\n // Client not available from context, will throw later if needed\n }\n }\n\n if (!client) {\n console.warn(\n '[gtm-kit/nuxt] useTrackPageViews: No GTM client available. ' +\n 'Make sure GtmPlugin is installed or pass a client option.'\n );\n return;\n }\n\n const lastTrackedPath = ref<string>('');\n\n const getPagePath = (): string => {\n if (includeQueryParams) {\n return route.fullPath;\n }\n return route.path;\n };\n\n const getAdditionalData = (): Record<string, unknown> => {\n if (typeof additionalData === 'function') {\n return additionalData();\n }\n return additionalData ?? {};\n };\n\n const trackPageView = (): void => {\n const pagePath = getPagePath();\n\n // Skip if this path was already tracked\n if (pagePath === lastTrackedPath.value) {\n return;\n }\n\n lastTrackedPath.value = pagePath;\n\n client!.push({\n event: eventName,\n page_path: pagePath,\n page_location: typeof window !== 'undefined' ? window.location.href : undefined,\n page_title: typeof document !== 'undefined' ? document.title : undefined,\n ...getAdditionalData()\n });\n };\n\n // Track initial page view on mount if enabled\n onMounted(() => {\n if (trackInitialPageView) {\n trackPageView();\n }\n });\n\n // Watch for route changes\n watch(\n () => route.fullPath,\n () => {\n trackPageView();\n }\n );\n};\n\n// Note: Type augmentation for NuxtApp.$gtm should be done in the user's project\n// by adding a type declaration file with:\n//\n// declare module '#app' {\n// interface NuxtApp {\n// $gtm: import('@jwiedeman/gtm-kit-vue').GtmContext;\n// }\n// }\n","export type { NuxtGtmOptions, NuxtGtmContext } from './module';\nexport {\n createNuxtGtmPlugin,\n useNuxtGtm,\n useNuxtGtmPush,\n useNuxtGtmConsent,\n useNuxtGtmClient,\n useTrackPageViews\n} from './module';\n\n// Re-export Vue composables for convenience\nexport {\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n useGtmReady,\n GtmPlugin,\n GTM_INJECTION_KEY\n} from '@jwiedeman/gtm-kit-vue';\n\n// Re-export core types for convenience\nexport type {\n CreateGtmClientOptions,\n GtmClient,\n ConsentState,\n ConsentRegionOptions,\n DataLayerValue,\n ScriptLoadState\n} from '@jwiedeman/gtm-kit';\n\nexport { consentPresets, pushEvent, pushEcommerce } from '@jwiedeman/gtm-kit';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/module.ts","../src/index.ts"],"names":["ref","watch","onMounted","GtmPlugin","useGtm","useGtmPush","useGtmConsent","useGtmClient","createNuxtGtmPlugin","app","options","_a","client","useNuxtGtm","useNuxtGtmPush","useNuxtGtmConsent","useNuxtGtmClient","useTrackPageViews","route","eventName","includeQueryParams","additionalData","trackInitialPageView","e","lastTrackedPath","getPagePath","getAdditionalData","trackPageView","pagePath","useGtmReady","GTM_INJECTION_KEY","consentPresets","eeaDefault","allGranted","analyticsOnly","pushEvent","pushEcommerce"],"mappings":"AAAA,OAAS,OAAAA,EAAK,SAAAC,EAAO,aAAAC,MAA2B,MAEhD,OACE,aAAAC,EACA,UAAAC,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,MAGK,yBAmCA,IAAMC,EAAsB,CAACC,EAAUC,IAAuC,CA7CrF,IAAAC,EA+CEF,EAAI,IAAIN,EAAWO,CAAO,EAG1B,IAAME,GAAUD,EAAAF,EAAI,OAAO,iBAA2C,OAAtD,YAAAE,EAA4D,OAE5E,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,gDAAgD,EAGlE,OAAOA,CACT,EAeaC,EAAaT,EAMbU,EAAiBT,EAMjBU,EAAoBT,EAMpBU,EAAmBT,EAgEnBU,EAAqBP,GAAyC,CACzE,GAAM,CACJ,MAAAQ,EACA,UAAAC,EAAY,YACZ,mBAAAC,EAAqB,GACrB,eAAAC,EACA,qBAAAC,EAAuB,EACzB,EAAIZ,EAGAE,EAAgCF,EAAQ,OAE5C,GAAI,CAACE,EACH,GAAI,CACFA,EAASL,EAAa,CACxB,OAAQgB,EAAA,CAER,CAGF,GAAI,CAACX,EAAQ,CACX,QAAQ,KACN,sHAEF,EACA,MACF,CAEA,IAAMY,EAAkBxB,EAAY,EAAE,EAEhCyB,EAAc,IACdL,EACKF,EAAM,SAERA,EAAM,KAGTQ,EAAoB,IACpB,OAAOL,GAAmB,WACrBA,EAAe,EAEjBA,GAAA,KAAAA,EAAkB,CAAC,EAGtBM,EAAgB,IAAY,CAChC,IAAMC,EAAWH,EAAY,EAGzBG,IAAaJ,EAAgB,QAIjCA,EAAgB,MAAQI,EAExBhB,EAAQ,KAAK,CACX,MAAOO,EACP,UAAWS,EACX,cAAe,OAAO,QAAW,YAAc,OAAO,SAAS,KAAO,OACtE,WAAY,OAAO,UAAa,YAAc,SAAS,MAAQ,OAC/D,GAAGF,EAAkB,CACvB,CAAC,EACH,EAGAxB,EAAU,IAAM,CACVoB,GACFK,EAAc,CAElB,CAAC,EAGD1B,EACE,IAAMiB,EAAM,SACZ,IAAM,CACJS,EAAc,CAChB,CACF,CACF,EC5NA,OACE,UAAAvB,EACA,cAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,eAAAsB,EACA,aAAA1B,EACA,qBAAA2B,MACK,yBAYP,OAAS,kBAAAC,EAAgB,cAAAC,EAAY,cAAAC,EAAY,iBAAAC,EAAe,aAAAC,EAAW,iBAAAC,MAAqB","sourcesContent":["import { ref, watch, onMounted, type App } from 'vue';\nimport { type GtmClient } from '@jwiedeman/gtm-kit';\nimport {\n GtmPlugin,\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n type GtmPluginOptions,\n type GtmContext\n} from '@jwiedeman/gtm-kit-vue';\n\n/**\n * Options for the Nuxt GTM module.\n * Extends the Vue plugin options.\n *\n * For automatic page tracking, use the `useTrackPageViews` composable\n * in your app.vue or layout component.\n */\nexport type NuxtGtmOptions = GtmPluginOptions;\n\n/**\n * Extended context for Nuxt with additional helpers.\n */\nexport interface NuxtGtmContext extends GtmContext {\n /** Track a page view manually */\n trackPageView: (path?: string, additionalData?: Record<string, unknown>) => void;\n}\n\n/**\n * Creates a Nuxt plugin for GTM Kit.\n * Use this in your Nuxt plugins directory.\n *\n * @example\n * ```ts\n * // plugins/gtm.client.ts\n * import { createNuxtGtmPlugin } from '@jwiedeman/gtm-kit-nuxt';\n *\n * export default defineNuxtPlugin((nuxtApp) => {\n * createNuxtGtmPlugin(nuxtApp.vueApp, {\n * containers: 'GTM-XXXXXX'\n * });\n * });\n * ```\n */\nexport const createNuxtGtmPlugin = (app: App, options: NuxtGtmOptions): GtmClient => {\n // Install the Vue plugin\n app.use(GtmPlugin, options);\n\n // Get the client from the Vue plugin\n const client = (app.config.globalProperties as { $gtm?: GtmContext }).$gtm?.client;\n\n if (!client) {\n throw new Error('[gtm-kit/nuxt] Failed to initialize GTM client');\n }\n\n return client;\n};\n\n/**\n * Composable for accessing the full GTM context in Nuxt.\n * This is an alias for useGtm() from @jwiedeman/gtm-kit-vue.\n *\n * @example\n * ```vue\n * <script setup>\n * const { push, client } = useNuxtGtm();\n *\n * push({ event: 'custom_event' });\n * </script>\n * ```\n */\nexport const useNuxtGtm = useGtm;\n\n/**\n * Composable for pushing events in Nuxt.\n * This is an alias for useGtmPush() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmPush = useGtmPush;\n\n/**\n * Composable for consent management in Nuxt.\n * This is an alias for useGtmConsent() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmConsent = useGtmConsent;\n\n/**\n * Composable for accessing the raw GTM client in Nuxt.\n * This is an alias for useGtmClient() from @jwiedeman/gtm-kit-vue.\n */\nexport const useNuxtGtmClient = useGtmClient;\n\n/**\n * Options for the useTrackPageViews composable.\n */\nexport interface TrackPageViewsOptions {\n /**\n * The GTM client instance to use.\n * If not provided, will use the client from the Vue plugin context.\n */\n client?: GtmClient;\n\n /**\n * Reactive route object to watch for changes.\n * Use useRoute() from Nuxt.\n */\n route: {\n fullPath: string;\n path: string;\n query?: Record<string, unknown>;\n };\n\n /**\n * Custom page view event name.\n * @default 'page_view'\n */\n eventName?: string;\n\n /**\n * Whether to include query parameters in page path.\n * @default true\n */\n includeQueryParams?: boolean;\n\n /**\n * Additional data to include with each page view event.\n */\n additionalData?: Record<string, unknown> | (() => Record<string, unknown>);\n\n /**\n * Whether to track the initial page view on mount.\n * @default true\n */\n trackInitialPageView?: boolean;\n}\n\n/**\n * Composable for automatic page view tracking with Nuxt Router.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTrackPageViews } from '@jwiedeman/gtm-kit-nuxt';\n *\n * const route = useRoute();\n *\n * useTrackPageViews({\n * route,\n * eventName: 'page_view',\n * additionalData: { site_section: 'main' }\n * });\n * </script>\n * ```\n */\nexport const useTrackPageViews = (options: TrackPageViewsOptions): void => {\n const {\n route,\n eventName = 'page_view',\n includeQueryParams = true,\n additionalData,\n trackInitialPageView = true\n } = options;\n\n // Try to get client from options or from context\n let client: GtmClient | undefined = options.client;\n\n if (!client) {\n try {\n client = useGtmClient();\n } catch {\n // Client not available from context, will throw later if needed\n }\n }\n\n if (!client) {\n console.warn(\n '[gtm-kit/nuxt] useTrackPageViews: No GTM client available. ' +\n 'Make sure GtmPlugin is installed or pass a client option.'\n );\n return;\n }\n\n const lastTrackedPath = ref<string>('');\n\n const getPagePath = (): string => {\n if (includeQueryParams) {\n return route.fullPath;\n }\n return route.path;\n };\n\n const getAdditionalData = (): Record<string, unknown> => {\n if (typeof additionalData === 'function') {\n return additionalData();\n }\n return additionalData ?? {};\n };\n\n const trackPageView = (): void => {\n const pagePath = getPagePath();\n\n // Skip if this path was already tracked\n if (pagePath === lastTrackedPath.value) {\n return;\n }\n\n lastTrackedPath.value = pagePath;\n\n client!.push({\n event: eventName,\n page_path: pagePath,\n page_location: typeof window !== 'undefined' ? window.location.href : undefined,\n page_title: typeof document !== 'undefined' ? document.title : undefined,\n ...getAdditionalData()\n });\n };\n\n // Track initial page view on mount if enabled\n onMounted(() => {\n if (trackInitialPageView) {\n trackPageView();\n }\n });\n\n // Watch for route changes\n watch(\n () => route.fullPath,\n () => {\n trackPageView();\n }\n );\n};\n\n// Note: Type augmentation for NuxtApp.$gtm should be done in the user's project\n// by adding a type declaration file with:\n//\n// declare module '#app' {\n// interface NuxtApp {\n// $gtm: import('@jwiedeman/gtm-kit-vue').GtmContext;\n// }\n// }\n","export type { NuxtGtmOptions, NuxtGtmContext } from './module';\nexport {\n createNuxtGtmPlugin,\n useNuxtGtm,\n useNuxtGtmPush,\n useNuxtGtmConsent,\n useNuxtGtmClient,\n useTrackPageViews\n} from './module';\n\n// Re-export Vue composables for convenience\nexport {\n useGtm,\n useGtmPush,\n useGtmConsent,\n useGtmClient,\n useGtmReady,\n GtmPlugin,\n GTM_INJECTION_KEY\n} from '@jwiedeman/gtm-kit-vue';\n\n// Re-export core types for convenience\nexport type {\n CreateGtmClientOptions,\n GtmClient,\n ConsentState,\n ConsentRegionOptions,\n DataLayerValue,\n ScriptLoadState\n} from '@jwiedeman/gtm-kit';\n\nexport { consentPresets, eeaDefault, allGranted, analyticsOnly, pushEvent, pushEcommerce } from '@jwiedeman/gtm-kit';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jwiedeman/gtm-kit-nuxt",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "Nuxt 3 module for GTM Kit - Google Tag Manager integration with auto page tracking.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"typecheck": "tsc --noEmit"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@jwiedeman/gtm-kit": "^1.1.
|
|
45
|
-
"@jwiedeman/gtm-kit-vue": "^1.1.
|
|
44
|
+
"@jwiedeman/gtm-kit": "^1.1.3",
|
|
45
|
+
"@jwiedeman/gtm-kit-vue": "^1.1.3"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
48
|
"nuxt": "^3.0.0",
|