@supernal/interface 1.0.13 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cjs/src/index.js +18 -1
  2. package/dist/cjs/src/index.js.map +1 -1
  3. package/dist/cjs/src/tracking/SITrackingProvider.js +126 -0
  4. package/dist/cjs/src/tracking/SITrackingProvider.js.map +1 -0
  5. package/dist/cjs/src/tracking/hooks.js +233 -0
  6. package/dist/cjs/src/tracking/hooks.js.map +1 -0
  7. package/dist/cjs/src/tracking/index.js +67 -0
  8. package/dist/cjs/src/tracking/index.js.map +1 -0
  9. package/dist/cjs/src/tracking/tracker.js +289 -0
  10. package/dist/cjs/src/tracking/tracker.js.map +1 -0
  11. package/dist/esm/src/index.d.ts +3 -0
  12. package/dist/esm/src/index.d.ts.map +1 -1
  13. package/dist/esm/src/index.js +4 -0
  14. package/dist/esm/src/index.js.map +1 -1
  15. package/dist/esm/src/tracking/SITrackingProvider.d.ts +64 -0
  16. package/dist/esm/src/tracking/SITrackingProvider.d.ts.map +1 -0
  17. package/dist/esm/src/tracking/SITrackingProvider.js +82 -0
  18. package/dist/esm/src/tracking/SITrackingProvider.js.map +1 -0
  19. package/dist/esm/src/tracking/hooks.d.ts +112 -0
  20. package/dist/esm/src/tracking/hooks.d.ts.map +1 -0
  21. package/dist/esm/src/tracking/hooks.js +215 -0
  22. package/dist/esm/src/tracking/hooks.js.map +1 -0
  23. package/dist/esm/src/tracking/index.d.ts +48 -0
  24. package/dist/esm/src/tracking/index.d.ts.map +1 -0
  25. package/dist/esm/src/tracking/index.js +51 -0
  26. package/dist/esm/src/tracking/index.js.map +1 -0
  27. package/dist/esm/src/tracking/tracker.d.ts +121 -0
  28. package/dist/esm/src/tracking/tracker.d.ts.map +1 -0
  29. package/dist/esm/src/tracking/tracker.js +284 -0
  30. package/dist/esm/src/tracking/tracker.js.map +1 -0
  31. package/package.json +9 -4
