react-fathom 0.1.10 → 0.2.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.
- package/README.md +941 -25
- package/dist/cjs/index.cjs +55 -9
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/native/index.cjs +1079 -0
- package/dist/cjs/native/index.cjs.map +1 -0
- package/dist/cjs/next/index.cjs +89 -5
- package/dist/cjs/next/index.cjs.map +1 -1
- package/dist/es/index.js +55 -9
- package/dist/es/index.js.map +1 -1
- package/dist/es/native/index.js +1071 -0
- package/dist/es/native/index.js.map +1 -0
- package/dist/es/next/index.js +90 -6
- package/dist/es/next/index.js.map +1 -1
- package/dist/react-fathom.js +55 -9
- package/dist/react-fathom.js.map +1 -1
- package/dist/react-fathom.min.js +2 -2
- package/dist/react-fathom.min.js.map +1 -1
- package/package.json +28 -5
- package/src/FathomContext.tsx +30 -1
- package/src/FathomProvider.test.tsx +115 -15
- package/src/FathomProvider.tsx +10 -2
- package/src/components/TrackClick.test.tsx +7 -7
- package/src/components/TrackClick.tsx +1 -1
- package/src/components/TrackVisible.test.tsx +7 -7
- package/src/components/TrackVisible.tsx +1 -1
- package/src/hooks/useFathom.test.tsx +14 -3
- package/src/hooks/useTrackOnClick.test.tsx +4 -4
- package/src/hooks/useTrackOnClick.ts +1 -1
- package/src/hooks/useTrackOnVisible.test.tsx +4 -4
- package/src/hooks/useTrackOnVisible.ts +1 -1
- package/src/index.ts +1 -0
- package/src/native/FathomWebView.test.tsx +410 -0
- package/src/native/FathomWebView.tsx +297 -0
- package/src/native/NativeFathomProvider.test.tsx +372 -0
- package/src/native/NativeFathomProvider.tsx +113 -0
- package/src/native/createWebViewClient.test.ts +380 -0
- package/src/native/createWebViewClient.ts +271 -0
- package/src/native/index.ts +29 -0
- package/src/native/react-native.d.ts +74 -0
- package/src/native/types.ts +145 -0
- package/src/native/useAppStateTracking.test.ts +249 -0
- package/src/native/useAppStateTracking.ts +66 -0
- package/src/native/useNavigationTracking.test.ts +446 -0
- package/src/native/useNavigationTracking.ts +177 -0
- package/src/next/NextFathomProviderApp.client.tsx +5 -0
- package/src/next/NextFathomProviderApp.test.tsx +154 -0
- package/src/next/NextFathomProviderApp.tsx +62 -0
- package/src/next/index.ts +3 -0
- package/src/types.ts +36 -9
- package/types/FathomContext.d.ts +1 -1
- package/types/FathomContext.d.ts.map +1 -1
- package/types/FathomProvider.d.ts.map +1 -1
- package/types/components/TrackClick.d.ts +1 -1
- package/types/components/TrackVisible.d.ts +1 -1
- package/types/hooks/useTrackOnClick.d.ts +1 -1
- package/types/hooks/useTrackOnVisible.d.ts +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/native/FathomWebView.d.ts +59 -0
- package/types/native/FathomWebView.d.ts.map +1 -0
- package/types/native/NativeFathomProvider.d.ts +36 -0
- package/types/native/NativeFathomProvider.d.ts.map +1 -0
- package/types/native/createWebViewClient.d.ts +51 -0
- package/types/native/createWebViewClient.d.ts.map +1 -0
- package/types/native/index.d.ts +10 -0
- package/types/native/index.d.ts.map +1 -0
- package/types/native/types.d.ts +125 -0
- package/types/native/types.d.ts.map +1 -0
- package/types/native/useAppStateTracking.d.ts +25 -0
- package/types/native/useAppStateTracking.d.ts.map +1 -0
- package/types/native/useNavigationTracking.d.ts +30 -0
- package/types/native/useNavigationTracking.d.ts.map +1 -0
- package/types/next/NextFathomProviderApp.client.d.ts +3 -0
- package/types/next/NextFathomProviderApp.client.d.ts.map +1 -0
- package/types/next/NextFathomProviderApp.d.ts +38 -4
- package/types/next/NextFathomProviderApp.d.ts.map +1 -1
- package/types/next/index.d.ts +1 -0
- package/types/next/index.d.ts.map +1 -1
- package/types/types.d.ts +34 -9
- package/types/types.d.ts.map +1 -1
package/dist/react-fathom.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! react-fathom - 0.
|
|
1
|
+
/*! react-fathom - 0.2.0 !*/
|
|
2
2
|
(function (global, factory) {
|
|
3
3
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('fathom-client')) :
|
|
4
4
|
typeof define === 'function' && define.amd ? define(['exports', 'react', 'fathom-client'], factory) :
|
|
@@ -24,7 +24,45 @@
|
|
|
24
24
|
|
|
25
25
|
var Fathom__namespace = /*#__PURE__*/_interopNamespaceDefault(Fathom);
|
|
26
26
|
|
|
27
|
-
var
|
|
27
|
+
var warnMissingProvider = function warnMissingProvider(methodName) {
|
|
28
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
29
|
+
console.warn("[react-fathom] ".concat(methodName, "() called without a FathomProvider. ") + 'Wrap your app with <FathomProvider> to enable analytics tracking.');
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Default context value with stub methods that warn in development.
|
|
35
|
+
* These allow useFathom() to be called without optional chaining,
|
|
36
|
+
* while still informing developers when the provider is missing.
|
|
37
|
+
*/
|
|
38
|
+
var defaultContextValue = {
|
|
39
|
+
blockTrackingForMe: function blockTrackingForMe() {
|
|
40
|
+
return warnMissingProvider('blockTrackingForMe');
|
|
41
|
+
},
|
|
42
|
+
enableTrackingForMe: function enableTrackingForMe() {
|
|
43
|
+
return warnMissingProvider('enableTrackingForMe');
|
|
44
|
+
},
|
|
45
|
+
isTrackingEnabled: function isTrackingEnabled() {
|
|
46
|
+
warnMissingProvider('isTrackingEnabled');
|
|
47
|
+
return false;
|
|
48
|
+
},
|
|
49
|
+
load: function load() {
|
|
50
|
+
return warnMissingProvider('load');
|
|
51
|
+
},
|
|
52
|
+
setSite: function setSite() {
|
|
53
|
+
return warnMissingProvider('setSite');
|
|
54
|
+
},
|
|
55
|
+
trackPageview: function trackPageview() {
|
|
56
|
+
return warnMissingProvider('trackPageview');
|
|
57
|
+
},
|
|
58
|
+
trackEvent: function trackEvent() {
|
|
59
|
+
return warnMissingProvider('trackEvent');
|
|
60
|
+
},
|
|
61
|
+
trackGoal: function trackGoal() {
|
|
62
|
+
return warnMissingProvider('trackGoal');
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
var FathomContext = /*#__PURE__*/React.createContext(defaultContextValue);
|
|
28
66
|
|
|
29
67
|
function _typeof(o) {
|
|
30
68
|
"@babel/helpers - typeof";
|
|
@@ -66,6 +104,7 @@
|
|
|
66
104
|
var FathomProvider = function FathomProvider(_ref) {
|
|
67
105
|
var children = _ref.children,
|
|
68
106
|
providedClient = _ref.client,
|
|
107
|
+
clientRef = _ref.clientRef,
|
|
69
108
|
clientOptions = _ref.clientOptions,
|
|
70
109
|
siteId = _ref.siteId,
|
|
71
110
|
providedDefaultPageviewOptions = _ref.defaultPageviewOptions,
|
|
@@ -104,8 +143,8 @@
|
|
|
104
143
|
var setSite = React.useCallback(function (siteId) {
|
|
105
144
|
client.setSite(siteId);
|
|
106
145
|
}, [client]);
|
|
107
|
-
var trackEvent = React.useCallback(function (
|
|
108
|
-
client.trackEvent(
|
|
146
|
+
var trackEvent = React.useCallback(function (eventName, options) {
|
|
147
|
+
client.trackEvent(eventName, _objectSpread$2(_objectSpread$2({}, defaultEventOptions), options));
|
|
109
148
|
}, [client, defaultEventOptions]);
|
|
110
149
|
var trackPageview = React.useCallback(function (options) {
|
|
111
150
|
client.trackPageview(_objectSpread$2(_objectSpread$2({}, defaultPageviewOptions), options));
|
|
@@ -118,6 +157,13 @@
|
|
|
118
157
|
load(siteId, clientOptions);
|
|
119
158
|
}
|
|
120
159
|
}, [clientOptions, load, siteId]);
|
|
160
|
+
|
|
161
|
+
// Populate the clientRef so the parent component can access the client
|
|
162
|
+
React.useEffect(function () {
|
|
163
|
+
if (clientRef) {
|
|
164
|
+
clientRef.current = client;
|
|
165
|
+
}
|
|
166
|
+
}, [client, clientRef]);
|
|
121
167
|
return /*#__PURE__*/React.createElement(FathomContext.Provider, {
|
|
122
168
|
value: {
|
|
123
169
|
blockTrackingForMe: blockTrackingForMe,
|
|
@@ -192,7 +238,7 @@
|
|
|
192
238
|
* function Button() {
|
|
193
239
|
* const handleClick = useTrackOnClick({
|
|
194
240
|
* eventName: 'button-click',
|
|
195
|
-
*
|
|
241
|
+
* _value: 100, // Optional: value in cents
|
|
196
242
|
* callback: (e) => {
|
|
197
243
|
* console.log('Button clicked!')
|
|
198
244
|
* // Your custom logic here
|
|
@@ -231,7 +277,7 @@
|
|
|
231
277
|
* function Section() {
|
|
232
278
|
* const ref = useTrackOnVisible({
|
|
233
279
|
* eventName: 'section-viewed',
|
|
234
|
-
*
|
|
280
|
+
* _value: 1, // Optional: value in cents
|
|
235
281
|
* callback: (entry) => {
|
|
236
282
|
* console.log('Section is visible!', entry.isIntersecting)
|
|
237
283
|
* // Your custom logic here
|
|
@@ -283,7 +329,7 @@
|
|
|
283
329
|
*
|
|
284
330
|
* @example
|
|
285
331
|
* ```tsx
|
|
286
|
-
* <TrackClick eventName="cta-clicked"
|
|
332
|
+
* <TrackClick eventName="cta-clicked" _value={100}>
|
|
287
333
|
* <button>Get Started</button>
|
|
288
334
|
* </TrackClick>
|
|
289
335
|
* ```
|
|
@@ -342,7 +388,7 @@
|
|
|
342
388
|
*
|
|
343
389
|
* @example
|
|
344
390
|
* ```tsx
|
|
345
|
-
* <TrackVisible eventName="section-viewed"
|
|
391
|
+
* <TrackVisible eventName="section-viewed" _value={1}>
|
|
346
392
|
* <HeroSection />
|
|
347
393
|
* </TrackVisible>
|
|
348
394
|
* ```
|
|
@@ -408,5 +454,5 @@
|
|
|
408
454
|
exports.useTrackOnVisible = useTrackOnVisible;
|
|
409
455
|
|
|
410
456
|
}));
|
|
411
|
-
/* Copyright
|
|
457
|
+
/* Copyright 2026 - Ryan Hefner <hi@ryanhefner.com> (https://www.ryanhefner.com) */
|
|
412
458
|
//# sourceMappingURL=react-fathom.js.map
|
package/dist/react-fathom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-fathom.js","sources":["../src/FathomContext.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/FathomProvider.tsx","../src/hooks/useFathom.ts","../src/hooks/useTrackOnMount.ts","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../src/hooks/useTrackOnClick.ts","../src/hooks/useTrackOnVisible.ts","../src/components/TrackClick.tsx","../src/components/TrackPageview.tsx","../src/components/TrackVisible.tsx"],"sourcesContent":["import { createContext } from 'react'\n\nimport type { FathomContextInterface } from './types'\n\nexport const FathomContext = createContext<Partial<FathomContextInterface>>({})\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","'use client'\n\nimport React, { useCallback, useContext, useEffect, useMemo } from 'react'\n\nimport * as Fathom from 'fathom-client'\nimport type { EventOptions, LoadOptions, PageViewOptions } from 'fathom-client'\n\nimport { FathomContext } from './FathomContext'\nimport type { FathomProviderProps } from './types'\n\nconst FathomProvider: React.FC<FathomProviderProps> = ({\n children,\n client: providedClient,\n clientOptions,\n siteId,\n defaultPageviewOptions: providedDefaultPageviewOptions,\n defaultEventOptions: providedDefaultEventOptions,\n}) => {\n // Read parent context if it exists\n const parentContext = useContext(FathomContext)\n\n // Use provided client or fall back to parent client or default Fathom\n const client = useMemo(\n () => providedClient ?? parentContext.client ?? Fathom,\n [providedClient, parentContext.client],\n )\n\n // Merge defaultPageviewOptions: provided > parent > undefined\n const defaultPageviewOptions = useMemo(\n () =>\n providedDefaultPageviewOptions ?? parentContext.defaultPageviewOptions,\n [providedDefaultPageviewOptions, parentContext.defaultPageviewOptions],\n )\n\n // Merge defaultEventOptions: provided > parent > undefined\n const defaultEventOptions = useMemo(\n () => providedDefaultEventOptions ?? parentContext.defaultEventOptions,\n [providedDefaultEventOptions, parentContext.defaultEventOptions],\n )\n\n const blockTrackingForMe = useCallback(() => {\n client.blockTrackingForMe()\n }, [client])\n\n const enableTrackingForMe = useCallback(() => {\n client.enableTrackingForMe()\n }, [client])\n\n const isTrackingEnabled = useCallback(() => {\n return client.isTrackingEnabled() ?? false\n }, [client])\n\n const load = useCallback(\n (siteId: string, clientOptions?: LoadOptions) => {\n client.load(siteId, clientOptions)\n },\n [client],\n )\n\n const setSite = useCallback(\n (siteId: string) => {\n client.setSite(siteId)\n },\n [client],\n )\n\n const trackEvent = useCallback(\n (category: string, options?: EventOptions) => {\n client.trackEvent(category, {\n ...defaultEventOptions,\n ...options,\n })\n },\n [client, defaultEventOptions],\n )\n\n const trackPageview = useCallback(\n (options?: PageViewOptions) => {\n client.trackPageview({\n ...defaultPageviewOptions,\n ...options,\n })\n },\n [client, defaultPageviewOptions],\n )\n\n const trackGoal = useCallback(\n (code: string, cents: number) => {\n client.trackGoal(code, cents)\n },\n [client],\n )\n\n useEffect(() => {\n if (siteId !== undefined) {\n load(siteId, clientOptions)\n }\n }, [clientOptions, load, siteId])\n\n return (\n <FathomContext.Provider\n value={{\n blockTrackingForMe,\n enableTrackingForMe,\n isTrackingEnabled,\n load,\n setSite,\n trackEvent,\n trackGoal,\n trackPageview,\n client,\n defaultPageviewOptions,\n defaultEventOptions,\n }}\n >\n {children}\n </FathomContext.Provider>\n )\n}\n\nFathomProvider.displayName = 'FathomProvider'\n\nexport { FathomProvider }\n","import { useContext } from 'react'\n\nimport { FathomContext } from '../FathomContext'\nimport type { FathomContextInterface } from '../types'\n\nexport const useFathom = (): FathomContextInterface => {\n const context = useContext(FathomContext)\n return context\n}\n\nuseFathom.displayName = 'useFathom'\n","import { useEffect } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\n/**\n * Hook to track a pageview when a component mounts\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * useTrackOnMount({ url: '/custom-page' })\n * return <div>Content</div>\n * }\n * ```\n */\nexport const useTrackOnMount = (options?: PageViewOptions) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(options)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n}\n","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","import { useCallback } from 'react'\nimport type { MouseEvent } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnClickOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the click event as a parameter\n */\n callback?: (e?: MouseEvent) => void\n}\n\n/**\n * Hook that returns a click handler function that tracks an event\n *\n * @example\n * ```tsx\n * function Button() {\n * const handleClick = useTrackOnClick({\n * eventName: 'button-click',\n * id: 'signup-button',\n * callback: (e) => {\n * console.log('Button clicked!')\n * // Your custom logic here\n * },\n * })\n *\n * return <button onClick={handleClick}>Sign Up</button>\n * }\n * ```\n */\nexport const useTrackOnClick = (\n options: UseTrackOnClickOptions,\n): ((e?: MouseEvent) => void) => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n preventDefault = false,\n callback,\n ...eventOptions\n } = options\n\n return useCallback(\n (e?: MouseEvent) => {\n if (preventDefault && e) {\n e.preventDefault()\n }\n trackEvent?.(eventName, eventOptions)\n callback?.(e)\n },\n [eventName, preventDefault, trackEvent, eventOptions, callback],\n )\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnVisibleOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the intersection observer entry as a parameter\n */\n callback?: (entry: IntersectionObserverEntry) => void\n}\n\n/**\n * Hook to track an event when an element becomes visible (using Intersection Observer)\n *\n * @example\n * ```tsx\n * function Section() {\n * const ref = useTrackOnVisible({\n * eventName: 'section-viewed',\n * section: 'hero',\n * callback: (entry) => {\n * console.log('Section is visible!', entry.isIntersecting)\n * // Your custom logic here\n * },\n * })\n *\n * return <section ref={ref}>Content</section>\n * }\n * ```\n */\nexport const useTrackOnVisible = (\n options: UseTrackOnVisibleOptions,\n): RefObject<HTMLElement | null> => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n observerOptions,\n trackOnce = true,\n callback,\n ...eventOptions\n } = options\n const ref = useRef<HTMLElement | null>(null)\n const hasTracked = useRef(false)\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n callback?.(entry)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [\n eventName,\n eventOptions,\n observerOptions,\n trackOnce,\n trackEvent,\n callback,\n ])\n\n return ref\n}\n","import React from 'react'\nimport type { ElementType, MouseEvent, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackClickProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to wrap\n */\n children: ReactNode\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Custom onClick handler (will be called before tracking)\n */\n onClick?: (e: MouseEvent) => void\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component wrapper that automatically tracks clicks on its children\n *\n * @example\n * ```tsx\n * <TrackClick eventName=\"cta-clicked\" id=\"hero-cta\">\n * <button>Get Started</button>\n * </TrackClick>\n * ```\n */\nexport const TrackClick: React.FC<TrackClickProps> = ({\n eventName,\n children,\n preventDefault = false,\n onClick,\n as: Component = 'div',\n ...eventOptions\n}) => {\n const { trackEvent } = useFathom()\n\n const handleClick = (e: MouseEvent) => {\n if (preventDefault) {\n e.preventDefault()\n }\n onClick?.(e)\n trackEvent?.(eventName, eventOptions)\n }\n\n return <Component onClick={handleClick}>{children}</Component>\n}\n","import React, { useEffect } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackPageviewProps extends PageViewOptions {\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n}\n\n/**\n * Component that tracks a pageview when it mounts\n *\n * @example\n * ```tsx\n * <TrackPageview url=\"/custom-page\">\n * <div>Page content</div>\n * </TrackPageview>\n * ```\n */\nexport const TrackPageview: React.FC<TrackPageviewProps> = ({\n children,\n ...pageviewOptions\n}) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(pageviewOptions)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <>{children}</>\n}\n","import React, { useEffect, useRef, forwardRef, useCallback } from 'react'\nimport type { ElementType, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackVisibleProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component that tracks an event when it becomes visible in the viewport\n *\n * @example\n * ```tsx\n * <TrackVisible eventName=\"section-viewed\" section=\"hero\">\n * <HeroSection />\n * </TrackVisible>\n * ```\n */\nexport const TrackVisible = forwardRef<HTMLDivElement, TrackVisibleProps>(\n function TrackVisible(\n {\n eventName,\n children,\n observerOptions,\n trackOnce = true,\n as: Component = 'div',\n ...eventOptions\n },\n forwardedRef,\n ) {\n const { trackEvent } = useFathom()\n const internalRef = useRef<HTMLDivElement | null>(null)\n const hasTracked = useRef(false)\n\n // Callback ref that handles both forwarded and internal refs\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n internalRef.current = node\n\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef !== null && forwardedRef !== undefined) {\n forwardedRef.current = node\n }\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n const element = internalRef.current\n if (element === null) {\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [eventName, eventOptions, observerOptions, trackOnce, trackEvent])\n\n return <Component ref={setRef}>{children}</Component>\n },\n)\n"],"names":["FathomContext","createContext","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","FathomProvider","_ref","children","providedClient","client","clientOptions","siteId","providedDefaultPageviewOptions","defaultPageviewOptions","providedDefaultEventOptions","defaultEventOptions","parentContext","useContext","useMemo","_ref2","Fathom","blockTrackingForMe","useCallback","enableTrackingForMe","isTrackingEnabled","_client$isTrackingEna","load","setSite","trackEvent","category","options","trackPageview","trackGoal","code","cents","useEffect","undefined","React","createElement","Provider","value","displayName","useFathom","context","useTrackOnMount","_useFathom","objectWithoutPropertiesLoose","useTrackOnClick","eventName","_options$preventDefau","preventDefault","callback","eventOptions","_objectWithoutProperties","_excluded","useTrackOnVisible","observerOptions","_options$trackOnce","trackOnce","ref","useRef","hasTracked","element","current","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","observe","disconnect","TrackClick","_ref$preventDefault","onClick","_ref$as","as","Component","handleClick","TrackPageview","pageviewOptions","Fragment","TrackVisible","forwardRef","forwardedRef","_ref$trackOnce","internalRef","setRef","node"],"mappings":"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","x_google_ignoreList":[1,2,3,4,8,9]}
|
|
1
|
+
{"version":3,"file":"react-fathom.js","sources":["../src/FathomContext.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/FathomProvider.tsx","../src/hooks/useFathom.ts","../src/hooks/useTrackOnMount.ts","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../src/hooks/useTrackOnClick.ts","../src/hooks/useTrackOnVisible.ts","../src/components/TrackClick.tsx","../src/components/TrackPageview.tsx","../src/components/TrackVisible.tsx"],"sourcesContent":["import { createContext } from 'react'\n\nimport type { FathomContextInterface } from './types'\n\nconst warnMissingProvider = (methodName: string) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[react-fathom] ${methodName}() called without a FathomProvider. ` +\n 'Wrap your app with <FathomProvider> to enable analytics tracking.',\n )\n }\n}\n\n/**\n * Default context value with stub methods that warn in development.\n * These allow useFathom() to be called without optional chaining,\n * while still informing developers when the provider is missing.\n */\nconst defaultContextValue: FathomContextInterface = {\n blockTrackingForMe: () => warnMissingProvider('blockTrackingForMe'),\n enableTrackingForMe: () => warnMissingProvider('enableTrackingForMe'),\n isTrackingEnabled: () => {\n warnMissingProvider('isTrackingEnabled')\n return false\n },\n load: () => warnMissingProvider('load'),\n setSite: () => warnMissingProvider('setSite'),\n trackPageview: () => warnMissingProvider('trackPageview'),\n trackEvent: () => warnMissingProvider('trackEvent'),\n trackGoal: () => warnMissingProvider('trackGoal'),\n}\n\nexport const FathomContext =\n createContext<FathomContextInterface>(defaultContextValue)\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","'use client'\n\nimport React, { useCallback, useContext, useEffect, useMemo } from 'react'\n\nimport * as Fathom from 'fathom-client'\nimport type { EventOptions, LoadOptions, PageViewOptions } from 'fathom-client'\n\nimport { FathomContext } from './FathomContext'\nimport type { FathomProviderProps } from './types'\n\nconst FathomProvider: React.FC<FathomProviderProps> = ({\n children,\n client: providedClient,\n clientRef,\n clientOptions,\n siteId,\n defaultPageviewOptions: providedDefaultPageviewOptions,\n defaultEventOptions: providedDefaultEventOptions,\n}) => {\n // Read parent context if it exists\n const parentContext = useContext(FathomContext)\n\n // Use provided client or fall back to parent client or default Fathom\n const client = useMemo(\n () => providedClient ?? parentContext.client ?? Fathom,\n [providedClient, parentContext.client],\n )\n\n // Merge defaultPageviewOptions: provided > parent > undefined\n const defaultPageviewOptions = useMemo(\n () =>\n providedDefaultPageviewOptions ?? parentContext.defaultPageviewOptions,\n [providedDefaultPageviewOptions, parentContext.defaultPageviewOptions],\n )\n\n // Merge defaultEventOptions: provided > parent > undefined\n const defaultEventOptions = useMemo(\n () => providedDefaultEventOptions ?? parentContext.defaultEventOptions,\n [providedDefaultEventOptions, parentContext.defaultEventOptions],\n )\n\n const blockTrackingForMe = useCallback(() => {\n client.blockTrackingForMe()\n }, [client])\n\n const enableTrackingForMe = useCallback(() => {\n client.enableTrackingForMe()\n }, [client])\n\n const isTrackingEnabled = useCallback(() => {\n return client.isTrackingEnabled() ?? false\n }, [client])\n\n const load = useCallback(\n (siteId: string, clientOptions?: LoadOptions) => {\n client.load(siteId, clientOptions)\n },\n [client],\n )\n\n const setSite = useCallback(\n (siteId: string) => {\n client.setSite(siteId)\n },\n [client],\n )\n\n const trackEvent = useCallback(\n (eventName: string, options?: EventOptions) => {\n client.trackEvent(eventName, {\n ...defaultEventOptions,\n ...options,\n })\n },\n [client, defaultEventOptions],\n )\n\n const trackPageview = useCallback(\n (options?: PageViewOptions) => {\n client.trackPageview({\n ...defaultPageviewOptions,\n ...options,\n })\n },\n [client, defaultPageviewOptions],\n )\n\n const trackGoal = useCallback(\n (code: string, cents: number) => {\n client.trackGoal(code, cents)\n },\n [client],\n )\n\n useEffect(() => {\n if (siteId !== undefined) {\n load(siteId, clientOptions)\n }\n }, [clientOptions, load, siteId])\n\n // Populate the clientRef so the parent component can access the client\n useEffect(() => {\n if (clientRef) {\n clientRef.current = client\n }\n }, [client, clientRef])\n\n return (\n <FathomContext.Provider\n value={{\n blockTrackingForMe,\n enableTrackingForMe,\n isTrackingEnabled,\n load,\n setSite,\n trackEvent,\n trackGoal,\n trackPageview,\n client,\n defaultPageviewOptions,\n defaultEventOptions,\n }}\n >\n {children}\n </FathomContext.Provider>\n )\n}\n\nFathomProvider.displayName = 'FathomProvider'\n\nexport { FathomProvider }\n","import { useContext } from 'react'\n\nimport { FathomContext } from '../FathomContext'\nimport type { FathomContextInterface } from '../types'\n\nexport const useFathom = (): FathomContextInterface => {\n const context = useContext(FathomContext)\n return context\n}\n\nuseFathom.displayName = 'useFathom'\n","import { useEffect } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\n/**\n * Hook to track a pageview when a component mounts\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * useTrackOnMount({ url: '/custom-page' })\n * return <div>Content</div>\n * }\n * ```\n */\nexport const useTrackOnMount = (options?: PageViewOptions) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(options)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n}\n","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","import { useCallback } from 'react'\nimport type { MouseEvent } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnClickOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the click event as a parameter\n */\n callback?: (e?: MouseEvent) => void\n}\n\n/**\n * Hook that returns a click handler function that tracks an event\n *\n * @example\n * ```tsx\n * function Button() {\n * const handleClick = useTrackOnClick({\n * eventName: 'button-click',\n * _value: 100, // Optional: value in cents\n * callback: (e) => {\n * console.log('Button clicked!')\n * // Your custom logic here\n * },\n * })\n *\n * return <button onClick={handleClick}>Sign Up</button>\n * }\n * ```\n */\nexport const useTrackOnClick = (\n options: UseTrackOnClickOptions,\n): ((e?: MouseEvent) => void) => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n preventDefault = false,\n callback,\n ...eventOptions\n } = options\n\n return useCallback(\n (e?: MouseEvent) => {\n if (preventDefault && e) {\n e.preventDefault()\n }\n trackEvent?.(eventName, eventOptions)\n callback?.(e)\n },\n [eventName, preventDefault, trackEvent, eventOptions, callback],\n )\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnVisibleOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the intersection observer entry as a parameter\n */\n callback?: (entry: IntersectionObserverEntry) => void\n}\n\n/**\n * Hook to track an event when an element becomes visible (using Intersection Observer)\n *\n * @example\n * ```tsx\n * function Section() {\n * const ref = useTrackOnVisible({\n * eventName: 'section-viewed',\n * _value: 1, // Optional: value in cents\n * callback: (entry) => {\n * console.log('Section is visible!', entry.isIntersecting)\n * // Your custom logic here\n * },\n * })\n *\n * return <section ref={ref}>Content</section>\n * }\n * ```\n */\nexport const useTrackOnVisible = (\n options: UseTrackOnVisibleOptions,\n): RefObject<HTMLElement | null> => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n observerOptions,\n trackOnce = true,\n callback,\n ...eventOptions\n } = options\n const ref = useRef<HTMLElement | null>(null)\n const hasTracked = useRef(false)\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n callback?.(entry)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [\n eventName,\n eventOptions,\n observerOptions,\n trackOnce,\n trackEvent,\n callback,\n ])\n\n return ref\n}\n","import React from 'react'\nimport type { ElementType, MouseEvent, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackClickProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to wrap\n */\n children: ReactNode\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Custom onClick handler (will be called before tracking)\n */\n onClick?: (e: MouseEvent) => void\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component wrapper that automatically tracks clicks on its children\n *\n * @example\n * ```tsx\n * <TrackClick eventName=\"cta-clicked\" _value={100}>\n * <button>Get Started</button>\n * </TrackClick>\n * ```\n */\nexport const TrackClick: React.FC<TrackClickProps> = ({\n eventName,\n children,\n preventDefault = false,\n onClick,\n as: Component = 'div',\n ...eventOptions\n}) => {\n const { trackEvent } = useFathom()\n\n const handleClick = (e: MouseEvent) => {\n if (preventDefault) {\n e.preventDefault()\n }\n onClick?.(e)\n trackEvent?.(eventName, eventOptions)\n }\n\n return <Component onClick={handleClick}>{children}</Component>\n}\n","import React, { useEffect } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackPageviewProps extends PageViewOptions {\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n}\n\n/**\n * Component that tracks a pageview when it mounts\n *\n * @example\n * ```tsx\n * <TrackPageview url=\"/custom-page\">\n * <div>Page content</div>\n * </TrackPageview>\n * ```\n */\nexport const TrackPageview: React.FC<TrackPageviewProps> = ({\n children,\n ...pageviewOptions\n}) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(pageviewOptions)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <>{children}</>\n}\n","import React, { useEffect, useRef, forwardRef, useCallback } from 'react'\nimport type { ElementType, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackVisibleProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component that tracks an event when it becomes visible in the viewport\n *\n * @example\n * ```tsx\n * <TrackVisible eventName=\"section-viewed\" _value={1}>\n * <HeroSection />\n * </TrackVisible>\n * ```\n */\nexport const TrackVisible = forwardRef<HTMLDivElement, TrackVisibleProps>(\n function TrackVisible(\n {\n eventName,\n children,\n observerOptions,\n trackOnce = true,\n as: Component = 'div',\n ...eventOptions\n },\n forwardedRef,\n ) {\n const { trackEvent } = useFathom()\n const internalRef = useRef<HTMLDivElement | null>(null)\n const hasTracked = useRef(false)\n\n // Callback ref that handles both forwarded and internal refs\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n internalRef.current = node\n\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef !== null && forwardedRef !== undefined) {\n forwardedRef.current = node\n }\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n const element = internalRef.current\n if (element === null) {\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [eventName, eventOptions, observerOptions, trackOnce, trackEvent])\n\n return <Component ref={setRef}>{children}</Component>\n },\n)\n"],"names":["warnMissingProvider","methodName","process","env","NODE_ENV","console","warn","concat","defaultContextValue","blockTrackingForMe","enableTrackingForMe","isTrackingEnabled","load","setSite","trackPageview","trackEvent","trackGoal","FathomContext","createContext","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","FathomProvider","_ref","children","providedClient","client","clientRef","clientOptions","siteId","providedDefaultPageviewOptions","defaultPageviewOptions","providedDefaultEventOptions","defaultEventOptions","parentContext","useContext","useMemo","_ref2","Fathom","useCallback","_client$isTrackingEna","eventName","options","code","cents","useEffect","undefined","current","React","createElement","Provider","value","displayName","useFathom","context","useTrackOnMount","_useFathom","objectWithoutPropertiesLoose","useTrackOnClick","_options$preventDefau","preventDefault","callback","eventOptions","_objectWithoutProperties","_excluded","useTrackOnVisible","observerOptions","_options$trackOnce","trackOnce","ref","useRef","hasTracked","element","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","observe","disconnect","TrackClick","_ref$preventDefault","onClick","_ref$as","as","Component","handleClick","TrackPageview","pageviewOptions","Fragment","TrackVisible","forwardRef","forwardedRef","_ref$trackOnce","internalRef","setRef","node"],"mappings":"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","x_google_ignoreList":[1,2,3,4,8,9]}
|
package/dist/react-fathom.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! react-fathom - 0.
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("fathom-client")):"function"==typeof define&&define.amd?define(["exports","react","fathom-client"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["react-fathom"]={},e.React,e.Fathom)}(this,function(e,t,n){"use strict";function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,Object.freeze(t)}var c=r(n),o=
|
|
1
|
+
/*! react-fathom - 0.2.0 !*/
|
|
2
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("fathom-client")):"function"==typeof define&&define.amd?define(["exports","react","fathom-client"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["react-fathom"]={},e.React,e.Fathom)}(this,function(e,t,n){"use strict";function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,Object.freeze(t)}var c=r(n),o=function(e){"production"!==process.env.NODE_ENV&&console.warn("[react-fathom] ".concat(e,"() called without a FathomProvider. ")+"Wrap your app with <FathomProvider> to enable analytics tracking.")},i={blockTrackingForMe:function(){return o("blockTrackingForMe")},enableTrackingForMe:function(){return o("enableTrackingForMe")},isTrackingEnabled:function(){return o("isTrackingEnabled"),!1},load:function(){return o("load")},setSite:function(){return o("setSite")},trackPageview:function(){return o("trackPageview")},trackEvent:function(){return o("trackEvent")},trackGoal:function(){return o("trackGoal")}},a=t.createContext(i);function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function l(e){var t=function(e,t){if("object"!=u(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t);if("object"!=u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==u(t)?t:t+""}function f(e,t,n){return(t=l(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var v=function(e){var n=e.children,r=e.client,o=e.clientRef,i=e.clientOptions,u=e.siteId,l=e.defaultPageviewOptions,f=e.defaultEventOptions,s=t.useContext(a),v=t.useMemo(function(){var e;return null!==(e=null!=r?r:s.client)&&void 0!==e?e:c},[r,s.client]),p=t.useMemo(function(){return null!=l?l:s.defaultPageviewOptions},[l,s.defaultPageviewOptions]),O=t.useMemo(function(){return null!=f?f:s.defaultEventOptions},[f,s.defaultEventOptions]),d=t.useCallback(function(){v.blockTrackingForMe()},[v]),k=t.useCallback(function(){v.enableTrackingForMe()},[v]),y=t.useCallback(function(){var e;return null!==(e=v.isTrackingEnabled())&&void 0!==e&&e},[v]),g=t.useCallback(function(e,t){v.load(e,t)},[v]),m=t.useCallback(function(e){v.setSite(e)},[v]),P=t.useCallback(function(e,t){v.trackEvent(e,b(b({},O),t))},[v,O]),h=t.useCallback(function(e){v.trackPageview(b(b({},p),e))},[v,p]),j=t.useCallback(function(e,t){v.trackGoal(e,t)},[v]);return t.useEffect(function(){void 0!==u&&g(u,i)},[i,g,u]),t.useEffect(function(){o&&(o.current=v)},[v,o]),t.createElement(a.Provider,{value:{blockTrackingForMe:d,enableTrackingForMe:k,isTrackingEnabled:y,load:g,setSite:m,trackEvent:P,trackGoal:j,trackPageview:h,client:v,defaultPageviewOptions:p,defaultEventOptions:O}},n)};v.displayName="FathomProvider";var p=function(){return t.useContext(a)};p.displayName="useFathom";function O(e,t){if(null==e)return{};var n,r,c=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(c[n]=e[n])}return c}var d=["eventName","preventDefault","callback"],k=["eventName","observerOptions","trackOnce","callback"];function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}var g=["eventName","children","preventDefault","onClick","as"],m=["children"],P=["eventName","children","observerOptions","trackOnce","as"];function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}var j=t.forwardRef(function(e,n){var r=e.eventName,c=e.children,o=e.observerOptions,i=e.trackOnce,a=void 0===i||i,u=e.as,l=void 0===u?"div":u,s=O(e,P),b=p().trackEvent,v=t.useRef(null),d=t.useRef(!1),k=t.useCallback(function(e){v.current=e,"function"==typeof n?n(e):null!=n&&(n.current=e)},[n]);return t.useEffect(function(){var e=v.current;if(null!==e){var t=new IntersectionObserver(function(e){e.forEach(function(e){e.isIntersecting&&(a&&d.current||(null==b||b(r,s),d.current=!0))})},function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?h(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({threshold:.1},o));return t.observe(e),function(){t.disconnect()}}},[r,s,o,a,b]),t.createElement(l,{ref:k},c)});e.FathomContext=a,e.FathomProvider=v,e.TrackClick=function(e){var n=e.eventName,r=e.children,c=e.preventDefault,o=void 0!==c&&c,i=e.onClick,a=e.as,u=void 0===a?"div":a,l=O(e,g),f=p().trackEvent;return t.createElement(u,{onClick:function(e){o&&e.preventDefault(),null==i||i(e),null==f||f(n,l)}},r)},e.TrackPageview=function(e){var n=e.children,r=O(e,m),c=p().trackPageview;return t.useEffect(function(){null==c||c(r)},[]),t.createElement(t.Fragment,null,n)},e.TrackVisible=j,e.useFathom=p,e.useTrackOnClick=function(e){var n=p().trackEvent,r=e.eventName,c=e.preventDefault,o=void 0!==c&&c,i=e.callback,a=O(e,d);return t.useCallback(function(e){o&&e&&e.preventDefault(),null==n||n(r,a),null==i||i(e)},[r,o,n,a,i])},e.useTrackOnMount=function(e){var n=p().trackPageview;t.useEffect(function(){null==n||n(e)},[])},e.useTrackOnVisible=function(e){var n=p().trackEvent,r=e.eventName,c=e.observerOptions,o=e.trackOnce,i=void 0===o||o,a=e.callback,u=O(e,k),l=t.useRef(null),s=t.useRef(!1);return t.useEffect(function(){var e=l.current;if(e){var t=new IntersectionObserver(function(e){e.forEach(function(e){e.isIntersecting&&(i&&s.current||(null==n||n(r,u),null==a||a(e),s.current=!0))})},function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?y(Object(n),!0).forEach(function(t){f(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}({threshold:.1},c));return t.observe(e),function(){t.disconnect()}}},[r,u,c,i,n,a]),l}});
|
|
3
3
|
//# sourceMappingURL=react-fathom.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-fathom.min.js","sources":["../src/FathomContext.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/FathomProvider.tsx","../src/hooks/useFathom.ts","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../src/components/TrackVisible.tsx","../src/components/TrackClick.tsx","../src/components/TrackPageview.tsx","../src/hooks/useTrackOnClick.ts","../src/hooks/useTrackOnMount.ts","../src/hooks/useTrackOnVisible.ts"],"sourcesContent":["import { createContext } from 'react'\n\nimport type { FathomContextInterface } from './types'\n\nexport const FathomContext = createContext<Partial<FathomContextInterface>>({})\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","'use client'\n\nimport React, { useCallback, useContext, useEffect, useMemo } from 'react'\n\nimport * as Fathom from 'fathom-client'\nimport type { EventOptions, LoadOptions, PageViewOptions } from 'fathom-client'\n\nimport { FathomContext } from './FathomContext'\nimport type { FathomProviderProps } from './types'\n\nconst FathomProvider: React.FC<FathomProviderProps> = ({\n children,\n client: providedClient,\n clientOptions,\n siteId,\n defaultPageviewOptions: providedDefaultPageviewOptions,\n defaultEventOptions: providedDefaultEventOptions,\n}) => {\n // Read parent context if it exists\n const parentContext = useContext(FathomContext)\n\n // Use provided client or fall back to parent client or default Fathom\n const client = useMemo(\n () => providedClient ?? parentContext.client ?? Fathom,\n [providedClient, parentContext.client],\n )\n\n // Merge defaultPageviewOptions: provided > parent > undefined\n const defaultPageviewOptions = useMemo(\n () =>\n providedDefaultPageviewOptions ?? parentContext.defaultPageviewOptions,\n [providedDefaultPageviewOptions, parentContext.defaultPageviewOptions],\n )\n\n // Merge defaultEventOptions: provided > parent > undefined\n const defaultEventOptions = useMemo(\n () => providedDefaultEventOptions ?? parentContext.defaultEventOptions,\n [providedDefaultEventOptions, parentContext.defaultEventOptions],\n )\n\n const blockTrackingForMe = useCallback(() => {\n client.blockTrackingForMe()\n }, [client])\n\n const enableTrackingForMe = useCallback(() => {\n client.enableTrackingForMe()\n }, [client])\n\n const isTrackingEnabled = useCallback(() => {\n return client.isTrackingEnabled() ?? false\n }, [client])\n\n const load = useCallback(\n (siteId: string, clientOptions?: LoadOptions) => {\n client.load(siteId, clientOptions)\n },\n [client],\n )\n\n const setSite = useCallback(\n (siteId: string) => {\n client.setSite(siteId)\n },\n [client],\n )\n\n const trackEvent = useCallback(\n (category: string, options?: EventOptions) => {\n client.trackEvent(category, {\n ...defaultEventOptions,\n ...options,\n })\n },\n [client, defaultEventOptions],\n )\n\n const trackPageview = useCallback(\n (options?: PageViewOptions) => {\n client.trackPageview({\n ...defaultPageviewOptions,\n ...options,\n })\n },\n [client, defaultPageviewOptions],\n )\n\n const trackGoal = useCallback(\n (code: string, cents: number) => {\n client.trackGoal(code, cents)\n },\n [client],\n )\n\n useEffect(() => {\n if (siteId !== undefined) {\n load(siteId, clientOptions)\n }\n }, [clientOptions, load, siteId])\n\n return (\n <FathomContext.Provider\n value={{\n blockTrackingForMe,\n enableTrackingForMe,\n isTrackingEnabled,\n load,\n setSite,\n trackEvent,\n trackGoal,\n trackPageview,\n client,\n defaultPageviewOptions,\n defaultEventOptions,\n }}\n >\n {children}\n </FathomContext.Provider>\n )\n}\n\nFathomProvider.displayName = 'FathomProvider'\n\nexport { FathomProvider }\n","import { useContext } from 'react'\n\nimport { FathomContext } from '../FathomContext'\nimport type { FathomContextInterface } from '../types'\n\nexport const useFathom = (): FathomContextInterface => {\n const context = useContext(FathomContext)\n return context\n}\n\nuseFathom.displayName = 'useFathom'\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import React, { useEffect, useRef, forwardRef, useCallback } from 'react'\nimport type { ElementType, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackVisibleProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component that tracks an event when it becomes visible in the viewport\n *\n * @example\n * ```tsx\n * <TrackVisible eventName=\"section-viewed\" section=\"hero\">\n * <HeroSection />\n * </TrackVisible>\n * ```\n */\nexport const TrackVisible = forwardRef<HTMLDivElement, TrackVisibleProps>(\n function TrackVisible(\n {\n eventName,\n children,\n observerOptions,\n trackOnce = true,\n as: Component = 'div',\n ...eventOptions\n },\n forwardedRef,\n ) {\n const { trackEvent } = useFathom()\n const internalRef = useRef<HTMLDivElement | null>(null)\n const hasTracked = useRef(false)\n\n // Callback ref that handles both forwarded and internal refs\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n internalRef.current = node\n\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef !== null && forwardedRef !== undefined) {\n forwardedRef.current = node\n }\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n const element = internalRef.current\n if (element === null) {\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [eventName, eventOptions, observerOptions, trackOnce, trackEvent])\n\n return <Component ref={setRef}>{children}</Component>\n },\n)\n","import React from 'react'\nimport type { ElementType, MouseEvent, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackClickProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to wrap\n */\n children: ReactNode\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Custom onClick handler (will be called before tracking)\n */\n onClick?: (e: MouseEvent) => void\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component wrapper that automatically tracks clicks on its children\n *\n * @example\n * ```tsx\n * <TrackClick eventName=\"cta-clicked\" id=\"hero-cta\">\n * <button>Get Started</button>\n * </TrackClick>\n * ```\n */\nexport const TrackClick: React.FC<TrackClickProps> = ({\n eventName,\n children,\n preventDefault = false,\n onClick,\n as: Component = 'div',\n ...eventOptions\n}) => {\n const { trackEvent } = useFathom()\n\n const handleClick = (e: MouseEvent) => {\n if (preventDefault) {\n e.preventDefault()\n }\n onClick?.(e)\n trackEvent?.(eventName, eventOptions)\n }\n\n return <Component onClick={handleClick}>{children}</Component>\n}\n","import React, { useEffect } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackPageviewProps extends PageViewOptions {\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n}\n\n/**\n * Component that tracks a pageview when it mounts\n *\n * @example\n * ```tsx\n * <TrackPageview url=\"/custom-page\">\n * <div>Page content</div>\n * </TrackPageview>\n * ```\n */\nexport const TrackPageview: React.FC<TrackPageviewProps> = ({\n children,\n ...pageviewOptions\n}) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(pageviewOptions)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <>{children}</>\n}\n","import { useCallback } from 'react'\nimport type { MouseEvent } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnClickOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the click event as a parameter\n */\n callback?: (e?: MouseEvent) => void\n}\n\n/**\n * Hook that returns a click handler function that tracks an event\n *\n * @example\n * ```tsx\n * function Button() {\n * const handleClick = useTrackOnClick({\n * eventName: 'button-click',\n * id: 'signup-button',\n * callback: (e) => {\n * console.log('Button clicked!')\n * // Your custom logic here\n * },\n * })\n *\n * return <button onClick={handleClick}>Sign Up</button>\n * }\n * ```\n */\nexport const useTrackOnClick = (\n options: UseTrackOnClickOptions,\n): ((e?: MouseEvent) => void) => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n preventDefault = false,\n callback,\n ...eventOptions\n } = options\n\n return useCallback(\n (e?: MouseEvent) => {\n if (preventDefault && e) {\n e.preventDefault()\n }\n trackEvent?.(eventName, eventOptions)\n callback?.(e)\n },\n [eventName, preventDefault, trackEvent, eventOptions, callback],\n )\n}\n","import { useEffect } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\n/**\n * Hook to track a pageview when a component mounts\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * useTrackOnMount({ url: '/custom-page' })\n * return <div>Content</div>\n * }\n * ```\n */\nexport const useTrackOnMount = (options?: PageViewOptions) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(options)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnVisibleOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the intersection observer entry as a parameter\n */\n callback?: (entry: IntersectionObserverEntry) => void\n}\n\n/**\n * Hook to track an event when an element becomes visible (using Intersection Observer)\n *\n * @example\n * ```tsx\n * function Section() {\n * const ref = useTrackOnVisible({\n * eventName: 'section-viewed',\n * section: 'hero',\n * callback: (entry) => {\n * console.log('Section is visible!', entry.isIntersecting)\n * // Your custom logic here\n * },\n * })\n *\n * return <section ref={ref}>Content</section>\n * }\n * ```\n */\nexport const useTrackOnVisible = (\n options: UseTrackOnVisibleOptions,\n): RefObject<HTMLElement | null> => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n observerOptions,\n trackOnce = true,\n callback,\n ...eventOptions\n } = options\n const ref = useRef<HTMLElement | null>(null)\n const hasTracked = useRef(false)\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n callback?.(entry)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [\n eventName,\n eventOptions,\n observerOptions,\n trackOnce,\n trackEvent,\n callback,\n ])\n\n return ref\n}\n"],"names":["FathomContext","createContext","_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperty","Object","defineProperty","value","enumerable","configurable","writable","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","length","forEach","getOwnPropertyDescriptors","defineProperties","FathomProvider","_ref","children","providedClient","client","clientOptions","siteId","providedDefaultPageviewOptions","defaultPageviewOptions","providedDefaultEventOptions","defaultEventOptions","parentContext","useContext","useMemo","_ref2","Fathom","blockTrackingForMe","useCallback","enableTrackingForMe","isTrackingEnabled","_client$isTrackingEna","load","setSite","trackEvent","category","options","trackPageview","trackGoal","code","cents","useEffect","undefined","React","createElement","Provider","displayName","useFathom","_objectWithoutProperties","n","hasOwnProperty","indexOf","objectWithoutPropertiesLoose","propertyIsEnumerable","TrackVisible","forwardRef","forwardedRef","eventName","observerOptions","_ref$trackOnce","trackOnce","_ref$as","as","Component","eventOptions","_excluded","internalRef","useRef","hasTracked","setRef","node","current","element","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","observe","disconnect","ref","_ref$preventDefault","preventDefault","onClick","pageviewOptions","Fragment","_options$preventDefau","callback","_options$trackOnce"],"mappings":"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","x_google_ignoreList":[1,2,3,4,7,8]}
|
|
1
|
+
{"version":3,"file":"react-fathom.min.js","sources":["../src/FathomContext.tsx","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/FathomProvider.tsx","../src/hooks/useFathom.ts","../node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../src/components/TrackVisible.tsx","../src/components/TrackClick.tsx","../src/components/TrackPageview.tsx","../src/hooks/useTrackOnClick.ts","../src/hooks/useTrackOnMount.ts","../src/hooks/useTrackOnVisible.ts"],"sourcesContent":["import { createContext } from 'react'\n\nimport type { FathomContextInterface } from './types'\n\nconst warnMissingProvider = (methodName: string) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[react-fathom] ${methodName}() called without a FathomProvider. ` +\n 'Wrap your app with <FathomProvider> to enable analytics tracking.',\n )\n }\n}\n\n/**\n * Default context value with stub methods that warn in development.\n * These allow useFathom() to be called without optional chaining,\n * while still informing developers when the provider is missing.\n */\nconst defaultContextValue: FathomContextInterface = {\n blockTrackingForMe: () => warnMissingProvider('blockTrackingForMe'),\n enableTrackingForMe: () => warnMissingProvider('enableTrackingForMe'),\n isTrackingEnabled: () => {\n warnMissingProvider('isTrackingEnabled')\n return false\n },\n load: () => warnMissingProvider('load'),\n setSite: () => warnMissingProvider('setSite'),\n trackPageview: () => warnMissingProvider('trackPageview'),\n trackEvent: () => warnMissingProvider('trackEvent'),\n trackGoal: () => warnMissingProvider('trackGoal'),\n}\n\nexport const FathomContext =\n createContext<FathomContextInterface>(defaultContextValue)\n","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","'use client'\n\nimport React, { useCallback, useContext, useEffect, useMemo } from 'react'\n\nimport * as Fathom from 'fathom-client'\nimport type { EventOptions, LoadOptions, PageViewOptions } from 'fathom-client'\n\nimport { FathomContext } from './FathomContext'\nimport type { FathomProviderProps } from './types'\n\nconst FathomProvider: React.FC<FathomProviderProps> = ({\n children,\n client: providedClient,\n clientRef,\n clientOptions,\n siteId,\n defaultPageviewOptions: providedDefaultPageviewOptions,\n defaultEventOptions: providedDefaultEventOptions,\n}) => {\n // Read parent context if it exists\n const parentContext = useContext(FathomContext)\n\n // Use provided client or fall back to parent client or default Fathom\n const client = useMemo(\n () => providedClient ?? parentContext.client ?? Fathom,\n [providedClient, parentContext.client],\n )\n\n // Merge defaultPageviewOptions: provided > parent > undefined\n const defaultPageviewOptions = useMemo(\n () =>\n providedDefaultPageviewOptions ?? parentContext.defaultPageviewOptions,\n [providedDefaultPageviewOptions, parentContext.defaultPageviewOptions],\n )\n\n // Merge defaultEventOptions: provided > parent > undefined\n const defaultEventOptions = useMemo(\n () => providedDefaultEventOptions ?? parentContext.defaultEventOptions,\n [providedDefaultEventOptions, parentContext.defaultEventOptions],\n )\n\n const blockTrackingForMe = useCallback(() => {\n client.blockTrackingForMe()\n }, [client])\n\n const enableTrackingForMe = useCallback(() => {\n client.enableTrackingForMe()\n }, [client])\n\n const isTrackingEnabled = useCallback(() => {\n return client.isTrackingEnabled() ?? false\n }, [client])\n\n const load = useCallback(\n (siteId: string, clientOptions?: LoadOptions) => {\n client.load(siteId, clientOptions)\n },\n [client],\n )\n\n const setSite = useCallback(\n (siteId: string) => {\n client.setSite(siteId)\n },\n [client],\n )\n\n const trackEvent = useCallback(\n (eventName: string, options?: EventOptions) => {\n client.trackEvent(eventName, {\n ...defaultEventOptions,\n ...options,\n })\n },\n [client, defaultEventOptions],\n )\n\n const trackPageview = useCallback(\n (options?: PageViewOptions) => {\n client.trackPageview({\n ...defaultPageviewOptions,\n ...options,\n })\n },\n [client, defaultPageviewOptions],\n )\n\n const trackGoal = useCallback(\n (code: string, cents: number) => {\n client.trackGoal(code, cents)\n },\n [client],\n )\n\n useEffect(() => {\n if (siteId !== undefined) {\n load(siteId, clientOptions)\n }\n }, [clientOptions, load, siteId])\n\n // Populate the clientRef so the parent component can access the client\n useEffect(() => {\n if (clientRef) {\n clientRef.current = client\n }\n }, [client, clientRef])\n\n return (\n <FathomContext.Provider\n value={{\n blockTrackingForMe,\n enableTrackingForMe,\n isTrackingEnabled,\n load,\n setSite,\n trackEvent,\n trackGoal,\n trackPageview,\n client,\n defaultPageviewOptions,\n defaultEventOptions,\n }}\n >\n {children}\n </FathomContext.Provider>\n )\n}\n\nFathomProvider.displayName = 'FathomProvider'\n\nexport { FathomProvider }\n","import { useContext } from 'react'\n\nimport { FathomContext } from '../FathomContext'\nimport type { FathomContextInterface } from '../types'\n\nexport const useFathom = (): FathomContextInterface => {\n const context = useContext(FathomContext)\n return context\n}\n\nuseFathom.displayName = 'useFathom'\n","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nexport { _objectWithoutProperties as default };","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (-1 !== e.indexOf(n)) continue;\n t[n] = r[n];\n }\n return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","import React, { useEffect, useRef, forwardRef, useCallback } from 'react'\nimport type { ElementType, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackVisibleProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component that tracks an event when it becomes visible in the viewport\n *\n * @example\n * ```tsx\n * <TrackVisible eventName=\"section-viewed\" _value={1}>\n * <HeroSection />\n * </TrackVisible>\n * ```\n */\nexport const TrackVisible = forwardRef<HTMLDivElement, TrackVisibleProps>(\n function TrackVisible(\n {\n eventName,\n children,\n observerOptions,\n trackOnce = true,\n as: Component = 'div',\n ...eventOptions\n },\n forwardedRef,\n ) {\n const { trackEvent } = useFathom()\n const internalRef = useRef<HTMLDivElement | null>(null)\n const hasTracked = useRef(false)\n\n // Callback ref that handles both forwarded and internal refs\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n internalRef.current = node\n\n if (typeof forwardedRef === 'function') {\n forwardedRef(node)\n } else if (forwardedRef !== null && forwardedRef !== undefined) {\n forwardedRef.current = node\n }\n },\n [forwardedRef],\n )\n\n useEffect(() => {\n const element = internalRef.current\n if (element === null) {\n return\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [eventName, eventOptions, observerOptions, trackOnce, trackEvent])\n\n return <Component ref={setRef}>{children}</Component>\n },\n)\n","import React from 'react'\nimport type { ElementType, MouseEvent, ReactNode } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackClickProps extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Child element(s) to wrap\n */\n children: ReactNode\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Custom onClick handler (will be called before tracking)\n */\n onClick?: (e: MouseEvent) => void\n /**\n * HTML element to render as wrapper\n * @default 'div'\n */\n as?: ElementType\n}\n\n/**\n * Component wrapper that automatically tracks clicks on its children\n *\n * @example\n * ```tsx\n * <TrackClick eventName=\"cta-clicked\" _value={100}>\n * <button>Get Started</button>\n * </TrackClick>\n * ```\n */\nexport const TrackClick: React.FC<TrackClickProps> = ({\n eventName,\n children,\n preventDefault = false,\n onClick,\n as: Component = 'div',\n ...eventOptions\n}) => {\n const { trackEvent } = useFathom()\n\n const handleClick = (e: MouseEvent) => {\n if (preventDefault) {\n e.preventDefault()\n }\n onClick?.(e)\n trackEvent?.(eventName, eventOptions)\n }\n\n return <Component onClick={handleClick}>{children}</Component>\n}\n","import React, { useEffect } from 'react'\nimport type { ReactNode } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from '../hooks/useFathom'\n\nexport interface TrackPageviewProps extends PageViewOptions {\n /**\n * Child element(s) to render\n */\n children?: ReactNode\n}\n\n/**\n * Component that tracks a pageview when it mounts\n *\n * @example\n * ```tsx\n * <TrackPageview url=\"/custom-page\">\n * <div>Page content</div>\n * </TrackPageview>\n * ```\n */\nexport const TrackPageview: React.FC<TrackPageviewProps> = ({\n children,\n ...pageviewOptions\n}) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(pageviewOptions)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <>{children}</>\n}\n","import { useCallback } from 'react'\nimport type { MouseEvent } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnClickOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Whether to prevent default behavior\n * @default false\n */\n preventDefault?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the click event as a parameter\n */\n callback?: (e?: MouseEvent) => void\n}\n\n/**\n * Hook that returns a click handler function that tracks an event\n *\n * @example\n * ```tsx\n * function Button() {\n * const handleClick = useTrackOnClick({\n * eventName: 'button-click',\n * _value: 100, // Optional: value in cents\n * callback: (e) => {\n * console.log('Button clicked!')\n * // Your custom logic here\n * },\n * })\n *\n * return <button onClick={handleClick}>Sign Up</button>\n * }\n * ```\n */\nexport const useTrackOnClick = (\n options: UseTrackOnClickOptions,\n): ((e?: MouseEvent) => void) => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n preventDefault = false,\n callback,\n ...eventOptions\n } = options\n\n return useCallback(\n (e?: MouseEvent) => {\n if (preventDefault && e) {\n e.preventDefault()\n }\n trackEvent?.(eventName, eventOptions)\n callback?.(e)\n },\n [eventName, preventDefault, trackEvent, eventOptions, callback],\n )\n}\n","import { useEffect } from 'react'\n\nimport type { PageViewOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\n/**\n * Hook to track a pageview when a component mounts\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * useTrackOnMount({ url: '/custom-page' })\n * return <div>Content</div>\n * }\n * ```\n */\nexport const useTrackOnMount = (options?: PageViewOptions) => {\n const { trackPageview } = useFathom()\n\n useEffect(() => {\n trackPageview?.(options)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n}\n","import { useEffect, useRef } from 'react'\nimport type { RefObject } from 'react'\n\nimport type { EventOptions } from 'fathom-client'\n\nimport { useFathom } from './useFathom'\n\nexport interface UseTrackOnVisibleOptions extends EventOptions {\n /**\n * Event name to track\n */\n eventName: string\n /**\n * Intersection observer options\n */\n observerOptions?: IntersectionObserverInit\n /**\n * Whether to track only once or every time it becomes visible\n * @default true\n */\n trackOnce?: boolean\n /**\n * Optional callback function to run after tracking\n * Receives the intersection observer entry as a parameter\n */\n callback?: (entry: IntersectionObserverEntry) => void\n}\n\n/**\n * Hook to track an event when an element becomes visible (using Intersection Observer)\n *\n * @example\n * ```tsx\n * function Section() {\n * const ref = useTrackOnVisible({\n * eventName: 'section-viewed',\n * _value: 1, // Optional: value in cents\n * callback: (entry) => {\n * console.log('Section is visible!', entry.isIntersecting)\n * // Your custom logic here\n * },\n * })\n *\n * return <section ref={ref}>Content</section>\n * }\n * ```\n */\nexport const useTrackOnVisible = (\n options: UseTrackOnVisibleOptions,\n): RefObject<HTMLElement | null> => {\n const { trackEvent } = useFathom()\n const {\n eventName,\n observerOptions,\n trackOnce = true,\n callback,\n ...eventOptions\n } = options\n const ref = useRef<HTMLElement | null>(null)\n const hasTracked = useRef(false)\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n if (!trackOnce || !hasTracked.current) {\n trackEvent?.(eventName, eventOptions)\n callback?.(entry)\n hasTracked.current = true\n }\n }\n })\n },\n {\n threshold: 0.1,\n ...observerOptions,\n },\n )\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n }\n }, [\n eventName,\n eventOptions,\n observerOptions,\n trackOnce,\n trackEvent,\n callback,\n ])\n\n return ref\n}\n"],"names":["warnMissingProvider","methodName","process","env","NODE_ENV","console","warn","concat","defaultContextValue","blockTrackingForMe","enableTrackingForMe","isTrackingEnabled","load","setSite","trackPageview","trackEvent","trackGoal","FathomContext","createContext","_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","call","TypeError","String","Number","_defineProperty","Object","defineProperty","value","enumerable","configurable","writable","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","length","forEach","getOwnPropertyDescriptors","defineProperties","FathomProvider","_ref","children","providedClient","client","clientRef","clientOptions","siteId","providedDefaultPageviewOptions","defaultPageviewOptions","providedDefaultEventOptions","defaultEventOptions","parentContext","useContext","useMemo","_ref2","Fathom","useCallback","_client$isTrackingEna","eventName","options","code","cents","useEffect","undefined","current","React","createElement","Provider","displayName","useFathom","_objectWithoutProperties","n","hasOwnProperty","indexOf","objectWithoutPropertiesLoose","propertyIsEnumerable","TrackVisible","forwardRef","forwardedRef","observerOptions","_ref$trackOnce","trackOnce","_ref$as","as","Component","eventOptions","_excluded","internalRef","useRef","hasTracked","setRef","node","element","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","observe","disconnect","ref","_ref$preventDefault","preventDefault","onClick","pageviewOptions","Fragment","_options$preventDefau","callback","_options$trackOnce"],"mappings":"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","x_google_ignoreList":[1,2,3,4,7,8]}
|
package/package.json
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-fathom",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Privacy-focused Fathom Analytics for React, Next.js, and React Native with automatic pageview tracking and TypeScript support.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fathom",
|
|
7
7
|
"fathom-analytics",
|
|
8
8
|
"analytics",
|
|
9
9
|
"react",
|
|
10
|
+
"react-native",
|
|
10
11
|
"react-hooks",
|
|
11
12
|
"nextjs",
|
|
12
13
|
"next.js",
|
|
13
14
|
"typescript",
|
|
14
15
|
"pageview",
|
|
16
|
+
"privacy-first",
|
|
17
|
+
"mobile",
|
|
15
18
|
"tracking",
|
|
16
19
|
"privacy",
|
|
17
20
|
"tree-shakeable"
|
|
@@ -85,6 +88,9 @@
|
|
|
85
88
|
"*": {
|
|
86
89
|
"next": [
|
|
87
90
|
"./types/next/index.d.ts"
|
|
91
|
+
],
|
|
92
|
+
"native": [
|
|
93
|
+
"./types/native/index.d.ts"
|
|
88
94
|
]
|
|
89
95
|
}
|
|
90
96
|
},
|
|
@@ -100,13 +106,19 @@
|
|
|
100
106
|
"import": "./dist/es/next/index.js",
|
|
101
107
|
"require": "./dist/cjs/next/index.cjs",
|
|
102
108
|
"default": "./dist/es/next/index.js"
|
|
109
|
+
},
|
|
110
|
+
"./native": {
|
|
111
|
+
"types": "./types/native/index.d.ts",
|
|
112
|
+
"import": "./dist/es/native/index.js",
|
|
113
|
+
"require": "./dist/cjs/native/index.cjs",
|
|
114
|
+
"default": "./dist/es/native/index.js"
|
|
103
115
|
}
|
|
104
116
|
},
|
|
105
117
|
"scripts": {
|
|
106
118
|
"clean": "rimraf dist types",
|
|
107
119
|
"types": "tsc",
|
|
108
120
|
"build:rollup": "rollup -c",
|
|
109
|
-
"build": "tsc && rollup -c",
|
|
121
|
+
"build": "tsc && rollup -c && node scripts/add-use-client.js",
|
|
110
122
|
"lint": "eslint .",
|
|
111
123
|
"prepare": "npm run build",
|
|
112
124
|
"prepublishOnly": "npm run build",
|
|
@@ -120,11 +132,22 @@
|
|
|
120
132
|
"fathom-client": ">=3.0.0",
|
|
121
133
|
"next": ">=10.0.0",
|
|
122
134
|
"react": ">=16.8",
|
|
123
|
-
"react-dom": ">=16.8"
|
|
135
|
+
"react-dom": ">=16.8",
|
|
136
|
+
"react-native": ">=0.60.0",
|
|
137
|
+
"react-native-webview": ">=11.0.0"
|
|
124
138
|
},
|
|
125
139
|
"peerDependenciesMeta": {
|
|
126
140
|
"next": {
|
|
127
141
|
"optional": true
|
|
142
|
+
},
|
|
143
|
+
"react-native": {
|
|
144
|
+
"optional": true
|
|
145
|
+
},
|
|
146
|
+
"react-native-webview": {
|
|
147
|
+
"optional": true
|
|
148
|
+
},
|
|
149
|
+
"fathom-client": {
|
|
150
|
+
"optional": true
|
|
128
151
|
}
|
|
129
152
|
},
|
|
130
153
|
"devDependencies": {
|
|
@@ -157,7 +180,7 @@
|
|
|
157
180
|
"eslint-plugin-react": "^7.34.1",
|
|
158
181
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
159
182
|
"fathom-client": "^3.6.0",
|
|
160
|
-
"globals": "^
|
|
183
|
+
"globals": "^17.0.0",
|
|
161
184
|
"jsdom": "^27.3.0",
|
|
162
185
|
"next": "^16.1.0",
|
|
163
186
|
"prettier": "^3.0.3",
|
package/src/FathomContext.tsx
CHANGED
|
@@ -2,4 +2,33 @@ import { createContext } from 'react'
|
|
|
2
2
|
|
|
3
3
|
import type { FathomContextInterface } from './types'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
const warnMissingProvider = (methodName: string) => {
|
|
6
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
7
|
+
console.warn(
|
|
8
|
+
`[react-fathom] ${methodName}() called without a FathomProvider. ` +
|
|
9
|
+
'Wrap your app with <FathomProvider> to enable analytics tracking.',
|
|
10
|
+
)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Default context value with stub methods that warn in development.
|
|
16
|
+
* These allow useFathom() to be called without optional chaining,
|
|
17
|
+
* while still informing developers when the provider is missing.
|
|
18
|
+
*/
|
|
19
|
+
const defaultContextValue: FathomContextInterface = {
|
|
20
|
+
blockTrackingForMe: () => warnMissingProvider('blockTrackingForMe'),
|
|
21
|
+
enableTrackingForMe: () => warnMissingProvider('enableTrackingForMe'),
|
|
22
|
+
isTrackingEnabled: () => {
|
|
23
|
+
warnMissingProvider('isTrackingEnabled')
|
|
24
|
+
return false
|
|
25
|
+
},
|
|
26
|
+
load: () => warnMissingProvider('load'),
|
|
27
|
+
setSite: () => warnMissingProvider('setSite'),
|
|
28
|
+
trackPageview: () => warnMissingProvider('trackPageview'),
|
|
29
|
+
trackEvent: () => warnMissingProvider('trackEvent'),
|
|
30
|
+
trackGoal: () => warnMissingProvider('trackGoal'),
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export const FathomContext =
|
|
34
|
+
createContext<FathomContextInterface>(defaultContextValue)
|