react-fathom 0.1.0 → 0.1.1

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 (49) hide show
  1. package/README.md +215 -52
  2. package/dist/cjs/index.cjs +3 -4
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/next/index.cjs +186 -725
  5. package/dist/cjs/next/index.cjs.map +1 -1
  6. package/dist/es/index.js +3 -4
  7. package/dist/es/index.js.map +1 -1
  8. package/dist/es/next/index.js +186 -724
  9. package/dist/es/next/index.js.map +1 -1
  10. package/dist/react-fathom.js +3 -4
  11. package/dist/react-fathom.js.map +1 -1
  12. package/dist/react-fathom.min.js +2 -2
  13. package/dist/react-fathom.min.js.map +1 -1
  14. package/package.json +15 -1
  15. package/src/FathomProvider.tsx +0 -1
  16. package/src/next/NextFathomTrackViewApp.test.tsx +265 -0
  17. package/src/next/NextFathomTrackViewApp.tsx +78 -0
  18. package/src/next/NextFathomTrackViewPages.test.tsx +222 -0
  19. package/src/next/NextFathomTrackViewPages.tsx +83 -0
  20. package/src/next/compositions/withAppRouter.test.tsx +31 -10
  21. package/src/next/compositions/withAppRouter.tsx +10 -3
  22. package/src/next/compositions/withPagesRouter.test.tsx +31 -10
  23. package/src/next/compositions/withPagesRouter.tsx +10 -3
  24. package/src/next/index.ts +3 -3
  25. package/src/next/types.ts +0 -7
  26. package/src/types.ts +0 -1
  27. package/types/FathomProvider.d.ts.map +1 -1
  28. package/types/next/NextFathomProviderApp.d.ts.map +1 -1
  29. package/types/next/NextFathomProviderPages.d.ts.map +1 -1
  30. package/types/next/NextFathomTrackViewApp.d.ts +34 -0
  31. package/types/next/NextFathomTrackViewApp.d.ts.map +1 -0
  32. package/types/next/NextFathomTrackViewPages.d.ts +30 -0
  33. package/types/next/NextFathomTrackViewPages.d.ts.map +1 -0
  34. package/types/next/compositions/withAppRouter.d.ts +1 -0
  35. package/types/next/compositions/withAppRouter.d.ts.map +1 -1
  36. package/types/next/compositions/withPagesRouter.d.ts +1 -0
  37. package/types/next/compositions/withPagesRouter.d.ts.map +1 -1
  38. package/types/next/index.d.ts +2 -3
  39. package/types/next/index.d.ts.map +1 -1
  40. package/types/next/types.d.ts +0 -6
  41. package/types/next/types.d.ts.map +1 -1
  42. package/types/types.d.ts +0 -1
  43. package/types/types.d.ts.map +1 -1
  44. package/src/next/NextFathomProvider.test.tsx +0 -131
  45. package/src/next/NextFathomProvider.tsx +0 -62
  46. package/src/next/NextFathomProviderApp.test.tsx +0 -308
  47. package/src/next/NextFathomProviderApp.tsx +0 -106
  48. package/src/next/NextFathomProviderPages.test.tsx +0 -330
  49. package/src/next/NextFathomProviderPages.tsx +0 -112