@@ -0,0 +1,289 @@
1
+ "use strict";
2
+ /**
3
+ * Supernal Interface Interaction Tracking
4
+ *
5
+ * Tracks user interactions with SI components for analytics and AI analysis.
6
+ * Batches events to minimize network requests and handles offline gracefully.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.SITracker = void 0;
12
+ exports.createTracker = createTracker;
13
+ /**
14
+ * SI Tracker - Core tracking class
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const tracker = new SITracker({ endpoint: '/api/analytics' });
19
+ * tracker.track('PostCard', 'view', 'post-123');
20
+ * ```
21
+ */
22
+ class SITracker {
23
+ constructor(config = {}) {
24
+ this.queue = [];
25
+ this.flushInterval = null;
26
+ this.engagementSessions = new Map();
27
+ this.scrollState = {
28
+ maxDepth: 0,
29
+ lastReportedDepth: 0,
30
+ lastUpdateTime: Date.now(),
31
+ };
32
+ this.userId = null;
33
+ this.config = {
34
+ endpoint: config.endpoint ?? '/api/v1/analytics',
35
+ batchSize: config.batchSize ?? 10,
36
+ flushIntervalMs: config.flushIntervalMs ?? 5000,
37
+ minEngagementMs: config.minEngagementMs ?? 3000,
38
+ scrollDebounceMs: config.scrollDebounceMs ?? 500,
39
+ debug: config.debug ?? false,
40
+ customFetch: config.customFetch ?? fetch,
41
+ };
42
+ this.isClient = typeof window !== 'undefined';
43
+ this.sessionId = this.generateSessionId();
44
+ if (this.isClient) {
45
+ this.startFlushInterval();
46
+ this.setupBeforeUnload();
47
+ }
48
+ }
49
+ /** Generate a unique session ID */
50
+ generateSessionId() {
51
+ if (!this.isClient)
52
+ return 'server-session';
53
+ // Try to reuse session ID from sessionStorage
54
+ const stored = sessionStorage.getItem('si_session_id');
55
+ if (stored)
56
+ return stored;
57
+ const id = `si_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`;
58
+ sessionStorage.setItem('si_session_id', id);
59
+ return id;
60
+ }
61
+ /** Log debug message */
62
+ log(...args) {
63
+ if (this.config.debug) {
64
+ console.log('[SI Tracking]', ...args);
65
+ }
66
+ }
67
+ /** Set the current user ID for tracking */
68
+ setUserId(userId) {
69
+ this.userId = userId;
70
+ }
71
+ /** Get current session ID */
72
+ getSessionId() {
73
+ return this.sessionId;
74
+ }
75
+ /** Get queue length (for testing) */
76
+ getQueueLength() {
77
+ return this.queue.length;
78
+ }
79
+ /**
80
+ * Track an interaction
81
+ */
82
+ track(componentId, action, targetId, metadata) {
83
+ if (!this.isClient)
84
+ return;
85
+ const interaction = {
86
+ componentId,
87
+ action,
88
+ targetId,
89
+ metadata,
90
+ timestamp: Date.now(),
91
+ sessionId: this.sessionId,
92
+ };
93
+ this.queue.push(interaction);
94
+ this.log('Queued:', action, targetId);
95
+ // Flush if queue is full
96
+ if (this.queue.length >= this.config.batchSize) {
97
+ this.flush();
98
+ }
99
+ }
100
+ /** Alias for track - for click events */
101
+ trackClick(componentId, action, targetId, metadata) {
102
+ this.track(componentId, action, targetId, metadata);
103
+ }
104
+ /** Track view (impression) of a component */
105
+ trackView(componentId, targetId) {
106
+ this.track(componentId, 'view', targetId);
107
+ }
108
+ /** Start engagement tracking for a target */
109
+ startEngagement(targetId) {
110
+ if (!this.isClient)
111
+ return;
112
+ this.engagementSessions.set(targetId, {
113
+ targetId,
114
+ startTime: Date.now(),
115
+ scrollDepth: 0,
116
+ interactions: 0,
117
+ });
118
+ this.log('Engagement started:', targetId);
119
+ }
120
+ /** Record an interaction during engagement */
121
+ recordEngagementInteraction(targetId) {
122
+ const session = this.engagementSessions.get(targetId);
123
+ if (session) {
124
+ session.interactions++;
125
+ }
126
+ }
127
+ /** Update scroll depth for engagement session */
128
+ updateEngagementScrollDepth(targetId, depth) {
129
+ const session = this.engagementSessions.get(targetId);
130
+ if (session && depth > session.scrollDepth) {
131
+ session.scrollDepth = depth;
132
+ }
133
+ }
134
+ /** End engagement tracking and log the session */
135
+ endEngagement(targetId, componentId = 'Content') {
136
+ if (!this.isClient)
137
+ return;
138
+ const session = this.engagementSessions.get(targetId);
139
+ if (!session)
140
+ return;
141
+ const duration = Date.now() - session.startTime;
142
+ // Only track if engagement was meaningful
143
+ if (duration >= this.config.minEngagementMs) {
144
+ this.track(componentId, 'view', targetId, {
145
+ engagementDuration: duration,
146
+ scrollDepth: session.scrollDepth,
147
+ interactions: session.interactions,
148
+ });
149
+ this.log('Engagement ended:', targetId, { duration, ...session });
150
+ }
151
+ this.engagementSessions.delete(targetId);
152
+ }
153
+ /** Track scroll depth in feed */
154
+ trackScrollDepth(depth, componentId = 'Feed') {
155
+ if (!this.isClient)
156
+ return;
157
+ const now = Date.now();
158
+ // Only update if depth increased
159
+ if (depth > this.scrollState.maxDepth) {
160
+ this.scrollState.maxDepth = depth;
161
+ }
162
+ // Debounce reporting
163
+ if (now - this.scrollState.lastUpdateTime < this.config.scrollDebounceMs) {
164
+ return;
165
+ }
166
+ // Report at 25%, 50%, 75%, 100% milestones
167
+ const milestones = [25, 50, 75, 100];
168
+ const currentMilestone = milestones.find((m) => this.scrollState.maxDepth >= m && this.scrollState.lastReportedDepth < m);
169
+ if (currentMilestone) {
170
+ this.track(componentId, 'scroll', undefined, {
171
+ depth: currentMilestone,
172
+ maxDepth: this.scrollState.maxDepth,
173
+ });
174
+ this.scrollState.lastReportedDepth = currentMilestone;
175
+ this.log('Scroll milestone:', currentMilestone);
176
+ }
177
+ this.scrollState.lastUpdateTime = now;
178
+ }
179
+ /** Reset scroll tracking (e.g., on page navigation) */
180
+ resetScrollTracking() {
181
+ this.scrollState = {
182
+ maxDepth: 0,
183
+ lastReportedDepth: 0,
184
+ lastUpdateTime: Date.now(),
185
+ };
186
+ }
187
+ /** Start periodic flush interval */
188
+ startFlushInterval() {
189
+ if (this.flushInterval)
190
+ return;
191
+ this.flushInterval = setInterval(() => {
192
+ this.flush();
193
+ }, this.config.flushIntervalMs);
194
+ }
195
+ /** Stop flush interval */
196
+ stopFlushInterval() {
197
+ if (this.flushInterval) {
198
+ clearInterval(this.flushInterval);
199
+ this.flushInterval = null;
200
+ }
201
+ }
202
+ /** Setup beforeunload handler to flush remaining events */
203
+ setupBeforeUnload() {
204
+ window.addEventListener('beforeunload', () => {
205
+ // End all engagement sessions
206
+ for (const targetId of this.engagementSessions.keys()) {
207
+ this.endEngagement(targetId);
208
+ }
209
+ // Use sendBeacon for reliable delivery
210
+ this.flushWithBeacon();
211
+ });
212
+ // Also handle visibility change for mobile
213
+ document.addEventListener('visibilitychange', () => {
214
+ if (document.visibilityState === 'hidden') {
215
+ this.flushWithBeacon();
216
+ }
217
+ });
218
+ }
219
+ /** Flush queued events to the API */
220
+ async flush() {
221
+ if (!this.isClient || this.queue.length === 0)
222
+ return;
223
+ const events = [...this.queue];
224
+ this.queue = [];
225
+ this.log('Flushing', events.length, 'events');
226
+ try {
227
+ const response = await this.config.customFetch(this.config.endpoint, {
228
+ method: 'POST',
229
+ headers: {
230
+ 'Content-Type': 'application/json',
231
+ },
232
+ body: JSON.stringify({
233
+ events,
234
+ userId: this.userId,
235
+ }),
236
+ });
237
+ if (!response.ok) {
238
+ // Re-queue events on failure (with limit to prevent infinite growth)
239
+ if (this.queue.length < this.config.batchSize * 3) {
240
+ this.queue.unshift(...events);
241
+ }
242
+ this.log('Flush failed, re-queued');
243
+ }
244
+ }
245
+ catch (error) {
246
+ // Re-queue events on network error
247
+ if (this.queue.length < this.config.batchSize * 3) {
248
+ this.queue.unshift(...events);
249
+ }
250
+ console.warn('[SI Tracking] Failed to flush events:', error);
251
+ }
252
+ }
253
+ /** Flush using sendBeacon (for unload events) */
254
+ flushWithBeacon() {
255
+ if (!this.isClient || this.queue.length === 0)
256
+ return;
257
+ const events = [...this.queue];
258
+ this.queue = [];
259
+ try {
260
+ const blob = new Blob([JSON.stringify({ events, userId: this.userId })], {
261
+ type: 'application/json',
262
+ });
263
+ navigator.sendBeacon(this.config.endpoint, blob);
264
+ this.log('Beacon sent', events.length, 'events');
265
+ }
266
+ catch (error) {
267
+ console.warn('[SI Tracking] Beacon failed:', error);
268
+ }
269
+ }
270
+ /** Cleanup (for testing or unmounting) */
271
+ destroy() {
272
+ this.stopFlushInterval();
273
+ this.flush();
274
+ this.engagementSessions.clear();
275
+ }
276
+ }
277
+ exports.SITracker = SITracker;
278
+ /**
279
+ * Create a singleton tracker instance
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * export const tracker = createTracker({ endpoint: '/api/analytics' });
284
+ * ```
285
+ */
286
+ function createTracker(config) {
287
+ return new SITracker(config);
288
+ }
289
+ //# sourceMappingURL=tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../../src/tracking/tracker.ts"],"names":[],"mappings":"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"}
@@ -50,4 +50,7 @@ export { TreeBuilder } from './background/navigation/RuntimeTreeBuilder';
50
50
  export { LocationContext } from './background/location/LocationContext';
