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.
Files changed (80) hide show
  1. package/README.md +941 -25
  2. package/dist/cjs/index.cjs +55 -9
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/native/index.cjs +1079 -0
  5. package/dist/cjs/native/index.cjs.map +1 -0
  6. package/dist/cjs/next/index.cjs +89 -5
  7. package/dist/cjs/next/index.cjs.map +1 -1
  8. package/dist/es/index.js +55 -9
  9. package/dist/es/index.js.map +1 -1
  10. package/dist/es/native/index.js +1071 -0
  11. package/dist/es/native/index.js.map +1 -0
  12. package/dist/es/next/index.js +90 -6
  13. package/dist/es/next/index.js.map +1 -1
  14. package/dist/react-fathom.js +55 -9
  15. package/dist/react-fathom.js.map +1 -1
  16. package/dist/react-fathom.min.js +2 -2
  17. package/dist/react-fathom.min.js.map +1 -1
  18. package/package.json +28 -5
  19. package/src/FathomContext.tsx +30 -1
  20. package/src/FathomProvider.test.tsx +115 -15
  21. package/src/FathomProvider.tsx +10 -2
  22. package/src/components/TrackClick.test.tsx +7 -7
  23. package/src/components/TrackClick.tsx +1 -1
  24. package/src/components/TrackVisible.test.tsx +7 -7
  25. package/src/components/TrackVisible.tsx +1 -1
  26. package/src/hooks/useFathom.test.tsx +14 -3
  27. package/src/hooks/useTrackOnClick.test.tsx +4 -4
  28. package/src/hooks/useTrackOnClick.ts +1 -1
  29. package/src/hooks/useTrackOnVisible.test.tsx +4 -4
  30. package/src/hooks/useTrackOnVisible.ts +1 -1
  31. package/src/index.ts +1 -0
  32. package/src/native/FathomWebView.test.tsx +410 -0
  33. package/src/native/FathomWebView.tsx +297 -0
  34. package/src/native/NativeFathomProvider.test.tsx +372 -0
  35. package/src/native/NativeFathomProvider.tsx +113 -0
  36. package/src/native/createWebViewClient.test.ts +380 -0
  37. package/src/native/createWebViewClient.ts +271 -0
  38. package/src/native/index.ts +29 -0
  39. package/src/native/react-native.d.ts +74 -0
  40. package/src/native/types.ts +145 -0
  41. package/src/native/useAppStateTracking.test.ts +249 -0
  42. package/src/native/useAppStateTracking.ts +66 -0
  43. package/src/native/useNavigationTracking.test.ts +446 -0
  44. package/src/native/useNavigationTracking.ts +177 -0
  45. package/src/next/NextFathomProviderApp.client.tsx +5 -0
  46. package/src/next/NextFathomProviderApp.test.tsx +154 -0
  47. package/src/next/NextFathomProviderApp.tsx +62 -0
  48. package/src/next/index.ts +3 -0
  49. package/src/types.ts +36 -9
  50. package/types/FathomContext.d.ts +1 -1
  51. package/types/FathomContext.d.ts.map +1 -1
  52. package/types/FathomProvider.d.ts.map +1 -1
  53. package/types/components/TrackClick.d.ts +1 -1
  54. package/types/components/TrackVisible.d.ts +1 -1
  55. package/types/hooks/useTrackOnClick.d.ts +1 -1
  56. package/types/hooks/useTrackOnVisible.d.ts +1 -1
  57. package/types/index.d.ts +1 -0
  58. package/types/index.d.ts.map +1 -1
  59. package/types/native/FathomWebView.d.ts +59 -0
  60. package/types/native/FathomWebView.d.ts.map +1 -0
  61. package/types/native/NativeFathomProvider.d.ts +36 -0
  62. package/types/native/NativeFathomProvider.d.ts.map +1 -0
  63. package/types/native/createWebViewClient.d.ts +51 -0
  64. package/types/native/createWebViewClient.d.ts.map +1 -0
  65. package/types/native/index.d.ts +10 -0
  66. package/types/native/index.d.ts.map +1 -0
  67. package/types/native/types.d.ts +125 -0
  68. package/types/native/types.d.ts.map +1 -0
  69. package/types/native/useAppStateTracking.d.ts +25 -0
  70. package/types/native/useAppStateTracking.d.ts.map +1 -0
  71. package/types/native/useNavigationTracking.d.ts +30 -0
  72. package/types/native/useNavigationTracking.d.ts.map +1 -0
  73. package/types/next/NextFathomProviderApp.client.d.ts +3 -0
  74. package/types/next/NextFathomProviderApp.client.d.ts.map +1 -0
  75. package/types/next/NextFathomProviderApp.d.ts +38 -4
  76. package/types/next/NextFathomProviderApp.d.ts.map +1 -1
  77. package/types/next/index.d.ts +1 -0
  78. package/types/next/index.d.ts.map +1 -1
  79. package/types/types.d.ts +34 -9
  80. package/types/types.d.ts.map +1 -1