package/README.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # 😻 react-fathom
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/react-fathom?style=flat-square)](https://www.pkgstats.com/pkg:react-fathom)
4
+ [![NPM](https://img.shields.io/npm/l/react-fathom?style=flat-square)](LICENSE)
5
+ [![npm](https://img.shields.io/npm/dt/react-fathom?style=flat-square)](https://www.pkgstats.com/pkg:react-fathom)
6
+ [![Coveralls github](https://img.shields.io/coveralls/github/ryanhefner/react-fathom?style=flat-square)](https://coveralls.io/github/ryanhefner/react-fathom)
7
+ [![codecov](https://codecov.io/gh/ryanhefner/react-fathom/branch/main/graph/badge.svg)](https://codecov.io/gh/ryanhefner/react-fathom)
8
+ [![CircleCI](https://img.shields.io/circleci/build/github/ryanhefner/react-fathom?style=flat-square)](https://circleci.com/gh/ryanhefner/react-fathom)
9
+ ![Known Vulnerabilities](https://snyk.io/test/github/ryanhefner/react-fathom/badge.svg)
10
+ ![Twitter Follow](https://img.shields.io/twitter/follow/ryanhefner)
11
+
3
12
  Easily compose Fathom Analytics into your React/Next.js apps with automatic pageview tracking and full TypeScript support.
4
13
 
5
14
  ## Features
@@ -54,131 +63,285 @@ Access Fathom methods via the `useFathom` hook:
54
63
  import { useFathom } from 'react-fathom'
55
64
 
56
65
  function MyComponent() {
57
- const { trackPageview, trackEvent, load } = useFathom()
66
+ const { trackPageview, trackEvent, trackGoal, load } = useFathom()
58
67
 
59
68
  const handleClick = () => {
60
69
  trackEvent?.('button-click', { id: 'signup-button' })
61
70
  }
62
71
 
63
- return <button onClick={handleClick}>Sign Up</button>
72
+ const handlePurchase = () => {
73
+ trackGoal?.('purchase', 2999) // $29.99 in cents
74
+ }
75
+
76
+ return (
77
+ <>
78
+ <button onClick={handleClick}>Sign Up</button>
79
+ <button onClick={handlePurchase}>Buy Now</button>
80
+ </>
81
+ )
64
82
  }
65
83
  ```
66
84
 
67
- ### Next.js Pages Router
85
+ ### Convenience Hooks
68
86
 
69
- Use `PagesRouterProvider` for automatic route tracking:
87
+ Track events and pageviews with convenience hooks:
70
88
 
71
89
  ```tsx
72
- // pages/_app.tsx
73
- import { PagesRouterProvider } from 'react-fathom/next'
90
+ import {
91
+ useTrackOnMount,
92
+ useTrackOnClick,
93
+ useTrackOnVisible,
94
+ } from 'react-fathom'
95
+
96
+ function MyComponent() {
97
+ // Track pageview on mount
98
+ useTrackOnMount({ url: '/custom-page' })
99
+
100
+ // Track event on click
101
+ const handleClick = useTrackOnClick({
102
+ eventName: 'button-click',
103
+ id: 'signup-button',
104
+ callback: (e) => {
105
+ console.log('Tracked click!', e)
106
+ },
107
+ })
108
+
109
+ // Track event when element becomes visible
110
+ const ref = useTrackOnVisible({
111
+ eventName: 'section-viewed',
112
+ section: 'hero',
113
+ callback: (entry) => {
114
+ console.log('Element is visible!', entry)
115
+ },
116
+ })
74
117
 
75
- function MyApp({ Component, pageProps }) {
76
118
  return (
77
- <PagesRouterProvider siteId="YOUR_SITE_ID">
78
- <Component {...pageProps} />
79
- </PagesRouterProvider>
119
+ <>
120
+ <button onClick={handleClick}>Sign Up</button>
121
+ <div ref={ref}>This will be tracked when visible</div>
122
+ </>
80
123
  )
81
124
  }
82
-
83
- export default MyApp
84
125
  ```
85
126
 
86
- Or use the HOC:
127
+ ### Declarative Components
128
+
129
+ Use declarative components for tracking:
87
130
 
88
131
  ```tsx
89
- // pages/_app.tsx
90
- import { withPagesRouter } from 'react-fathom/next'
132
+ import { TrackPageview, TrackClick, TrackVisible } from 'react-fathom'
91
133
 
92
- function MyApp({ Component, pageProps }) {
93
- return <Component {...pageProps} />
134
+ function MyPage() {
135
+ return (
136
+ <>
137
+ {/* Track pageview on mount */}
138
+ <TrackPageview url="/custom-page">
139
+ <div>Page content</div>
140
+ </TrackPageview>
141
+
142
+ {/* Track click events */}
143
+ <TrackClick eventName="button-click" id="signup-button">
144
+ <button>Sign Up</button>
145
+ </TrackClick>
146
+
147
+ {/* Track when element becomes visible */}
148
+ <TrackVisible eventName="section-viewed" section="hero">
149
+ <div>Hero section</div>
150
+ </TrackVisible>
151
+ </>
152
+ )
94
153
  }
95
-
96
- export default withPagesRouter(MyApp, {
97
- siteId: 'YOUR_SITE_ID',
98
- clientOptions: {
99
- spa: 'auto',
100
- },
101
- })
102
154
  ```
103
155
 
104
156
  ### Next.js App Router
105
157
 
106
- Use `AppRouterProvider` for automatic route tracking:
158
+ Use `FathomProvider` with `NextFathomTrackViewApp` for automatic route tracking:
107
159
 
108
160
  ```tsx
109
161
  // app/layout.tsx
110
- import { AppRouterProvider } from 'react-fathom/next'
162
+ import { FathomProvider } from 'react-fathom'
163
+ import { NextFathomTrackViewApp } from 'react-fathom/next'
111
164
 
112
165
  export default function RootLayout({ children }) {
113
166
  return (
114
167
  <html>
115
168
  <body>
116
- <AppRouterProvider siteId="YOUR_SITE_ID">{children}</AppRouterProvider>
169
+ <FathomProvider siteId="YOUR_SITE_ID">
170
+ <NextFathomTrackViewApp />
171
+ {children}
172
+ </FathomProvider>
117
173
  </body>
118
174
  </html>
119
175
  )
120
176
  }
121
177
  ```
122
178
 
123
- Or use the HOC:
179
+ ### Next.js Pages Router
180
+
181
+ Use `FathomProvider` with `NextFathomTrackViewPages` for automatic route tracking:
124
182
 
125
183
  ```tsx
126
- // app/layout.tsx
127
- import { withAppRouter } from 'react-fathom/next'
184
+ // pages/_app.tsx
185
+ import { FathomProvider } from 'react-fathom'
186
+ import { NextFathomTrackViewPages } from 'react-fathom/next'
128
187
 
129
- function RootLayout({ children }) {
188
+ function MyApp({ Component, pageProps }) {
130
189
  return (
131
- <html>
132
- <body>{children}</body>
133
- </html>
190
+ <FathomProvider siteId="YOUR_SITE_ID">
191
+ <NextFathomTrackViewPages />
192
+ <Component {...pageProps} />
193
+ </FathomProvider>
134
194
  )
135
195
  }
136
196
 
137
- export default withAppRouter(RootLayout, {
138
- siteId: 'YOUR_SITE_ID',
139
- clientOptions: {
140
- spa: 'auto',
141
- },
142
- })
197
+ export default MyApp
143
198
  ```
144
199
 
145
200
  ## API
146
201
 
147
202
  ### `FathomProvider`
148
203
 
149
- Main provider component for React apps.
204
+ Main provider component for React apps. Supports composable nesting - nested providers can override `client`, `defaultPageviewOptions`, or `defaultEventOptions`.
150
205
 
151
206
  **Props:**
152
207
 
153
- - `siteId` (string, required): Your Fathom Analytics site ID
208
+ - `siteId` (string, optional): Your Fathom Analytics site ID
154
209
  - `client` (FathomClient, optional): Custom Fathom client instance
155
210
  - `clientOptions` (LoadOptions, optional): Options passed to `fathom-client`
156
- - `disableDefaultTrack` (boolean, optional): Disable automatic pageview tracking
157
- - `trackDefaultOptions` (PageViewOptions, optional): Default options for pageview tracking
211
+ - `defaultPageviewOptions` (PageViewOptions, optional): Default options merged into all `trackPageview` calls
212
+ - `defaultEventOptions` (EventOptions, optional): Default options merged into all `trackEvent` calls
213
+
214
+ **Example:**
215
+
216
+ ```tsx
217
+ <FathomProvider
218
+ siteId="YOUR_SITE_ID"
219
+ defaultPageviewOptions={{ referrer: 'https://example.com' }}
220
+ defaultEventOptions={{ id: 'global-id' }}
221
+ >
222
+ {/* Your app */}
223
+ </FathomProvider>
224
+ ```
225
+
226
+ ### `NextFathomTrackViewApp`
227
+
228
+ Component that tracks pageviews for Next.js App Router. Must be used within a `FathomProvider`.
229
+
230
+ **Props:**
231
+
232
+ - `disableAutoTrack` (boolean, optional): Disable automatic pageview tracking on route changes (defaults to false)
233
+
234
+ **Example:**
235
+
236
+ ```tsx
237
+ <FathomProvider siteId="YOUR_SITE_ID">
238
+ <NextFathomTrackViewApp />
239
+ {/* Your app */}
240
+ </FathomProvider>
241
+ ```
158
242
 
159
- ### `PagesRouterProvider` / `AppRouterProvider`
243
+ ### `NextFathomTrackViewPages`
160
244
 
161
- Next.js-specific providers with automatic route tracking.
245
+ Component that tracks pageviews for Next.js Pages Router. Must be used within a `FathomProvider`.
162
246
 
163
247
  **Props:**
164
248
 
165
- - All `FathomProvider` props, plus:
166
- - `disableAutoTrack` (boolean, optional): Disable automatic pageview tracking on route changes
167
- - `trackDefaultOptions` (PageViewOptions, optional): Default options for route change pageviews
249
+ - `disableAutoTrack` (boolean, optional): Disable automatic pageview tracking on route changes (defaults to false)
250
+
251
+ **Example:**
252
+
253
+ ```tsx
254
+ <FathomProvider siteId="YOUR_SITE_ID">
255
+ <NextFathomTrackViewPages />
256
+ {/* Your app */}
257
+ </FathomProvider>
258
+ ```
168
259
 
169
260
  ### `useFathom()`
170
261
 
171
- Hook to access Fathom methods.
262
+ Hook to access Fathom methods and context.
172
263
 
173
264
  **Returns:**
174
265
 
175
- - `trackPageview(options?)`: Track a pageview
176
- - `trackEvent(eventName, options?)`: Track a custom event
266
+ - `trackPageview(options?)`: Track a pageview (automatically merges `defaultPageviewOptions`)
267
+ - `trackEvent(eventName, options?)`: Track a custom event (automatically merges `defaultEventOptions`)
268
+ - `trackGoal(code, cents)`: Track a goal conversion
177
269
  - `load(siteId, options?)`: Load Fathom with a site ID
178
270
  - `setSite(siteId)`: Change the site ID
179
271
  - `blockTrackingForMe()`: Block tracking for current user
180
272
  - `enableTrackingForMe()`: Enable tracking for current user
181
273
  - `isTrackingEnabled()`: Check if tracking is enabled
274
+ - `client`: The Fathom client instance
275
+ - `defaultPageviewOptions`: Current default pageview options
276
+ - `defaultEventOptions`: Current default event options
277
+
278
+ ### `useTrackOnMount(options?)`
279
+
280
+ Hook to track a pageview when a component mounts.
281
+
282
+ **Options:**
283
+
284
+ - `url` (string, optional): URL to track
285
+ - `referrer` (string, optional): Referrer URL
286
+ - All other `PageViewOptions` from `fathom-client`
287
+
288
+ ### `useTrackOnClick(options)`
289
+
290
+ Hook that returns a click handler function to track events.
291
+
292
+ **Options:**
293
+
294
+ - `eventName` (string, required): Event name to track
295
+ - `preventDefault` (boolean, optional): Whether to prevent default behavior (defaults to false)
296
+ - `callback` ((e?: MouseEvent) => void, optional): Callback function to run after tracking
297
+ - All other `EventOptions` from `fathom-client`
298
+
299
+ ### `useTrackOnVisible(options)`
300
+
301
+ Hook that returns a ref to attach to an element. Tracks an event when the element becomes visible.
302
+
303
+ **Options:**
304
+
305
+ - `eventName` (string, required): Event name to track
306
+ - `callback` ((entry: IntersectionObserverEntry) => void, optional): Callback function to run after tracking
307
+ - `threshold` (number, optional): IntersectionObserver threshold (defaults to 0.1)
308
+ - `rootMargin` (string, optional): IntersectionObserver rootMargin
309
+ - All other `EventOptions` from `fathom-client`
310
+
311
+ ### `TrackPageview`
312
+
313
+ Component that tracks a pageview when it mounts.
314
+
315
+ **Props:**
316
+
317
+ - `url` (string, optional): URL to track
318
+ - `referrer` (string, optional): Referrer URL
319
+ - `children` (ReactNode, optional): Child elements to render
320
+ - All other `PageViewOptions` from `fathom-client`
321
+
322
+ ### `TrackClick`
323
+
324
+ Component that tracks an event when clicked.
325
+
326
+ **Props:**
327
+
328
+ - `eventName` (string, required): Event name to track
329
+ - `preventDefault` (boolean, optional): Whether to prevent default behavior (defaults to false)
330
+ - `children` (ReactNode, required): Child element(s) to render
331
+ - All other `EventOptions` from `fathom-client`
332
+
333
+ ### `TrackVisible`
334
+
335
+ Component that tracks an event when it becomes visible.
336
+
337
+ **Props:**
338
+
339
+ - `eventName` (string, required): Event name to track
340
+ - `threshold` (number, optional): IntersectionObserver threshold (defaults to 0.1)
341
+ - `rootMargin` (string, optional): IntersectionObserver rootMargin
342
+ - `children` (ReactNode, required): Child element(s) to render
343
+ - `as` (string, optional): HTML element type to render (defaults to 'div')
344
+ - All other `EventOptions` from `fathom-client`
182
345
 
183
346
  ## Tree-shaking
184
347
 
@@ -1,4 +1,4 @@
1
- /*! react-fathom - 0.1.0 !*/
1
+ /*! react-fathom - 0.1.1 !*/
2
2
  'use strict';
3
3
 
4
4
  var React = require('react');
@@ -65,9 +65,8 @@ function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t
65
65
  var FathomProvider = function FathomProvider(_ref) {
66
66
  var children = _ref.children,
67
67
  providedClient = _ref.client,
68
- clientOptions = _ref.clientOptions;
69
- _ref.disableDefaultTrack;
70
- var siteId = _ref.siteId,
68
+ clientOptions = _ref.clientOptions,
69
+ siteId = _ref.siteId,
71
70
  providedDefaultPageviewOptions = _ref.defaultPageviewOptions,
72
71
  providedDefaultEventOptions = _ref.defaultEventOptions;
73
72
  // Read parent context if it exists
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","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 };","import 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 disableDefaultTrack,\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","FathomProvider","_ref","children","providedClient","client","clientOptions","disableDefaultTrack","siteId","providedDefaultPageviewOptions","defaultPageviewOptions","providedDefaultEventOptions","defaultEventOptions","parentContext","useContext","useMemo","_ref2","Fathom","blockTrackingForMe","useCallback","enableTrackingForMe","isTrackingEnabled","_client$isTrackingEna","load","setSite","trackEvent","category","options","_objectSpread","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","e","useTrackOnVisible","observerOptions","_options$trackOnce","trackOnce","ref","useRef","hasTracked","element","current","observer","IntersectionObserver","entries","forEach","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":"index.cjs","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 };","import 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","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","_objectSpread","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","e","useTrackOnVisible","observerOptions","_options$trackOnce","trackOnce","ref","useRef","hasTracked","element","current","observer","IntersectionObserver","entries","forEach","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]}