51
51
  export declare const VERSION = "1.1.0";
52
52
  export declare const PACKAGE_NAME = "@supernal/interface";
53
+ export { SITracker, createTracker, type SITrackerConfig, type SIInteraction, type SIBaseAction, } from './tracking/tracker';
54
+ export { SITrackerProvider, useTracker, useSITrackingInit, useTrackClick, useTrackView, useTrackEngagement, useTrackScrollDepth, useTrackVisibility, createComponentTrackingHook, } from './tracking/hooks';
55
+ export { TrackingProvider, withTracking, type SITrackingProviderProps, } from './tracking/SITrackingProvider';
53
56
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -76,6 +76,10 @@ export { LocationContext } from './background/location/LocationContext.js';
76
76
  // Version info
77
77
  export const VERSION = '1.1.0'; // Updated for MCP + State Management
78
78
  export const PACKAGE_NAME = '@supernal/interface';
79
+ // Interaction Tracking
80
+ export { SITracker, createTracker, } from './tracking/tracker.js';
81
+ export { SITrackerProvider, useTracker, useSITrackingInit, useTrackClick, useTrackView, useTrackEngagement, useTrackScrollDepth, useTrackVisibility, createComponentTrackingHook, } from './tracking/hooks.js';
82
+ export { TrackingProvider, withTracking, } from './tracking/SITrackingProvider.js';
79
83
  // Enterprise features not included in open source