@@ -0,0 +1,25 @@
1
+ import type { UseAppStateTrackingOptions } from './types';
2
+ /**
3
+ * Hook that tracks app state changes (foreground/background) as Fathom events.
4
+ *
5
+ * This is useful for understanding user engagement patterns and session behavior.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { useAppStateTracking } from 'react-fathom/native'
10
+ *
11
+ * function App() {
12
+ * useAppStateTracking({
13
+ * foregroundEventName: 'app-resumed',
14
+ * backgroundEventName: 'app-paused',
15
+ * onStateChange: (state) => {
16
+ * console.log('App state:', state)
17
+ * },
18
+ * })
19
+ *
20
+ * return <YourApp />
21
+ * }
22
+ * ```
23
+ */
24
+ export declare function useAppStateTracking(options?: UseAppStateTrackingOptions): void;
25
+ //# sourceMappingURL=useAppStateTracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAppStateTracking.d.ts","sourceRoot":"","sources":["../../src/native/useAppStateTracking.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AAEzD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,0BAA+B,QAqC3E"}
@@ -0,0 +1,30 @@
1
+ import type { UseNavigationTrackingOptions } from './types';
2
+ /**
3
+ * Hook that tracks screen navigation as pageviews using React Navigation.
4
+ *
5
+ * This integrates with React Navigation's navigation container to automatically
6
+ * track screen changes as Fathom pageviews.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * import { NavigationContainer } from '@react-navigation/native'
11
+ * import { useNavigationTracking } from 'react-fathom/native'
12
+ *
13
+ * function App() {
14
+ * const navigationRef = useNavigationContainerRef()
15
+ *
16
+ * useNavigationTracking({
17
+ * navigationRef,
18
+ * transformRouteName: (name) => `/screens/${name}`,
19
+ * })
20
+ *
21
+ * return (
22
+ * <NavigationContainer ref={navigationRef}>
23
+ * <Navigator />
24
+ * </NavigationContainer>
25
+ * )
26
+ * }
27
+ * ```
28
+ */
29
+ export declare function useNavigationTracking(options: UseNavigationTrackingOptions): void;
30
+ //# sourceMappingURL=useNavigationTracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNavigationTracking.d.ts","sourceRoot":"","sources":["../../src/native/useNavigationTracking.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,QAgJ1E"}
@@ -0,0 +1,3 @@
1
+ export { NextFathomProviderApp } from './NextFathomProviderApp';
2
+ export type { NextFathomProviderAppProps } from './NextFathomProviderApp';
3
+ //# sourceMappingURL=NextFathomProviderApp.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NextFathomProviderApp.client.d.ts","sourceRoot":"","sources":["../../src/next/NextFathomProviderApp.client.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA"}
@@ -1,6 +1,40 @@
1
1
  import React from 'react';
2
- import type { NextFathomProviderProps } from './types';
3
- declare const NextFathomProviderApp: React.FC<NextFathomProviderProps>;
4
- export default NextFathomProviderApp;
5
- export { NextFathomProviderApp };
2
+ import type { FathomProviderProps } from '../types';
3
+ export interface NextFathomProviderAppProps extends Omit<FathomProviderProps, 'children'> {
4
+ /**
5
+ * Disable automatic pageview tracking on route changes
6
+ * @default false
7
+ */
8
+ disableAutoTrack?: boolean;
9
+ /**
10
+ * Child components to render
11
+ */
12
+ children: React.ReactNode;
13
+ }
14
+ /**
15
+ * Client component wrapper that combines FathomProvider and NextFathomTrackViewApp
16
+ * for easy integration in Next.js App Router layouts.
17
+ *
18
+ * This component is marked with 'use client' and can be used directly in Server Components
19
+ * like the root layout.tsx file.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * // app/layout.tsx
24
+ * import { NextFathomProviderApp } from 'react-fathom/next'
25
+ *
26
+ * export default function RootLayout({ children }) {
27
+ * return (
28
+ * <html>
29
+ * <body>
30
+ * <NextFathomProviderApp siteId="YOUR_SITE_ID">
31
+ * {children}
32
+ * </NextFathomProviderApp>
33
+ * </body>
34
+ * </html>
35
+ * )
36
+ * }
37
+ * ```
38
+ */
39
+ export declare const NextFathomProviderApp: React.FC<NextFathomProviderAppProps>;
6
40
  //# sourceMappingURL=NextFathomProviderApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NextFathomProviderApp.d.ts","sourceRoot":"","sources":["../../src/next/NextFathomProviderApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAOtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAA;AAGtD,QAAA,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAyF5D,CAAA;AAID,eAAe,qBAAqB,CAAA;AACpC,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
