react-fathom 0.1.0

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.
Files changed (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +199 -0
  3. package/dist/cjs/index.cjs +410 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/cjs/next/index.cjs +910 -0
  6. package/dist/cjs/next/index.cjs.map +1 -0
  7. package/dist/es/index.js +381 -0
  8. package/dist/es/index.js.map +1 -0
  9. package/dist/es/next/index.js +885 -0
  10. package/dist/es/next/index.js.map +1 -0
  11. package/dist/react-fathom.js +413 -0
  12. package/dist/react-fathom.js.map +1 -0
  13. package/dist/react-fathom.min.js +3 -0
  14. package/dist/react-fathom.min.js.map +1 -0
  15. package/package.json +127 -0
  16. package/src/FathomContext.tsx +5 -0
  17. package/src/FathomProvider.test.tsx +532 -0
  18. package/src/FathomProvider.tsx +122 -0
  19. package/src/components/TrackClick.test.tsx +191 -0
  20. package/src/components/TrackClick.tsx +62 -0
  21. package/src/components/TrackPageview.test.tsx +111 -0
  22. package/src/components/TrackPageview.tsx +36 -0
  23. package/src/components/TrackVisible.test.tsx +311 -0
  24. package/src/components/TrackVisible.tsx +105 -0
  25. package/src/components/index.ts +3 -0
  26. package/src/hooks/index.ts +4 -0
  27. package/src/hooks/useFathom.test.tsx +51 -0
  28. package/src/hooks/useFathom.ts +11 -0
  29. package/src/hooks/useTrackOnClick.test.tsx +197 -0
  30. package/src/hooks/useTrackOnClick.ts +65 -0
  31. package/src/hooks/useTrackOnMount.test.tsx +79 -0
  32. package/src/hooks/useTrackOnMount.ts +24 -0
  33. package/src/hooks/useTrackOnVisible.test.tsx +313 -0
  34. package/src/hooks/useTrackOnVisible.ts +99 -0
  35. package/src/index.ts +4 -0
  36. package/src/next/NextFathomProvider.test.tsx +131 -0
  37. package/src/next/NextFathomProvider.tsx +62 -0
  38. package/src/next/NextFathomProviderApp.test.tsx +308 -0
  39. package/src/next/NextFathomProviderApp.tsx +106 -0
  40. package/src/next/NextFathomProviderPages.test.tsx +330 -0
  41. package/src/next/NextFathomProviderPages.tsx +112 -0
  42. package/src/next/compositions/withAppRouter.test.tsx +113 -0
  43. package/src/next/compositions/withAppRouter.tsx +48 -0
  44. package/src/next/compositions/withPagesRouter.test.tsx +113 -0
  45. package/src/next/compositions/withPagesRouter.tsx +44 -0
  46. package/src/next/index.ts +7 -0
  47. package/src/next/types.ts +19 -0
  48. package/src/types.ts +37 -0
  49. package/types/FathomContext.d.ts +3 -0
  50. package/types/FathomContext.d.ts.map +1 -0
  51. package/types/FathomProvider.d.ts +5 -0
  52. package/types/FathomProvider.d.ts.map +1 -0
  53. package/types/components/TrackClick.d.ts +39 -0
  54. package/types/components/TrackClick.d.ts.map +1 -0
  55. package/types/components/TrackPageview.d.ts +21 -0
  56. package/types/components/TrackPageview.d.ts.map +1 -0
  57. package/types/components/TrackVisible.d.ts +39 -0
  58. package/types/components/TrackVisible.d.ts.map +1 -0
  59. package/types/components/index.d.ts +4 -0
  60. package/types/components/index.d.ts.map +1 -0
  61. package/types/hooks/index.d.ts +5 -0
  62. package/types/hooks/index.d.ts.map +1 -0
  63. package/types/hooks/useFathom.d.ts +6 -0
  64. package/types/hooks/useFathom.d.ts.map +1 -0
  65. package/types/hooks/useTrackOnClick.d.ts +39 -0
  66. package/types/hooks/useTrackOnClick.d.ts.map +1 -0
  67. package/types/hooks/useTrackOnMount.d.ts +14 -0
  68. package/types/hooks/useTrackOnMount.d.ts.map +1 -0
  69. package/types/hooks/useTrackOnVisible.d.ts +43 -0
  70. package/types/hooks/useTrackOnVisible.d.ts.map +1 -0
  71. package/types/index.d.ts +5 -0
  72. package/types/index.d.ts.map +1 -0
  73. package/types/next/AppRouterProvider.d.ts +7 -0
  74. package/types/next/AppRouterProvider.d.ts.map +1 -0
  75. package/types/next/NextFathomProvider.d.ts +34 -0
  76. package/types/next/NextFathomProvider.d.ts.map +1 -0
  77. package/types/next/NextFathomProviderApp.d.ts +6 -0
  78. package/types/next/NextFathomProviderApp.d.ts.map +1 -0
  79. package/types/next/NextFathomProviderPages.d.ts +6 -0
  80. package/types/next/NextFathomProviderPages.d.ts.map +1 -0
  81. package/types/next/PagesRouterProvider.d.ts +7 -0
  82. package/types/next/PagesRouterProvider.d.ts.map +1 -0
  83. package/types/next/compositions/withAppRouter.d.ts +29 -0
  84. package/types/next/compositions/withAppRouter.d.ts.map +1 -0
  85. package/types/next/compositions/withPagesRouter.d.ts +25 -0
  86. package/types/next/compositions/withPagesRouter.d.ts.map +1 -0
  87. package/types/next/index.d.ts +6 -0
  88. package/types/next/index.d.ts.map +1 -0
  89. package/types/next/types.d.ts +16 -0
  90. package/types/next/types.d.ts.map +1 -0
  91. package/types/test-setup.d.ts +2 -0
  92. package/types/test-setup.d.ts.map +1 -0
  93. package/types/types.d.ts +34 -0
  94. package/types/types.d.ts.map +1 -0
  95. package/types/useFathom.d.ts +7 -0
  96. package/types/useFathom.d.ts.map +1 -0
@@ -0,0 +1,885 @@
1
+ /*! react-fathom - 0.1.0 !*/
2
+ import React, { createContext, useContext, useMemo, useCallback, useEffect, useRef, lazy, Suspense } from 'react';
3
+ import * as Fathom from 'fathom-client';
4
+ import { useRouter } from 'next/router';
5
+ import { usePathname, useSearchParams } from 'next/navigation';
6
+
7
+ function _typeof$1(o) {
8
+ "@babel/helpers - typeof";
9
+
10
+ return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
11
+ return typeof o;
12
+ } : function (o) {
13
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
14
+ }, _typeof$1(o);
15
+ }
16
+
17
+ function toPrimitive(t, r) {
18
+ if ("object" != _typeof$1(t) || !t) return t;
19
+ var e = t[Symbol.toPrimitive];
20
+ if (void 0 !== e) {
21
+ var i = e.call(t, r);
22
+ if ("object" != _typeof$1(i)) return i;
23
+ throw new TypeError("@@toPrimitive must return a primitive value.");
24
+ }
25
+ return ("string" === r ? String : Number)(t);
26
+ }
27
+
28
+ function toPropertyKey(t) {
29
+ var i = toPrimitive(t, "string");
30
+ return "symbol" == _typeof$1(i) ? i : i + "";
31
+ }
32
+
33
+ function _defineProperty(e, r, t) {
34
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
35
+ value: t,
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true
39
+ }) : e[r] = t, e;
40
+ }
41
+
42
+ var FathomContext = /*#__PURE__*/createContext({});
43
+
44
+ function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
45
+ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
46
+ var FathomProvider = function FathomProvider(_ref) {
47
+ var children = _ref.children,
48
+ providedClient = _ref.client,
49
+ clientOptions = _ref.clientOptions;
50
+ _ref.disableDefaultTrack;
51
+ var siteId = _ref.siteId,
52
+ providedDefaultPageviewOptions = _ref.defaultPageviewOptions,
53
+ providedDefaultEventOptions = _ref.defaultEventOptions;
54
+ // Read parent context if it exists
55
+ var parentContext = useContext(FathomContext);
56
+
57
+ // Use provided client or fall back to parent client or default Fathom
58
+ var client = useMemo(function () {
59
+ var _ref2;
60
+ return (_ref2 = providedClient !== null && providedClient !== void 0 ? providedClient : parentContext.client) !== null && _ref2 !== void 0 ? _ref2 : Fathom;
61
+ }, [providedClient, parentContext.client]);
62
+
63
+ // Merge defaultPageviewOptions: provided > parent > undefined
64
+ var defaultPageviewOptions = useMemo(function () {
65
+ return providedDefaultPageviewOptions !== null && providedDefaultPageviewOptions !== void 0 ? providedDefaultPageviewOptions : parentContext.defaultPageviewOptions;
66
+ }, [providedDefaultPageviewOptions, parentContext.defaultPageviewOptions]);
67
+
68
+ // Merge defaultEventOptions: provided > parent > undefined
69
+ var defaultEventOptions = useMemo(function () {
70
+ return providedDefaultEventOptions !== null && providedDefaultEventOptions !== void 0 ? providedDefaultEventOptions : parentContext.defaultEventOptions;
71
+ }, [providedDefaultEventOptions, parentContext.defaultEventOptions]);
72
+ var blockTrackingForMe = useCallback(function () {
73
+ client.blockTrackingForMe();
74
+ }, [client]);
75
+ var enableTrackingForMe = useCallback(function () {
76
+ client.enableTrackingForMe();
77
+ }, [client]);
78
+ var isTrackingEnabled = useCallback(function () {
79
+ var _client$isTrackingEna;
80
+ return (_client$isTrackingEna = client.isTrackingEnabled()) !== null && _client$isTrackingEna !== void 0 ? _client$isTrackingEna : false;
81
+ }, [client]);
82
+ var load = useCallback(function (siteId, clientOptions) {
83
+ client.load(siteId, clientOptions);
84
+ }, [client]);
85
+ var setSite = useCallback(function (siteId) {
86
+ client.setSite(siteId);
87
+ }, [client]);
88
+ var trackEvent = useCallback(function (category, options) {
89
+ client.trackEvent(category, _objectSpread$2(_objectSpread$2({}, defaultEventOptions), options));
90
+ }, [client, defaultEventOptions]);
91
+ var trackPageview = useCallback(function (options) {
92
+ client.trackPageview(_objectSpread$2(_objectSpread$2({}, defaultPageviewOptions), options));
93
+ }, [client, defaultPageviewOptions]);
94
+ var trackGoal = useCallback(function (code, cents) {
95
+ client.trackGoal(code, cents);
96
+ }, [client]);
97
+ useEffect(function () {
98
+ if (siteId !== undefined) {
99
+ load(siteId, clientOptions);
100
+ }
101
+ }, [clientOptions, load, siteId]);
102
+ return /*#__PURE__*/React.createElement(FathomContext.Provider, {
103
+ value: {
104
+ blockTrackingForMe: blockTrackingForMe,
105
+ enableTrackingForMe: enableTrackingForMe,
106
+ isTrackingEnabled: isTrackingEnabled,
107
+ load: load,
108
+ setSite: setSite,
109
+ trackEvent: trackEvent,
110
+ trackGoal: trackGoal,
111
+ trackPageview: trackPageview,
112
+ client: client,
113
+ defaultPageviewOptions: defaultPageviewOptions,
114
+ defaultEventOptions: defaultEventOptions
115
+ }
116
+ }, children);
117
+ };
118
+ FathomProvider.displayName = 'FathomProvider';
119
+
120
+ var useFathom = function useFathom() {
121
+ var context = useContext(FathomContext);
122
+ return context;
123
+ };
124
+ useFathom.displayName = 'useFathom';
125
+
126
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
127
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
128
+ var NextFathomProviderPages = function NextFathomProviderPages(_ref) {
129
+ var children = _ref.children,
130
+ providedClient = _ref.client,
131
+ clientOptions = _ref.clientOptions,
132
+ _ref$disableAutoTrack = _ref.disableAutoTrack,
133
+ disableAutoTrack = _ref$disableAutoTrack === void 0 ? false : _ref$disableAutoTrack,
134
+ siteId = _ref.siteId,
135
+ trackDefaultOptions = _ref.trackDefaultOptions,
136
+ providedDefaultPageviewOptions = _ref.defaultPageviewOptions;
137
+ var router = useRouter();
138
+ var hasTrackedInitialPageview = useRef(false);
139
+ var parentContext = useFathom();
140
+
141
+ // Use provided client or fall back to parent client or default Fathom
142
+ var client = useMemo(function () {
143
+ var _ref2;
144
+ return (_ref2 = providedClient !== null && providedClient !== void 0 ? providedClient : parentContext.client) !== null && _ref2 !== void 0 ? _ref2 : Fathom;
145
+ }, [providedClient, parentContext.client]);
146
+
147
+ // Support both deprecated trackDefaultOptions and new defaultPageviewOptions
148
+ // Priority: providedDefaultPageviewOptions > trackDefaultOptions > parent defaultPageviewOptions
149
+ var defaultPageviewOptions = useMemo(function () {
150
+ var _ref3;
151
+ return (_ref3 = providedDefaultPageviewOptions !== null && providedDefaultPageviewOptions !== void 0 ? providedDefaultPageviewOptions : trackDefaultOptions) !== null && _ref3 !== void 0 ? _ref3 : parentContext.defaultPageviewOptions;
152
+ }, [providedDefaultPageviewOptions, trackDefaultOptions, parentContext.defaultPageviewOptions]);
153
+ var trackPageview = useCallback(function (options) {
154
+ if (siteId !== undefined && client !== undefined) {
155
+ client.trackPageview(_objectSpread$1(_objectSpread$1({}, defaultPageviewOptions), options));
156
+ }
157
+ }, [client, siteId, defaultPageviewOptions]);
158
+
159
+ // Initialize Fathom on mount
160
+ useEffect(function () {
161
+ if (siteId !== undefined && client !== undefined) {
162
+ client.load(siteId, clientOptions);
163
+ }
164
+ }, [client, clientOptions, siteId]);
165
+
166
+ // Track pageviews on route changes
167
+ useEffect(function () {
168
+ if (siteId === undefined || disableAutoTrack) {
169
+ return;
170
+ }
171
+ var handleRouteChangeComplete = function handleRouteChangeComplete(url) {
172
+ trackPageview({
173
+ url: window.location.origin + url
174
+ });
175
+ };
176
+ router.events.on('routeChangeComplete', handleRouteChangeComplete);
177
+ return function () {
178
+ router.events.off('routeChangeComplete', handleRouteChangeComplete);
179
+ };
180
+ }, [router.events, siteId, disableAutoTrack, trackPageview]);
181
+
182
+ // Track initial pageview (routeChangeComplete doesn't fire on initial load)
183
+ useEffect(function () {
184
+ if (siteId !== undefined && !disableAutoTrack && router.isReady && !hasTrackedInitialPageview.current) {
185
+ hasTrackedInitialPageview.current = true;
186
+ trackPageview({
187
+ url: window.location.href
188
+ });
189
+ }
190
+ }, [siteId, disableAutoTrack, router.isReady, trackPageview]);
191
+ return /*#__PURE__*/React.createElement(FathomProvider, {
192
+ client: client,
193
+ clientOptions: clientOptions,
194
+ siteId: siteId,
195
+ defaultPageviewOptions: defaultPageviewOptions
196
+ }, children);
197
+ };
198
+ NextFathomProviderPages.displayName = 'NextFathomProviderPages';
199
+
200
+ var NextFathomProviderPages$1 = /*#__PURE__*/Object.freeze({
201
+ __proto__: null,
202
+ NextFathomProviderPages: NextFathomProviderPages,
203
+ default: NextFathomProviderPages
204
+ });
205
+
206
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
207
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
208
+ var NextFathomProviderApp = function NextFathomProviderApp(_ref) {
209
+ var children = _ref.children,
210
+ providedClient = _ref.client,
211
+ clientOptions = _ref.clientOptions,
212
+ _ref$disableAutoTrack = _ref.disableAutoTrack,
213
+ disableAutoTrack = _ref$disableAutoTrack === void 0 ? false : _ref$disableAutoTrack,
214
+ siteId = _ref.siteId,
215
+ trackDefaultOptions = _ref.trackDefaultOptions,
216
+ providedDefaultPageviewOptions = _ref.defaultPageviewOptions;
217
+ var pathname = usePathname();
218
+ var searchParams = useSearchParams();
219
+ var hasTrackedInitialPageview = useRef(false);
220
+ var parentContext = useFathom();
221
+
222
+ // Use provided client or fall back to parent client or default Fathom
223
+ var client = useMemo(function () {
224
+ var _ref2;
225
+ return (_ref2 = providedClient !== null && providedClient !== void 0 ? providedClient : parentContext.client) !== null && _ref2 !== void 0 ? _ref2 : Fathom;
226
+ }, [providedClient, parentContext.client]);
227
+
228
+ // Support both deprecated trackDefaultOptions and new defaultPageviewOptions
229
+ // Priority: providedDefaultPageviewOptions > trackDefaultOptions > parent defaultPageviewOptions
230
+ var defaultPageviewOptions = useMemo(function () {
231
+ var _ref3;
232
+ return (_ref3 = providedDefaultPageviewOptions !== null && providedDefaultPageviewOptions !== void 0 ? providedDefaultPageviewOptions : trackDefaultOptions) !== null && _ref3 !== void 0 ? _ref3 : parentContext.defaultPageviewOptions;
233
+ }, [providedDefaultPageviewOptions, trackDefaultOptions, parentContext.defaultPageviewOptions]);
234
+ var trackPageview = useCallback(function (options) {
235
+ if (siteId !== undefined && client !== undefined) {
236
+ client.trackPageview(_objectSpread(_objectSpread({}, defaultPageviewOptions), options));
237
+ }
238
+ }, [client, siteId, defaultPageviewOptions]);
239
+
240
+ // Initialize Fathom on mount
241
+ useEffect(function () {
242
+ if (siteId !== undefined && client !== undefined) {
243
+ client.load(siteId, clientOptions);
244
+ }
245
+ }, [client, clientOptions, siteId]);
246
+
247
+ // Track pageviews on route changes
248
+ useEffect(function () {
249
+ if (siteId === undefined || disableAutoTrack) {
250
+ return;
251
+ }
252
+ var searchString = searchParams === null || searchParams === void 0 ? void 0 : searchParams.toString();
253
+ var url = pathname + (searchString !== undefined && searchString !== '' ? "?".concat(searchString) : '');
254
+
255
+ // Track initial pageview only once
256
+ if (!hasTrackedInitialPageview.current) {
257
+ hasTrackedInitialPageview.current = true;
258
+ trackPageview({
259
+ url: window.location.origin + url
260
+ });
261
+ } else {
262
+ // Track subsequent route changes
263
+ trackPageview({
264
+ url: window.location.origin + url
265
+ });
266
+ }
267
+ }, [pathname, searchParams, siteId, disableAutoTrack, trackPageview]);
268
+ return /*#__PURE__*/React.createElement(FathomProvider, {
269
+ client: client,
270
+ clientOptions: clientOptions,
271
+ siteId: siteId,
272
+ defaultPageviewOptions: defaultPageviewOptions
273
+ }, children);
274
+ };
275
+ NextFathomProviderApp.displayName = 'NextFathomProviderApp';
276
+
277
+ var NextFathomProviderApp$1 = /*#__PURE__*/Object.freeze({
278
+ __proto__: null,
279
+ NextFathomProviderApp: NextFathomProviderApp,
280
+ default: NextFathomProviderApp
281
+ });
282
+
283
+ function _objectWithoutPropertiesLoose(r, e) {
284
+ if (null == r) return {};
285
+ var t = {};
286
+ for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
287
+ if (-1 !== e.indexOf(n)) continue;
288
+ t[n] = r[n];
289
+ }
290
+ return t;
291
+ }
292
+
293
+ function _objectWithoutProperties(e, t) {
294
+ if (null == e) return {};
295
+ var o,
296
+ r,
297
+ i = _objectWithoutPropertiesLoose(e, t);
298
+ if (Object.getOwnPropertySymbols) {
299
+ var n = Object.getOwnPropertySymbols(e);
300
+ for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
301
+ }
302
+ return i;
303
+ }
304
+
305
+ function asyncGeneratorStep(n, t, e, r, o, a, c) {
306
+ try {
307
+ var i = n[a](c),
308
+ u = i.value;
309
+ } catch (n) {
310
+ return void e(n);
311
+ }
312
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
313
+ }
314
+ function _asyncToGenerator(n) {
315
+ return function () {
316
+ var t = this,
317
+ e = arguments;
318
+ return new Promise(function (r, o) {
319
+ var a = n.apply(t, e);
320
+ function _next(n) {
321
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
322
+ }
323
+ function _throw(n) {
324
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
325
+ }
326
+ _next(void 0);
327
+ });
328
+ };
329
+ }
330
+
331
+ function getDefaultExportFromCjs (x) {
332
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
333
+ }
334
+
335
+ var regeneratorRuntime$1 = {exports: {}};
336
+
337
+ var OverloadYield = {exports: {}};
338
+
339
+ var hasRequiredOverloadYield;
340
+
341
+ function requireOverloadYield () {
342
+ if (hasRequiredOverloadYield) return OverloadYield.exports;
343
+ hasRequiredOverloadYield = 1;
344
+ (function (module) {
345
+ function _OverloadYield(e, d) {
346
+ this.v = e, this.k = d;
347
+ }
348
+ module.exports = _OverloadYield, module.exports.__esModule = true, module.exports["default"] = module.exports;
349
+ } (OverloadYield));
350
+ return OverloadYield.exports;
351
+ }
352
+
353
+ var regenerator$1 = {exports: {}};
354
+
355
+ var regeneratorDefine = {exports: {}};
356
+
357
+ var hasRequiredRegeneratorDefine;
358
+
359
+ function requireRegeneratorDefine () {
360
+ if (hasRequiredRegeneratorDefine) return regeneratorDefine.exports;
361
+ hasRequiredRegeneratorDefine = 1;
362
+ (function (module) {
363
+ function _regeneratorDefine(e, r, n, t) {
364
+ var i = Object.defineProperty;
365
+ try {
366
+ i({}, "", {});
367
+ } catch (e) {
368
+ i = 0;
369
+ }
370
+ module.exports = _regeneratorDefine = function regeneratorDefine(e, r, n, t) {
371
+ function o(r, n) {
372
+ _regeneratorDefine(e, r, function (e) {
373
+ return this._invoke(r, n, e);
374
+ });
375
+ }
376
+ r ? i ? i(e, r, {
377
+ value: n,
378
+ enumerable: !t,
379
+ configurable: !t,
380
+ writable: !t
381
+ }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
382
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _regeneratorDefine(e, r, n, t);
383
+ }
384
+ module.exports = _regeneratorDefine, module.exports.__esModule = true, module.exports["default"] = module.exports;
385
+ } (regeneratorDefine));
386
+ return regeneratorDefine.exports;
387
+ }
388
+
389
+ var hasRequiredRegenerator$1;
390
+
391
+ function requireRegenerator$1 () {
392
+ if (hasRequiredRegenerator$1) return regenerator$1.exports;
393
+ hasRequiredRegenerator$1 = 1;
394
+ (function (module) {
395
+ var regeneratorDefine = requireRegeneratorDefine();
396
+ function _regenerator() {
397
+ /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
398
+ var e,
399
+ t,
400
+ r = "function" == typeof Symbol ? Symbol : {},
401
+ n = r.iterator || "@@iterator",
402
+ o = r.toStringTag || "@@toStringTag";
403
+ function i(r, n, o, i) {
404
+ var c = n && n.prototype instanceof Generator ? n : Generator,
405
+ u = Object.create(c.prototype);
406
+ return regeneratorDefine(u, "_invoke", function (r, n, o) {
407
+ var i,
408
+ c,
409
+ u,
410
+ f = 0,
411
+ p = o || [],
412
+ y = false,
413
+ G = {
414
+ p: 0,
415
+ n: 0,
416
+ v: e,
417
+ a: d,
418
+ f: d.bind(e, 4),
419
+ d: function d(t, r) {
420
+ return i = t, c = 0, u = e, G.n = r, a;
421
+ }
422
+ };
423
+ function d(r, n) {
424
+ for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
425
+ var o,
426
+ i = p[t],
427
+ d = G.p,
428
+ l = i[2];
429
+ r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
430
+ }
431
+ if (o || r > 1) return a;
432
+ throw y = true, n;
433
+ }
434
+ return function (o, p, l) {
435
+ if (f > 1) throw TypeError("Generator is already running");
436
+ for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
437
+ i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
438
+ try {
439
+ if (f = 2, i) {
440
+ if (c || (o = "next"), t = i[o]) {
441
+ if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
442
+ if (!t.done) return t;
443
+ u = t.value, c < 2 && (c = 0);
444
+ } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
445
+ i = e;
446
+ } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
447
+ } catch (t) {
448
+ i = e, c = 1, u = t;
449
+ } finally {
450
+ f = 1;
451
+ }
452
+ }
453
+ return {
454
+ value: t,
455
+ done: y
456
+ };
457
+ };
458
+ }(r, o, i), true), u;
459
+ }
460
+ var a = {};
461
+ function Generator() {}
462
+ function GeneratorFunction() {}
463
+ function GeneratorFunctionPrototype() {}
464
+ t = Object.getPrototypeOf;
465
+ var c = [][n] ? t(t([][n]())) : (regeneratorDefine(t = {}, n, function () {
466
+ return this;
467
+ }), t),
468
+ u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
469
+ function f(e) {
470
+ return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
471
+ }
472
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), regeneratorDefine(u), regeneratorDefine(u, o, "Generator"), regeneratorDefine(u, n, function () {
473
+ return this;
474
+ }), regeneratorDefine(u, "toString", function () {
475
+ return "[object Generator]";
476
+ }), (module.exports = _regenerator = function _regenerator() {
477
+ return {
478
+ w: i,
479
+ m: f
480
+ };
481
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports)();
482
+ }
483
+ module.exports = _regenerator, module.exports.__esModule = true, module.exports["default"] = module.exports;
484
+ } (regenerator$1));
485
+ return regenerator$1.exports;
486
+ }
487
+
488
+ var regeneratorAsync = {exports: {}};
489
+
490
+ var regeneratorAsyncGen = {exports: {}};
491
+
492
+ var regeneratorAsyncIterator = {exports: {}};
493
+
494
+ var hasRequiredRegeneratorAsyncIterator;
495
+
496
+ function requireRegeneratorAsyncIterator () {
497
+ if (hasRequiredRegeneratorAsyncIterator) return regeneratorAsyncIterator.exports;
498
+ hasRequiredRegeneratorAsyncIterator = 1;
499
+ (function (module) {
500
+ var OverloadYield = requireOverloadYield();
501
+ var regeneratorDefine = requireRegeneratorDefine();
502
+ function AsyncIterator(t, e) {
503
+ function n(r, o, i, f) {
504
+ try {
505
+ var c = t[r](o),
506
+ u = c.value;
507
+ return u instanceof OverloadYield ? e.resolve(u.v).then(function (t) {
508
+ n("next", t, i, f);
509
+ }, function (t) {
510
+ n("throw", t, i, f);
511
+ }) : e.resolve(u).then(function (t) {
512
+ c.value = t, i(c);
513
+ }, function (t) {
514
+ return n("throw", t, i, f);
515
+ });
516
+ } catch (t) {
517
+ f(t);
518
+ }
519
+ }
520
+ var r;
521
+ this.next || (regeneratorDefine(AsyncIterator.prototype), regeneratorDefine(AsyncIterator.prototype, "function" == typeof Symbol && Symbol.asyncIterator || "@asyncIterator", function () {
522
+ return this;
523
+ })), regeneratorDefine(this, "_invoke", function (t, o, i) {
524
+ function f() {
525
+ return new e(function (e, r) {
526
+ n(t, i, e, r);
527
+ });
528
+ }
529
+ return r = r ? r.then(f, f) : f();
530
+ }, true);
531
+ }
532
+ module.exports = AsyncIterator, module.exports.__esModule = true, module.exports["default"] = module.exports;
533
+ } (regeneratorAsyncIterator));
534
+ return regeneratorAsyncIterator.exports;
535
+ }
536
+
537
+ var hasRequiredRegeneratorAsyncGen;
538
+
539
+ function requireRegeneratorAsyncGen () {
540
+ if (hasRequiredRegeneratorAsyncGen) return regeneratorAsyncGen.exports;
541
+ hasRequiredRegeneratorAsyncGen = 1;
542
+ (function (module) {
543
+ var regenerator = requireRegenerator$1();
544
+ var regeneratorAsyncIterator = requireRegeneratorAsyncIterator();
545
+ function _regeneratorAsyncGen(r, e, t, o, n) {
546
+ return new regeneratorAsyncIterator(regenerator().w(r, e, t, o), n || Promise);
547
+ }
548
+ module.exports = _regeneratorAsyncGen, module.exports.__esModule = true, module.exports["default"] = module.exports;
549
+ } (regeneratorAsyncGen));
550
+ return regeneratorAsyncGen.exports;
551
+ }
552
+
553
+ var hasRequiredRegeneratorAsync;
554
+
555
+ function requireRegeneratorAsync () {
556
+ if (hasRequiredRegeneratorAsync) return regeneratorAsync.exports;
557
+ hasRequiredRegeneratorAsync = 1;
558
+ (function (module) {
559
+ var regeneratorAsyncGen = requireRegeneratorAsyncGen();
560
+ function _regeneratorAsync(n, e, r, t, o) {
561
+ var a = regeneratorAsyncGen(n, e, r, t, o);
562
+ return a.next().then(function (n) {
563
+ return n.done ? n.value : a.next();
564
+ });
565
+ }
566
+ module.exports = _regeneratorAsync, module.exports.__esModule = true, module.exports["default"] = module.exports;
567
+ } (regeneratorAsync));
568
+ return regeneratorAsync.exports;
569
+ }
570
+
571
+ var regeneratorKeys = {exports: {}};
572
+
573
+ var hasRequiredRegeneratorKeys;
574
+
575
+ function requireRegeneratorKeys () {
576
+ if (hasRequiredRegeneratorKeys) return regeneratorKeys.exports;
577
+ hasRequiredRegeneratorKeys = 1;
578
+ (function (module) {
579
+ function _regeneratorKeys(e) {
580
+ var n = Object(e),
581
+ r = [];
582
+ for (var t in n) r.unshift(t);
583
+ return function e() {
584
+ for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = false, e;
585
+ return e.done = true, e;
586
+ };
587
+ }
588
+ module.exports = _regeneratorKeys, module.exports.__esModule = true, module.exports["default"] = module.exports;
589
+ } (regeneratorKeys));
590
+ return regeneratorKeys.exports;
591
+ }
592
+
593
+ var regeneratorValues = {exports: {}};
594
+
595
+ var _typeof = {exports: {}};
596
+
597
+ var hasRequired_typeof;
598
+
599
+ function require_typeof () {
600
+ if (hasRequired_typeof) return _typeof.exports;
601
+ hasRequired_typeof = 1;
602
+ (function (module) {
603
+ function _typeof(o) {
604
+ "@babel/helpers - typeof";
605
+
606
+ return module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
607
+ return typeof o;
608
+ } : function (o) {
609
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
610
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof(o);
611
+ }
612
+ module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
613
+ } (_typeof));
614
+ return _typeof.exports;
615
+ }
616
+
617
+ var hasRequiredRegeneratorValues;
618
+
619
+ function requireRegeneratorValues () {
620
+ if (hasRequiredRegeneratorValues) return regeneratorValues.exports;
621
+ hasRequiredRegeneratorValues = 1;
622
+ (function (module) {
623
+ var _typeof = require_typeof()["default"];
624
+ function _regeneratorValues(e) {
625
+ if (null != e) {
626
+ var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"],
627
+ r = 0;
628
+ if (t) return t.call(e);
629
+ if ("function" == typeof e.next) return e;
630
+ if (!isNaN(e.length)) return {
631
+ next: function next() {
632
+ return e && r >= e.length && (e = void 0), {
633
+ value: e && e[r++],
634
+ done: !e
635
+ };
636
+ }
637
+ };
638
+ }
639
+ throw new TypeError(_typeof(e) + " is not iterable");
640
+ }
641
+ module.exports = _regeneratorValues, module.exports.__esModule = true, module.exports["default"] = module.exports;
642
+ } (regeneratorValues));
643
+ return regeneratorValues.exports;
644
+ }
645
+
646
+ var hasRequiredRegeneratorRuntime;
647
+
648
+ function requireRegeneratorRuntime () {
649
+ if (hasRequiredRegeneratorRuntime) return regeneratorRuntime$1.exports;
650
+ hasRequiredRegeneratorRuntime = 1;
651
+ (function (module) {
652
+ var OverloadYield = requireOverloadYield();
653
+ var regenerator = requireRegenerator$1();
654
+ var regeneratorAsync = requireRegeneratorAsync();
655
+ var regeneratorAsyncGen = requireRegeneratorAsyncGen();
656
+ var regeneratorAsyncIterator = requireRegeneratorAsyncIterator();
657
+ var regeneratorKeys = requireRegeneratorKeys();
658
+ var regeneratorValues = requireRegeneratorValues();
659
+ function _regeneratorRuntime() {
660
+
661
+ var r = regenerator(),
662
+ e = r.m(_regeneratorRuntime),
663
+ t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor;
664
+ function n(r) {
665
+ var e = "function" == typeof r && r.constructor;
666
+ return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name));
667
+ }
668
+ var o = {
669
+ "throw": 1,
670
+ "return": 2,
671
+ "break": 3,
672
+ "continue": 3
673
+ };
674
+ function a(r) {
675
+ var e, t;
676
+ return function (n) {
677
+ e || (e = {
678
+ stop: function stop() {
679
+ return t(n.a, 2);
680
+ },
681
+ "catch": function _catch() {
682
+ return n.v;
683
+ },
684
+ abrupt: function abrupt(r, e) {
685
+ return t(n.a, o[r], e);
686
+ },
687
+ delegateYield: function delegateYield(r, o, a) {
688
+ return e.resultName = o, t(n.d, regeneratorValues(r), a);
689
+ },
690
+ finish: function finish(r) {
691
+ return t(n.f, r);
692
+ }
693
+ }, t = function t(r, _t, o) {
694
+ n.p = e.prev, n.n = e.next;
695
+ try {
696
+ return r(_t, o);
697
+ } finally {
698
+ e.next = n.n;
699
+ }
700
+ }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n;
701
+ try {
702
+ return r.call(this, e);
703
+ } finally {
704
+ n.p = e.prev, n.n = e.next;
705
+ }
706
+ };
707
+ }
708
+ return (module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
709
+ return {
710
+ wrap: function wrap(e, t, n, o) {
711
+ return r.w(a(e), t, n, o && o.reverse());
712
+ },
713
+ isGeneratorFunction: n,
714
+ mark: r.m,
715
+ awrap: function awrap(r, e) {
716
+ return new OverloadYield(r, e);
717
+ },
718
+ AsyncIterator: regeneratorAsyncIterator,
719
+ async: function async(r, e, t, o, u) {
720
+ return (n(e) ? regeneratorAsyncGen : regeneratorAsync)(a(r), e, t, o, u);
721
+ },
722
+ keys: regeneratorKeys,
723
+ values: regeneratorValues
724
+ };
725
+ }, module.exports.__esModule = true, module.exports["default"] = module.exports)();
726
+ }
727
+ module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
728
+ } (regeneratorRuntime$1));
729
+ return regeneratorRuntime$1.exports;
730
+ }
731
+
732
+ var regenerator;
733
+ var hasRequiredRegenerator;
734
+
735
+ function requireRegenerator () {
736
+ if (hasRequiredRegenerator) return regenerator;
737
+ hasRequiredRegenerator = 1;
738
+ // TODO(Babel 8): Remove this file.
739
+
740
+ var runtime = requireRegeneratorRuntime()();
741
+ regenerator = runtime;
742
+
743
+ // Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=
744
+ try {
745
+ regeneratorRuntime = runtime;
746
+ } catch (accidentalStrictMode) {
747
+ if (typeof globalThis === "object") {
748
+ globalThis.regeneratorRuntime = runtime;
749
+ } else {
750
+ Function("r", "regeneratorRuntime = r")(runtime);
751
+ }
752
+ }
753
+ return regenerator;
754
+ }
755
+
756
+ var regeneratorExports = requireRegenerator();
757
+ var _regeneratorRuntime = /*@__PURE__*/getDefaultExportFromCjs(regeneratorExports);
758
+
759
+ var _excluded = ["router", "fallback"];
760
+ // Dynamically import providers to enable code-splitting
761
+ var NextFathomProviderAppLazy = /*#__PURE__*/lazy(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
762
+ return _regeneratorRuntime.wrap(function (_context) {
763
+ while (1) switch (_context.prev = _context.next) {
764
+ case 0:
765
+ _context.next = 1;
766
+ return Promise.resolve().then(function () { return NextFathomProviderApp$1; });
767
+ case 1:
768
+ return _context.abrupt("return", _context.sent);
769
+ case 2:
770
+ case "end":
771
+ return _context.stop();
772
+ }
773
+ }, _callee);
774
+ })));
775
+ var NextFathomProviderPagesLazy = /*#__PURE__*/lazy(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
776
+ return _regeneratorRuntime.wrap(function (_context2) {
777
+ while (1) switch (_context2.prev = _context2.next) {
778
+ case 0:
779
+ _context2.next = 1;
780
+ return Promise.resolve().then(function () { return NextFathomProviderPages$1; });
781
+ case 1:
782
+ return _context2.abrupt("return", _context2.sent);
783
+ case 2:
784
+ case "end":
785
+ return _context2.stop();
786
+ }
787
+ }, _callee2);
788
+ })));
789
+
790
+ /**
791
+ * Unified provider component that conditionally renders the appropriate
792
+ * Next.js router provider based on the `router` prop.
793
+ * Providers are dynamically loaded to avoid bundling both router types.
794
+ *
795
+ * @example
796
+ * ```tsx
797
+ * // App Router (default)
798
+ * <NextFathomProvider siteId="YOUR_SITE_ID" router="app">
799
+ * <App>{children}</App>
800
+ * </NextFathomProvider>
801
+ *
802
+ * // Pages Router
803
+ * <NextFathomProvider siteId="YOUR_SITE_ID" router="pages">
804
+ * <App>{children}</App>
805
+ * </NextFathomProvider>
806
+ * ```
807
+ */
808
+ var NextFathomProvider = function NextFathomProvider(_ref3) {
809
+ var _ref3$router = _ref3.router,
810
+ router = _ref3$router === void 0 ? 'app' : _ref3$router,
811
+ _ref3$fallback = _ref3.fallback,
812
+ fallback = _ref3$fallback === void 0 ? null : _ref3$fallback,
813
+ props = _objectWithoutProperties(_ref3, _excluded);
814
+ var Provider = useMemo(function () {
815
+ return router === 'pages' ? NextFathomProviderPagesLazy : NextFathomProviderAppLazy;
816
+ }, [router]);
817
+ return /*#__PURE__*/React.createElement(Suspense, {
818
+ fallback: fallback
819
+ }, /*#__PURE__*/React.createElement(Provider, props));
820
+ };
821
+ NextFathomProvider.displayName = 'NextFathomProvider';
822
+
823
+ /**
824
+ * Higher-order component that wraps your Next.js Pages Router app with FathomProvider
825
+ *
826
+ * @example
827
+ * ```tsx
828
+ * // pages/_app.tsx
829
+ * import { withPagesRouter } from 'react-fathom/next'
830
+ *
831
+ * function MyApp({ Component, pageProps }) {
832
+ * return <Component {...pageProps} />
833
+ * }
834
+ *
835
+ * export default withPagesRouter(MyApp, {
836
+ * siteId: 'YOUR_SITE_ID',
837
+ * clientOptions: {
838
+ * spa: 'auto',
839
+ * },
840
+ * })
841
+ * ```
842
+ */
843
+ var withPagesRouter = function withPagesRouter(Component, providerProps) {
844
+ var WithPagesRouter = function WithPagesRouter(props) {
845
+ return /*#__PURE__*/React.createElement(NextFathomProviderPages, providerProps, /*#__PURE__*/React.createElement(Component, props));
846
+ };
847
+ WithPagesRouter.displayName = "withPagesRouter(".concat(Component.displayName || Component.name || 'Component', ")");
848
+ return WithPagesRouter;
849
+ };
850
+
851
+ /**
852
+ * Higher-order component that wraps your Next.js App Router app with FathomProvider
853
+ *
854
+ * @example
855
+ * ```tsx
856
+ * // app/layout.tsx
857
+ * import { withAppRouter } from 'react-fathom/next'
858
+ *
859
+ * function RootLayout({ children }) {
860
+ * return (
861
+ * <html>
862
+ * <body>{children}</body>
863
+ * </html>
864
+ * )
865
+ * }
866
+ *
867
+ * export default withAppRouter(RootLayout, {
868
+ * siteId: 'YOUR_SITE_ID',
869
+ * clientOptions: {
870
+ * spa: 'auto',
871
+ * },
872
+ * })
873
+ * ```
874
+ */
875
+ var withAppRouter = function withAppRouter(Component, providerProps) {
876
+ var WithAppRouter = function WithAppRouter(props) {
877
+ return /*#__PURE__*/React.createElement(NextFathomProviderApp, providerProps, /*#__PURE__*/React.createElement(Component, props));
878
+ };
879
+ WithAppRouter.displayName = "withAppRouter(".concat(Component.displayName || Component.name || 'Component', ")");
880
+ return WithAppRouter;
881
+ };
882
+
883
+ export { NextFathomProvider, NextFathomProviderApp, NextFathomProviderPages, withAppRouter, withPagesRouter };
884
+ /* Copyright 2025 - Ryan Hefner <hi@ryanhefner.com> (https://www.ryanhefner.com) */
885
+ //# sourceMappingURL=index.js.map