@bagelink/blox 1.15.677 → 1.15.678
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/dist/analytics/gtm.d.ts +42 -0
- package/dist/analytics/gtm.d.ts.map +1 -0
- package/dist/createBloxApp.d.ts +17 -0
- package/dist/createBloxApp.d.ts.map +1 -1
- package/dist/index.cjs +52 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +52 -0
- package/package.json +1 -1
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Tag Manager injection for Blox sites.
|
|
3
|
+
*
|
|
4
|
+
* GTM is a container: a single `<script>` that then loads every marketing tag
|
|
5
|
+
* configured in the UI (HubSpot, Facebook Pixel, Hotjar, Clarity, Taboola,
|
|
6
|
+
* Cookiebot, …). On a typical marketing site that chain is 1.5–2.5 MB of
|
|
7
|
+
* third-party JavaScript and seconds of main-thread work — all of it blocking
|
|
8
|
+
* the first interaction on mobile.
|
|
9
|
+
*
|
|
10
|
+
* Most of it is pure instrumentation that no visitor needs before they
|
|
11
|
+
* actually do something, so the default strategy defers the container until
|
|
12
|
+
* the first real interaction. Events queued in `window.dataLayer` before that
|
|
13
|
+
* point are replayed by GTM when it starts, so no analytics is lost for
|
|
14
|
+
* visitors who do interact.
|
|
15
|
+
*
|
|
16
|
+
* SSR-safe: all functions no-op without a `document`.
|
|
17
|
+
*/
|
|
18
|
+
export type GtmStrategy = 'immediate' | 'interaction';
|
|
19
|
+
export interface GtmOptions {
|
|
20
|
+
/** Container id, e.g. `GTM-5SKV4D7`. */
|
|
21
|
+
id: string;
|
|
22
|
+
/**
|
|
23
|
+
* When to inject the container.
|
|
24
|
+
*
|
|
25
|
+
* - `interaction` (default) — first pointer/key/scroll input. Keeps the tag
|
|
26
|
+
* chain entirely off the critical path.
|
|
27
|
+
* - `immediate` — inject at boot (classic behaviour).
|
|
28
|
+
*/
|
|
29
|
+
strategy?: GtmStrategy;
|
|
30
|
+
}
|
|
31
|
+
/** True when a GTM container script is already on the page. */
|
|
32
|
+
export declare function isGtmInstalled(): boolean;
|
|
33
|
+
/** Inject the container now. Idempotent. */
|
|
34
|
+
export declare function injectGtm(id: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Install Google Tag Manager according to `strategy`.
|
|
37
|
+
*
|
|
38
|
+
* Safe to call during SSR and to call more than once. Returns a cleanup
|
|
39
|
+
* function that removes any pending interaction listeners.
|
|
40
|
+
*/
|
|
41
|
+
export declare function installGtm(config: string | GtmOptions | null | undefined, strategyOverride?: GtmStrategy): () => void;
|
|
42
|
+
//# sourceMappingURL=gtm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gtm.d.ts","sourceRoot":"","sources":["../../src/analytics/gtm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,aAAa,CAAA;AAErD,MAAM,WAAW,UAAU;IAC1B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAA;IACV;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAA;CACtB;AAOD,+DAA+D;AAC/D,wBAAgB,cAAc,IAAI,OAAO,CAGxC;AAED,4CAA4C;AAC5C,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAc1C;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACzB,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,EAC9C,gBAAgB,CAAC,EAAE,WAAW,GAC5B,MAAM,IAAI,CAiCZ"}
|
package/dist/createBloxApp.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { App, Component, Plugin } from 'vue';
|
|
|
2
2
|
import { Router } from 'vue-router';
|
|
3
3
|
import { BloxOptions, BloxInstance } from './core';
|
|
4
4
|
import { BlockModule } from './defineBlock';
|
|
5
|
+
import { GtmOptions } from './analytics/gtm';
|
|
5
6
|
export interface CreateBloxAppOptions {
|
|
6
7
|
/** Root Vue component (App.vue). */
|
|
7
8
|
rootComponent: Component;
|
|
@@ -64,6 +65,22 @@ export interface CreateBloxAppOptions {
|
|
|
64
65
|
* plausible: 'auctentic2.netlify.app'
|
|
65
66
|
*/
|
|
66
67
|
plausible?: string | PlausibleOptions;
|
|
68
|
+
/**
|
|
69
|
+
* Google Tag Manager. When set, the container is injected on the client.
|
|
70
|
+
*
|
|
71
|
+
* - `string` shorthand (`'GTM-XXXXXX'`) → deferred until first interaction.
|
|
72
|
+
* - object → `{ id, strategy }` to opt into `'immediate'` (load at boot).
|
|
73
|
+
*
|
|
74
|
+
* GTM pulls in every marketing tag configured in the container, so the
|
|
75
|
+
* default `interaction` strategy keeps that whole chain off the critical
|
|
76
|
+
* path. Events already pushed to `window.dataLayer` are replayed when the
|
|
77
|
+
* container starts.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* gtm: 'GTM-5SKV4D7'
|
|
81
|
+
* gtm: { id: 'GTM-5SKV4D7', strategy: 'immediate' }
|
|
82
|
+
*/
|
|
83
|
+
gtm?: string | GtmOptions;
|
|
67
84
|
/**
|
|
68
85
|
* CMS navigation mode. @default 'document'
|
|
69
86
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createBloxApp.d.ts","sourceRoot":"","sources":["../src/createBloxApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"createBloxApp.d.ts","sourceRoot":"","sources":["../src/createBloxApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAYhD,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE7D,MAAM,WAAW,oBAAoB;IACpC,oCAAoC;IACpC,aAAa,EAAE,SAAS,CAAA;IACxB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IACpD,4EAA4E;IAC5E,WAAW,EAAE,MAAM,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACxB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAA;IAClD;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;IAChD;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC5C;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAA;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAA;IACrC;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAA;IACzB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,KAAK,CAAA;IAC/B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAA;IACpC,iFAAiF;IACjF,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAChC,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB;AAID;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAUtE;AAWD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAoCvE;AAED,MAAM,WAAW,aAAa;IAC7B,GAAG,EAAE,GAAG,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,YAAY,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA6K1E"}
|
package/dist/index.cjs
CHANGED
|
@@ -231,6 +231,53 @@ function safeRoute() {
|
|
|
231
231
|
return null;
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
|
+
const INTERACTION_EVENTS = ["pointerdown", "keydown", "touchstart", "wheel", "scroll"];
|
|
235
|
+
const GTM_ID_RE = /^GTM-[A-Z0-9]+$/;
|
|
236
|
+
function isGtmInstalled() {
|
|
237
|
+
if (typeof document === "undefined") return false;
|
|
238
|
+
return Boolean(document.querySelector('script[src*="googletagmanager.com/gtm.js"]'));
|
|
239
|
+
}
|
|
240
|
+
function injectGtm(id) {
|
|
241
|
+
if (typeof document === "undefined") return;
|
|
242
|
+
if (!GTM_ID_RE.test(id)) return;
|
|
243
|
+
if (isGtmInstalled()) return;
|
|
244
|
+
const target = window;
|
|
245
|
+
(target.dataLayer || (target.dataLayer = [])).push({ "gtm.start": Date.now(), event: "gtm.js" });
|
|
246
|
+
const script = document.createElement("script");
|
|
247
|
+
script.async = true;
|
|
248
|
+
script.src = `https://www.googletagmanager.com/gtm.js?id=${encodeURIComponent(id)}`;
|
|
249
|
+
document.head.appendChild(script);
|
|
250
|
+
}
|
|
251
|
+
function installGtm(config, strategyOverride) {
|
|
252
|
+
if (typeof document === "undefined" || !config) return () => {
|
|
253
|
+
};
|
|
254
|
+
const options = typeof config === "string" ? { id: config } : config;
|
|
255
|
+
const { id } = options;
|
|
256
|
+
if (!GTM_ID_RE.test(id) || isGtmInstalled()) return () => {
|
|
257
|
+
};
|
|
258
|
+
const strategy = options.strategy ?? strategyOverride ?? "interaction";
|
|
259
|
+
if (strategy === "immediate") {
|
|
260
|
+
injectGtm(id);
|
|
261
|
+
return () => {
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
let done = false;
|
|
265
|
+
const cleanup = () => {
|
|
266
|
+
done = true;
|
|
267
|
+
for (const event of INTERACTION_EVENTS) {
|
|
268
|
+
window.removeEventListener(event, fire, { capture: true });
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
const fire = () => {
|
|
272
|
+
if (done) return;
|
|
273
|
+
cleanup();
|
|
274
|
+
injectGtm(id);
|
|
275
|
+
};
|
|
276
|
+
for (const event of INTERACTION_EVENTS) {
|
|
277
|
+
window.addEventListener(event, fire, { capture: true, passive: true, once: true });
|
|
278
|
+
}
|
|
279
|
+
return cleanup;
|
|
280
|
+
}
|
|
234
281
|
const DEFAULT_PLAUSIBLE_HOST = "https://analytics.bagel.to";
|
|
235
282
|
function matchesRealRoute(router, slug) {
|
|
236
283
|
var _a;
|
|
@@ -291,11 +338,13 @@ function createBloxApp(options) {
|
|
|
291
338
|
globalComponents = {},
|
|
292
339
|
setup: userSetup,
|
|
293
340
|
plausible,
|
|
341
|
+
gtm,
|
|
294
342
|
navigation = "document",
|
|
295
343
|
adminEdit,
|
|
296
344
|
chunkLoadRecovery = true
|
|
297
345
|
} = options;
|
|
298
346
|
if (plausible) injectPlausible(plausible);
|
|
347
|
+
if (gtm) installGtm(gtm);
|
|
299
348
|
if (options.createApi) {
|
|
300
349
|
options.createApi({ baseURL: apiBaseURL });
|
|
301
350
|
}
|
|
@@ -504,8 +553,11 @@ exports.buildBloxManifest = buildBloxManifest;
|
|
|
504
553
|
exports.createBloxApp = createBloxApp;
|
|
505
554
|
exports.defineBlock = defineBlock;
|
|
506
555
|
exports.defineBloxSite = defineBloxSite;
|
|
556
|
+
exports.injectGtm = injectGtm;
|
|
507
557
|
exports.injectPlausible = injectPlausible;
|
|
508
558
|
exports.installDocumentNavigation = installDocumentNavigation;
|
|
559
|
+
exports.installGtm = installGtm;
|
|
560
|
+
exports.isGtmInstalled = isGtmInstalled;
|
|
509
561
|
exports.serializeRegistry = serializeRegistry;
|
|
510
562
|
exports.useBloxRuntime = useBloxRuntime;
|
|
511
563
|
exports.useContentSeo = useContentSeo;
|
package/dist/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export { BloxInstance, createBlox } from './core';
|
|
|
25
25
|
export type { BloxComponent, BloxOptions } from './core';
|
|
26
26
|
export { createBloxApp, injectPlausible } from './createBloxApp';
|
|
27
27
|
export type { BloxAppResult, CreateBloxAppOptions, PlausibleOptions } from './createBloxApp';
|
|
28
|
+
export { injectGtm, installGtm, isGtmInstalled } from './analytics/gtm';
|
|
29
|
+
export type { GtmOptions, GtmStrategy } from './analytics/gtm';
|
|
28
30
|
export { defineBloxSite } from './siteConfig';
|
|
29
31
|
export type { BloxSiteConfig } from './siteConfig';
|
|
30
32
|
export { defineBlock } from './defineBlock';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACzL,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAKlF,YAAY,EACX,cAAc,EACd,KAAK,EAEL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,cAAc,EACd,WAAW,GACX,MAAM,aAAa,CAAA;AAIpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACtD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAI9E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAK3E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACjH,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAK7D,OAAO,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,GACd,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAK5C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAKxD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAChE,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAKlD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAEnG,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAKjD,OAAO,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,EACX,WAAW,EACX,iBAAiB,GACjB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAEhG,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAK1E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACjE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAKlE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAI5E,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC/H,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAClG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -231,6 +231,53 @@ function safeRoute() {
|
|
|
231
231
|
return null;
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
|
+
const INTERACTION_EVENTS = ["pointerdown", "keydown", "touchstart", "wheel", "scroll"];
|
|
235
|
+
const GTM_ID_RE = /^GTM-[A-Z0-9]+$/;
|
|
236
|
+
function isGtmInstalled() {
|
|
237
|
+
if (typeof document === "undefined") return false;
|
|
238
|
+
return Boolean(document.querySelector('script[src*="googletagmanager.com/gtm.js"]'));
|
|
239
|
+
}
|
|
240
|
+
function injectGtm(id) {
|
|
241
|
+
if (typeof document === "undefined") return;
|
|
242
|
+
if (!GTM_ID_RE.test(id)) return;
|
|
243
|
+
if (isGtmInstalled()) return;
|
|
244
|
+
const target = window;
|
|
245
|
+
(target.dataLayer || (target.dataLayer = [])).push({ "gtm.start": Date.now(), event: "gtm.js" });
|
|
246
|
+
const script = document.createElement("script");
|
|
247
|
+
script.async = true;
|
|
248
|
+
script.src = `https://www.googletagmanager.com/gtm.js?id=${encodeURIComponent(id)}`;
|
|
249
|
+
document.head.appendChild(script);
|
|
250
|
+
}
|
|
251
|
+
function installGtm(config, strategyOverride) {
|
|
252
|
+
if (typeof document === "undefined" || !config) return () => {
|
|
253
|
+
};
|
|
254
|
+
const options = typeof config === "string" ? { id: config } : config;
|
|
255
|
+
const { id } = options;
|
|
256
|
+
if (!GTM_ID_RE.test(id) || isGtmInstalled()) return () => {
|
|
257
|
+
};
|
|
258
|
+
const strategy = options.strategy ?? strategyOverride ?? "interaction";
|
|
259
|
+
if (strategy === "immediate") {
|
|
260
|
+
injectGtm(id);
|
|
261
|
+
return () => {
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
let done = false;
|
|
265
|
+
const cleanup = () => {
|
|
266
|
+
done = true;
|
|
267
|
+
for (const event of INTERACTION_EVENTS) {
|
|
268
|
+
window.removeEventListener(event, fire, { capture: true });
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
const fire = () => {
|
|
272
|
+
if (done) return;
|
|
273
|
+
cleanup();
|
|
274
|
+
injectGtm(id);
|
|
275
|
+
};
|
|
276
|
+
for (const event of INTERACTION_EVENTS) {
|
|
277
|
+
window.addEventListener(event, fire, { capture: true, passive: true, once: true });
|
|
278
|
+
}
|
|
279
|
+
return cleanup;
|
|
280
|
+
}
|
|
234
281
|
const DEFAULT_PLAUSIBLE_HOST = "https://analytics.bagel.to";
|
|
235
282
|
function matchesRealRoute(router, slug) {
|
|
236
283
|
var _a;
|
|
@@ -291,11 +338,13 @@ function createBloxApp(options) {
|
|
|
291
338
|
globalComponents = {},
|
|
292
339
|
setup: userSetup,
|
|
293
340
|
plausible,
|
|
341
|
+
gtm,
|
|
294
342
|
navigation = "document",
|
|
295
343
|
adminEdit,
|
|
296
344
|
chunkLoadRecovery = true
|
|
297
345
|
} = options;
|
|
298
346
|
if (plausible) injectPlausible(plausible);
|
|
347
|
+
if (gtm) installGtm(gtm);
|
|
299
348
|
if (options.createApi) {
|
|
300
349
|
options.createApi({ baseURL: apiBaseURL });
|
|
301
350
|
}
|
|
@@ -481,11 +530,14 @@ export {
|
|
|
481
530
|
getItemBySlug,
|
|
482
531
|
getWebsiteId,
|
|
483
532
|
getWebsiteIdSync,
|
|
533
|
+
injectGtm,
|
|
484
534
|
injectPlausible,
|
|
485
535
|
K as installContentFallback,
|
|
486
536
|
installDocumentNavigation,
|
|
537
|
+
installGtm,
|
|
487
538
|
installSmartLinks,
|
|
488
539
|
L as isAbsoluteExternal,
|
|
540
|
+
isGtmInstalled,
|
|
489
541
|
M as isSoloContentPage,
|
|
490
542
|
N as isSpecialScheme,
|
|
491
543
|
listItems,
|
package/package.json
CHANGED