1
+ {"version":3,"file":"NextFathomProviderApp.d.ts","sourceRoot":"","sources":["../../src/next/NextFathomProviderApp.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAGnD,MAAM,WAAW,0BAA2B,SAAQ,IAAI,CACtD,mBAAmB,EACnB,UAAU,CACX;IACC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAWtE,CAAA"}
@@ -1,5 +1,6 @@
1
1
  export * from './NextFathomTrackViewPages';
2
2
  export * from './NextFathomTrackViewApp';
3
+ export * from './NextFathomProviderApp';
3
4
  export * from './compositions/withPagesRouter';
4
5
  export * from './compositions/withAppRouter';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AACA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AAGxC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,8BAA8B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AACA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AAGxC,cAAc,yBAAyB,CAAA;AAGvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,8BAA8B,CAAA"}
package/types/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
- import type { PropsWithChildren } from 'react';
1
+ import type { MutableRefObject, PropsWithChildren } from 'react';
2
2
  import type { EventOptions, LoadOptions, PageViewOptions } from 'fathom-client';
3
+ export type { EventOptions, LoadOptions, PageViewOptions };
3
4
  export interface FathomClient {
4
5
  blockTrackingForMe: () => void;
5
6
  enableTrackingForMe: () => void;
@@ -11,20 +12,44 @@ export interface FathomClient {
11
12
  isTrackingEnabled: () => boolean;
12
13
  }
13
14
  export interface FathomContextInterface {
14
- blockTrackingForMe?: () => void;
15
- enableTrackingForMe?: () => void;
16
- isTrackingEnabled?: () => boolean;
17
- load?: (siteId: string, options?: LoadOptions) => void;
18
- setSite?: (siteId: string) => void;
19
- trackPageview?: (options?: PageViewOptions) => void;
20
- trackEvent?: (eventName: string, options?: EventOptions) => void;
21
- trackGoal?: (code: string, cents: number) => void;
15
+ blockTrackingForMe: () => void;
16
+ enableTrackingForMe: () => void;
17
+ isTrackingEnabled: () => boolean;
18
+ load: (siteId: string, options?: LoadOptions) => void;
19
+ setSite: (siteId: string) => void;
20
+ trackPageview: (options?: PageViewOptions) => void;
21
+ trackEvent: (eventName: string, options?: EventOptions) => void;
22
+ trackGoal: (code: string, cents: number) => void;
22
23
  client?: FathomClient;
23
24
  defaultPageviewOptions?: PageViewOptions;
24
25
  defaultEventOptions?: EventOptions;
25
26
  }
26
27
  export interface FathomProviderProps extends PropsWithChildren {
27
28
  client?: FathomClient;
29
+ /**
30
+ * A ref that will be populated with the resolved Fathom client instance.
31
+ * This allows the parent component that composes the provider to access
32
+ * the client directly, since it cannot use useFathom() (context only flows
33
+ * downward to children).
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * function App() {
38
+ * const clientRef = useRef<FathomClient>(null);
39
+ *
40
+ * const handleDeepLink = (url: string) => {
41
+ * clientRef.current?.trackEvent('deep_link', { _url: url });
42
+ * };
43
+ *
44
+ * return (
45
+ * <FathomProvider siteId="..." clientRef={clientRef}>
46
+ * <YourApp />
47
+ * </FathomProvider>
48
+ * );
49
+ * }
50
+ * ```
51
+ */
52
+ clientRef?: MutableRefObject<FathomClient | null>;
28
53
  clientOptions?: LoadOptions;
29
54
  siteId?: string;
30
55
  defaultPageviewOptions?: PageViewOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/E,MAAM,WAAW,YAAY;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,IAAI,CAAA;IAC/C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAC5D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACrD,iBAAiB,EAAE,MAAM,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC/B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;IACjC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACtD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,IAAI,CAAA;IACnD,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAChE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,sBAAsB,CAAC,EAAE,eAAe,CAAA;IACxC,mBAAmB,CAAC,EAAE,YAAY,CAAA;CACnC;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sBAAsB,CAAC,EAAE,eAAe,CAAA;IACxC,mBAAmB,CAAC,EAAE,YAAY,CAAA;CACnC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAEhE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAG/E,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA;AAE1D,MAAM,WAAW,YAAY;IAC3B,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,eAAe,KAAK,IAAI,CAAA;IAC/C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAC5D,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACrD,iBAAiB,EAAE,MAAM,OAAO,CAAA;CACjC;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAA;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAA;IAChC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IACrD,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,IAAI,CAAA;IAClD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAC/D,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAChD,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,sBAAsB,CAAC,EAAE,eAAe,CAAA;IACxC,mBAAmB,CAAC,EAAE,YAAY,CAAA;CACnC;AAED,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC5D,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IACjD,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,sBAAsB,CAAC,EAAE,eAAe,CAAA;IACxC,mBAAmB,CAAC,EAAE,YAAY,CAAA;CACnC"}