80
84
  // Available at https://supernal.ai/enterprise:
81
85
  // - Test Generation (TestGenerator, ComponentTestGenerator, DocumentationGenerator)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * SI Tracking Provider Component
3
+ *
4
+ * React component that provides the tracker instance to the component tree.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ import React from 'react';
9
+ import { SITracker, SITrackerConfig } from './tracker';
10
+ export interface SITrackingProviderProps {
11
+ children: React.ReactNode;
12
+ /** Tracker configuration */
13
+ config?: SITrackerConfig;
14
+ /** Pre-created tracker instance (overrides config) */
15
+ tracker?: SITracker;
16
+ /** Current user ID for tracking */
17
+ userId?: string | null;
18
+ /** Callback when tracker is created */
19
+ onTrackerCreated?: (tracker: SITracker) => void;
20
+ }
21
+ /**
22
+ * Provider component that initializes SI tracking for your app
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * // With config
27
+ * function App() {
28
+ * const { user } = useAuth();
29
+ * return (
30
+ * <SITrackingProvider
31
+ * config={{ endpoint: '/api/analytics' }}
32
+ * userId={user?.id}
33
+ * >
34
+ * <YourApp />
35
+ * </SITrackingProvider>
36
+ * );
37
+ * }
38
+ *
39
+ * // With existing tracker
40
+ * const tracker = createTracker({ endpoint: '/api/analytics' });
41
+ *
42
+ * function App() {
43
+ * return (
44
+ * <SITrackingProvider tracker={tracker}>
45
+ * <YourApp />
46
+ * </SITrackingProvider>
47
+ * );
48
+ * }
49
+ * ```
50
+ */
51
+ export declare function TrackingProvider({ children, config, tracker: externalTracker, userId, onTrackerCreated, }: SITrackingProviderProps): React.JSX.Element;
52
+ /**
53
+ * Higher-order component to inject tracker
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * const TrackedComponent = withTracking(MyComponent);
58
+ * // MyComponent receives `tracker` prop
59
+ * ```
60
+ */
61
+ export declare function withTracking<P extends {
62
+ tracker?: SITracker | null;
63
+ }>(WrappedComponent: React.ComponentType<P>): React.FC<Omit<P, 'tracker'>>;
64
+ //# sourceMappingURL=SITrackingProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SITrackingProvider.d.ts","sourceRoot":"","sources":["../../../../src/tracking/SITrackingProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAA6B,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAiB,MAAM,WAAW,CAAC;AAGtE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,4BAA4B;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,sDAAsD;IACtD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uCAAuC;IACvC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,IAAI,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,OAAO,EAAE,eAAe,EACxB,MAAM,EACN,gBAAgB,GACjB,EAAE,uBAAuB,qBAuBzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,EACnE,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GACvC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAU9B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * SI Tracking Provider Component
3
+ *
4
+ * React component that provides the tracker instance to the component tree.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ 'use client';
9
+ import React, { useMemo, useEffect } from 'react';
10
+ import { createTracker } from './tracker.js';
11
+ import { SITrackerProvider, useSITrackingInit, useTracker } from './hooks.js';
12
+ /**
13
+ * Provider component that initializes SI tracking for your app
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * // With config
18
+ * function App() {
19
+ * const { user } = useAuth();
20
+ * return (
21
+ * <SITrackingProvider
22
+ * config={{ endpoint: '/api/analytics' }}
23
+ * userId={user?.id}
24
+ * >
25
+ * <YourApp />
26
+ * </SITrackingProvider>
27
+ * );
28
+ * }
29
+ *
30
+ * // With existing tracker
31
+ * const tracker = createTracker({ endpoint: '/api/analytics' });
32
+ *
33
+ * function App() {
34
+ * return (
35
+ * <SITrackingProvider tracker={tracker}>
36
+ * <YourApp />
37
+ * </SITrackingProvider>
38
+ * );
39
+ * }
40
+ * ```
41
+ */
42
+ export function TrackingProvider({ children, config, tracker: externalTracker, userId, onTrackerCreated, }) {
43
+ // Create or use provided tracker
44
+ const tracker = useMemo(() => {
45
+ if (externalTracker)
46
+ return externalTracker;
47
+ const newTracker = createTracker(config);
48
+ onTrackerCreated?.(newTracker);
49
+ return newTracker;
50
+ }, [externalTracker, config, onTrackerCreated]);
51
+ // Sync user ID
52
+ useSITrackingInit(tracker, userId);
53
+ // Cleanup on unmount
54
+ useEffect(() => {
55
+ return () => {
56
+ // Only destroy if we created the tracker
57
+ if (!externalTracker) {
58
+ tracker.destroy();
59
+ }
60
+ };
61
+ }, [tracker, externalTracker]);
62
+ return React.createElement(SITrackerProvider, { value: tracker }, children);
63
+ }
64
+ /**
65
+ * Higher-order component to inject tracker
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * const TrackedComponent = withTracking(MyComponent);
70
+ * // MyComponent receives `tracker` prop
71
+ * ```
72
+ */
73
+ export function withTracking(WrappedComponent) {
74
+ // Inner component that uses the hook
75
+ function WithTrackingInner(props) {
76
+ const tracker = useTracker();
77
+ return React.createElement(WrappedComponent, { ...props, tracker: tracker });
78
+ }
79
+ WithTrackingInner.displayName = `withTracking(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
80
+ return WithTrackingInner;
81
+ }
82
+ //# sourceMappingURL=SITrackingProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SITrackingProvider.js","sourceRoot":"","sources":["../../../../src/tracking/SITrackingProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,CAAC;AAEb,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAA8B,aAAa,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAc3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,OAAO,EAAE,eAAe,EACxB,MAAM,EACN,gBAAgB,GACQ;IACxB,iCAAiC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QACzC,gBAAgB,EAAE,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,UAAU,CAAC;IACpB,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhD,eAAe;IACf,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEnC,qBAAqB;IACrB,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,yCAAyC;YACzC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IAE/B,OAAO,oBAAC,iBAAiB,IAAC,KAAK,EAAE,OAAO,IAAG,QAAQ,CAAqB,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,gBAAwC;IAExC,qCAAqC;IACrC,SAAS,iBAAiB,CAAC,KAAyB;QAClD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,OAAO,oBAAC,gBAAgB,OAAM,KAAW,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;IAClE,CAAC;IAED,iBAAiB,CAAC,WAAW,GAAG,gBAAgB,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;IAExH,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * SI Tracking React Hooks
3
+ *
4
+ * React hooks for integrating Supernal Interface tracking into components.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ import type { SITracker, SIBaseAction } from './tracker';
9
+ export declare const SITrackerProvider: import("react").Provider<SITracker<SIBaseAction> | null>;
10
+ /**
11
+ * Get the tracker instance from context
12
+ */
13
+ export declare function useTracker<TAction extends string = SIBaseAction>(): SITracker<TAction> | null;
14
+ /**
15
+ * Hook to sync auth state with tracker
16
+ * Place this once in your app layout
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * function App() {
21
+ * const { user } = useAuth();
22
+ * useSITrackingInit(tracker, user?.id);
23
+ * return <div>...</div>;
24
+ * }
25
+ * ```
26
+ */
27
+ export declare function useSITrackingInit(tracker: SITracker | null, userId: string | null | undefined): void;
28
+ /**
29
+ * Hook for tracking click events
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * const trackClick = useTrackClick(tracker, 'PostCard');
34
+ * <button onClick={() => trackClick('like', postId)}>Like</button>
35
+ * ```
36
+ */
37
+ export declare function useTrackClick<TAction extends string = SIBaseAction>(tracker: SITracker<TAction> | null, componentId: string): (action: TAction, targetId?: string, metadata?: Record<string, unknown>) => void;
38
+ /**
39
+ * Hook for tracking component views (impressions)
40
+ * Automatically tracks when component mounts
41
+ *
42
+ * @example
43
+ * ```tsx
44
+ * useTrackView(tracker, 'PostCard', post.id);
45
+ * ```
46
+ */
47
+ export declare function useTrackView(tracker: SITracker | null, componentId: string, targetId?: string, options?: {
48
+ trackOnMount?: boolean;
49
+ }): void;
50
+ /**
51
+ * Hook for tracking engagement time on a specific target
52
+ * Automatically handles start/end of engagement session
53
+ *
54
+ * @example
55
+ * ```tsx
56
+ * const { recordInteraction } = useTrackEngagement(tracker, post.id);
57
+ * <button onClick={recordInteraction}>Interact</button>
58
+ * ```
59
+ */
60
+ export declare function useTrackEngagement(tracker: SITracker | null, targetId: string, componentId?: string): {
61
+ recordInteraction: () => void;
62
+ };
63
+ /**
64
+ * Hook for tracking scroll depth in feed
65
+ * Attach to a scrollable container
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * const { handleScroll, resetScroll } = useTrackScrollDepth(tracker);
70
+ * <div onScroll={handleScroll}>...</div>
71
+ * ```
72
+ */
73
+ export declare function useTrackScrollDepth(tracker: SITracker | null, componentId?: string): {
74
+ handleScroll: (event: React.UIEvent<HTMLElement>) => void;
75
+ resetScroll: () => void;
76
+ };
77
+ /**
78
+ * Hook for tracking intersection observer visibility
79
+ * Useful for tracking when components come into view in feed
80
+ *
81
+ * @example
82
+ * ```tsx
83
+ * const ref = useTrackVisibility(tracker, 'PostCard', post.id);
84
+ * <div ref={ref}>...</div>
85
+ * ```
86
+ */
87
+ export declare function useTrackVisibility(tracker: SITracker | null, componentId: string, targetId?: string, options?: {
88
+ threshold?: number;
89
+ }): React.RefCallback<HTMLElement>;
90
+ /**
91
+ * Create a component-specific tracking hook factory
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // Define your actions
96
+ * type PostActions = 'like' | 'unlike' | 'share' | 'bookmark';
97
+ *
98
+ * // Create hooks for PostCard
99
+ * export function usePostCardTracking(tracker: SITracker<PostActions>, postId: string) {
100
+ * const trackClick = useTrackClick(tracker, 'PostCard');
101
+ * const visibilityRef = useTrackVisibility(tracker, 'PostCard', postId);
102
+ *
103
+ * return {
104
+ * trackLike: () => trackClick('like', postId),
105
+ * trackShare: () => trackClick('share', postId),
106
+ * visibilityRef,
107
+ * };
108
+ * }
109
+ * ```
110
+ */
111
+ export declare function createComponentTrackingHook<TAction extends string, TReturn>(componentId: string, factory: (trackClick: (action: TAction, targetId?: string, metadata?: Record<string, unknown>) => void, tracker: SITracker<TAction>, targetId: string) => TReturn): (tracker: SITracker<TAction> | null, targetId: string) => TReturn | null;
112
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/tracking/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAKzD,eAAO,MAAM,iBAAiB,0DAA4B,CAAC;AAE3D;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,SAAS,MAAM,GAAG,YAAY,KAAK,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAE7F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,GAAG,IAAI,EACzB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,IAAI,CAMN;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,YAAY,EACjE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAClC,WAAW,EAAE,MAAM,YAGR,OAAO,aAAa,MAAM,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAO1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,SAAS,GAAG,IAAI,EACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC,IAAI,CAQN;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,GAAG,IAAI,EACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,SAAY,GACtB;IACD,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B,CA0BA;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,GAAG,IAAI,EACzB,WAAW,SAAS,GACnB;IACD,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CA8BA;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,GAAG,IAAI,EACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAgDhC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,SAAS,MAAM,EAAE,OAAO,EACzE,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CACP,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,EAC5F,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAC3B,QAAQ,EAAE,MAAM,KACb,OAAO,IAGV,SAAS,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAClC,UAAU,MAAM,KACf,OAAO,GAAG,IAAI,CAOlB"}