@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.
- package/dist/cjs/src/index.js +18 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/tracking/SITrackingProvider.js +126 -0
- package/dist/cjs/src/tracking/SITrackingProvider.js.map +1 -0
- package/dist/cjs/src/tracking/hooks.js +233 -0
- package/dist/cjs/src/tracking/hooks.js.map +1 -0
- package/dist/cjs/src/tracking/index.js +67 -0
- package/dist/cjs/src/tracking/index.js.map +1 -0
- package/dist/cjs/src/tracking/tracker.js +289 -0
- package/dist/cjs/src/tracking/tracker.js.map +1 -0
- package/dist/esm/src/index.d.ts +3 -0
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +4 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/tracking/SITrackingProvider.d.ts +64 -0
- package/dist/esm/src/tracking/SITrackingProvider.d.ts.map +1 -0
- package/dist/esm/src/tracking/SITrackingProvider.js +82 -0
- package/dist/esm/src/tracking/SITrackingProvider.js.map +1 -0
- package/dist/esm/src/tracking/hooks.d.ts +112 -0
- package/dist/esm/src/tracking/hooks.d.ts.map +1 -0
- package/dist/esm/src/tracking/hooks.js +215 -0
- package/dist/esm/src/tracking/hooks.js.map +1 -0
- package/dist/esm/src/tracking/index.d.ts +48 -0
- package/dist/esm/src/tracking/index.d.ts.map +1 -0
- package/dist/esm/src/tracking/index.js +51 -0
- package/dist/esm/src/tracking/index.js.map +1 -0
- package/dist/esm/src/tracking/tracker.d.ts +121 -0
- package/dist/esm/src/tracking/tracker.d.ts.map +1 -0
- package/dist/esm/src/tracking/tracker.js +284 -0
- package/dist/esm/src/tracking/tracker.js.map +1 -0
- package/package.json +9 -4
package/dist/cjs/src/index.js
CHANGED
|
@@ -46,7 +46,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
46
46
|
})();
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.inferNavToContainerMap = exports.architectureRegistry = exports.ContainerRegistry = exports.createAutoInitializer = exports.initializeArchitecture = exports.ExposureCollector = exports.useToolBinding = exports.DOMExecutor = exports.RouteContractGenerator = exports.NameExtractor = exports.NextjsDynamicScanner = exports.RouteScanner = exports.ContractScanner = exports.Names = exports.SystemTools = exports.isStatefulComponent = exports.Component = exports.ComponentRegistry = exports.ToolRegistry = exports.pathPreset = exports.componentPreset = exports.createPreset = exports.PresetTemplates = exports.clearToolPresets = exports.registerPendingPreset = exports.applyPreset = exports.getToolPreset = exports.ToolPreset = exports.OnboardingAndTestTool = exports.AIAndTestTool = exports.NavigationTool = exports.DataWriteTool = exports.DataReadTool = exports.DestructiveTool = exports.DangerousTool = exports.OnboardingTool = exports.TestTool = exports.AITool = exports.FormTool = exports.MultiActionTool = exports.HoverTool = exports.TypeTool = exports.ChangeTool = exports.ClickTool = exports.isToolProvider = exports.getToolProviderConfig = exports.ToolProvider = exports.getStandaloneTool = exports.getStandaloneTools = exports.Tool = void 0;
|
|
49
|
-
exports.PACKAGE_NAME = exports.VERSION = exports.LocationContext = exports.TreeBuilder = exports.RuntimeTreeBuilder = exports.NavigationGraph = exports.onStateChange = exports.waitForState = exports.getStateFromDom = exports.triggerStateChange = exports.syncStateToDom = exports.setupBridge = exports.createAuditTrail = exports.registerReadable = exports.bridgeComponentState = exports.bridgeToolRegistry = exports.withChatUI = exports.useChatUIOptional = exports.useChatUI = exports.ChatUI = exports.ChatUIProvider = exports.isComponentId = exports.getComponentIds = exports.createNames = exports.createContainers = exports.createContainer = void 0;
|
|
49
|
+
exports.withTracking = exports.TrackingProvider = exports.createComponentTrackingHook = exports.useTrackVisibility = exports.useTrackScrollDepth = exports.useTrackEngagement = exports.useTrackView = exports.useTrackClick = exports.useSITrackingInit = exports.useTracker = exports.SITrackerProvider = exports.createTracker = exports.SITracker = exports.PACKAGE_NAME = exports.VERSION = exports.LocationContext = exports.TreeBuilder = exports.RuntimeTreeBuilder = exports.NavigationGraph = exports.onStateChange = exports.waitForState = exports.getStateFromDom = exports.triggerStateChange = exports.syncStateToDom = exports.setupBridge = exports.createAuditTrail = exports.registerReadable = exports.bridgeComponentState = exports.bridgeToolRegistry = exports.withChatUI = exports.useChatUIOptional = exports.useChatUI = exports.ChatUI = exports.ChatUIProvider = exports.isComponentId = exports.getComponentIds = exports.createNames = exports.createContainers = exports.createContainer = void 0;
|
|
50
50
|
// Core decorators and registry
|
|
51
51
|
var Tool_1 = require("./decorators/Tool");
|
|
52
52
|
Object.defineProperty(exports, "Tool", { enumerable: true, get: function () { return Tool_1.Tool; } });
|
|
@@ -187,6 +187,23 @@ Object.defineProperty(exports, "LocationContext", { enumerable: true, get: funct
|
|
|
187
187
|
// Version info
|
|
188
188
|
exports.VERSION = '1.1.0'; // Updated for MCP + State Management
|
|
189
189
|
exports.PACKAGE_NAME = '@supernal/interface';
|
|
190
|
+
// Interaction Tracking
|
|
191
|
+
var tracker_1 = require("./tracking/tracker");
|
|
192
|
+
Object.defineProperty(exports, "SITracker", { enumerable: true, get: function () { return tracker_1.SITracker; } });
|
|
193
|
+
Object.defineProperty(exports, "createTracker", { enumerable: true, get: function () { return tracker_1.createTracker; } });
|
|
194
|
+
var hooks_1 = require("./tracking/hooks");
|
|
195
|
+
Object.defineProperty(exports, "SITrackerProvider", { enumerable: true, get: function () { return hooks_1.SITrackerProvider; } });
|
|
196
|
+
Object.defineProperty(exports, "useTracker", { enumerable: true, get: function () { return hooks_1.useTracker; } });
|
|
197
|
+
Object.defineProperty(exports, "useSITrackingInit", { enumerable: true, get: function () { return hooks_1.useSITrackingInit; } });
|
|
198
|
+
Object.defineProperty(exports, "useTrackClick", { enumerable: true, get: function () { return hooks_1.useTrackClick; } });
|
|
199
|
+
Object.defineProperty(exports, "useTrackView", { enumerable: true, get: function () { return hooks_1.useTrackView; } });
|
|
200
|
+
Object.defineProperty(exports, "useTrackEngagement", { enumerable: true, get: function () { return hooks_1.useTrackEngagement; } });
|
|
201
|
+
Object.defineProperty(exports, "useTrackScrollDepth", { enumerable: true, get: function () { return hooks_1.useTrackScrollDepth; } });
|
|
202
|
+
Object.defineProperty(exports, "useTrackVisibility", { enumerable: true, get: function () { return hooks_1.useTrackVisibility; } });
|
|
203
|
+
Object.defineProperty(exports, "createComponentTrackingHook", { enumerable: true, get: function () { return hooks_1.createComponentTrackingHook; } });
|
|
204
|
+
var SITrackingProvider_1 = require("./tracking/SITrackingProvider");
|
|
205
|
+
Object.defineProperty(exports, "TrackingProvider", { enumerable: true, get: function () { return SITrackingProvider_1.TrackingProvider; } });
|
|
206
|
+
Object.defineProperty(exports, "withTracking", { enumerable: true, get: function () { return SITrackingProvider_1.withTracking; } });
|
|
190
207
|
// Enterprise features not included in open source
|
|
191
208
|
// Available at https://supernal.ai/enterprise:
|
|
192
209
|
// - 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,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SI Tracking Provider Component
|
|
4
|
+
*
|
|
5
|
+
* React component that provides the tracker instance to the component tree.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
'use client';
|
|
10
|
+
/**
|
|
11
|
+
* SI Tracking Provider Component
|
|
12
|
+
*
|
|
13
|
+
* React component that provides the tracker instance to the component tree.
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.TrackingProvider = TrackingProvider;
|
|
52
|
+
exports.withTracking = withTracking;
|
|
53
|
+
const react_1 = __importStar(require("react"));
|
|
54
|
+
const tracker_1 = require("./tracker");
|
|
55
|
+
const hooks_1 = require("./hooks");
|
|
56
|
+
/**
|
|
57
|
+
* Provider component that initializes SI tracking for your app
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* // With config
|
|
62
|
+
* function App() {
|
|
63
|
+
* const { user } = useAuth();
|
|
64
|
+
* return (
|
|
65
|
+
* <SITrackingProvider
|
|
66
|
+
* config={{ endpoint: '/api/analytics' }}
|
|
67
|
+
* userId={user?.id}
|
|
68
|
+
* >
|
|
69
|
+
* <YourApp />
|
|
70
|
+
* </SITrackingProvider>
|
|
71
|
+
* );
|
|
72
|
+
* }
|
|
73
|
+
*
|
|
74
|
+
* // With existing tracker
|
|
75
|
+
* const tracker = createTracker({ endpoint: '/api/analytics' });
|
|
76
|
+
*
|
|
77
|
+
* function App() {
|
|
78
|
+
* return (
|
|
79
|
+
* <SITrackingProvider tracker={tracker}>
|
|
80
|
+
* <YourApp />
|
|
81
|
+
* </SITrackingProvider>
|
|
82
|
+
* );
|
|
83
|
+
* }
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
function TrackingProvider({ children, config, tracker: externalTracker, userId, onTrackerCreated, }) {
|
|
87
|
+
// Create or use provided tracker
|
|
88
|
+
const tracker = (0, react_1.useMemo)(() => {
|
|
89
|
+
if (externalTracker)
|
|
90
|
+
return externalTracker;
|
|
91
|
+
const newTracker = (0, tracker_1.createTracker)(config);
|
|
92
|
+
onTrackerCreated?.(newTracker);
|
|
93
|
+
return newTracker;
|
|
94
|
+
}, [externalTracker, config, onTrackerCreated]);
|
|
95
|
+
// Sync user ID
|
|
96
|
+
(0, hooks_1.useSITrackingInit)(tracker, userId);
|
|
97
|
+
// Cleanup on unmount
|
|
98
|
+
(0, react_1.useEffect)(() => {
|
|
99
|
+
return () => {
|
|
100
|
+
// Only destroy if we created the tracker
|
|
101
|
+
if (!externalTracker) {
|
|
102
|
+
tracker.destroy();
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}, [tracker, externalTracker]);
|
|
106
|
+
return react_1.default.createElement(hooks_1.SITrackerProvider, { value: tracker }, children);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Higher-order component to inject tracker
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```tsx
|
|
113
|
+
* const TrackedComponent = withTracking(MyComponent);
|
|
114
|
+
* // MyComponent receives `tracker` prop
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
function withTracking(WrappedComponent) {
|
|
118
|
+
// Inner component that uses the hook
|
|
119
|
+
function WithTrackingInner(props) {
|
|
120
|
+
const tracker = (0, hooks_1.useTracker)();
|
|
121
|
+
return react_1.default.createElement(WrappedComponent, { ...props, tracker: tracker });
|
|
122
|
+
}
|
|
123
|
+
WithTrackingInner.displayName = `withTracking(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
|
|
124
|
+
return WithTrackingInner;
|
|
125
|
+
}
|
|
126
|
+
//# 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;AARb;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDH,4CA6BC;AAWD,oCAYC;AAlGD,+CAAkD;AAClD,uCAAsE;AACtE,mCAA2E;AAc3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,MAAM,EACN,OAAO,EAAE,eAAe,EACxB,MAAM,EACN,gBAAgB,GACQ;IACxB,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAC3B,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAA,uBAAa,EAAC,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,IAAA,yBAAiB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAEnC,qBAAqB;IACrB,IAAA,iBAAS,EAAC,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,8BAAC,yBAAiB,IAAC,KAAK,EAAE,OAAO,IAAG,QAAQ,CAAqB,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAC1B,gBAAwC;IAExC,qCAAqC;IACrC,SAAS,iBAAiB,CAAC,KAAyB;QAClD,MAAM,OAAO,GAAG,IAAA,kBAAU,GAAE,CAAC;QAC7B,OAAO,8BAAC,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,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SI Tracking React Hooks
|
|
4
|
+
*
|
|
5
|
+
* React hooks for integrating Supernal Interface tracking into components.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
'use client';
|
|
10
|
+
/**
|
|
11
|
+
* SI Tracking React Hooks
|
|
12
|
+
*
|
|
13
|
+
* React hooks for integrating Supernal Interface tracking into components.
|
|
14
|
+
*
|
|
15
|
+
* @packageDocumentation
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.SITrackerProvider = void 0;
|
|
19
|
+
exports.useTracker = useTracker;
|
|
20
|
+
exports.useSITrackingInit = useSITrackingInit;
|
|
21
|
+
exports.useTrackClick = useTrackClick;
|
|
22
|
+
exports.useTrackView = useTrackView;
|
|
23
|
+
exports.useTrackEngagement = useTrackEngagement;
|
|
24
|
+
exports.useTrackScrollDepth = useTrackScrollDepth;
|
|
25
|
+
exports.useTrackVisibility = useTrackVisibility;
|
|
26
|
+
exports.createComponentTrackingHook = createComponentTrackingHook;
|
|
27
|
+
const react_1 = require("react");
|
|
28
|
+
// Context for providing tracker instance
|
|
29
|
+
const SITrackerContext = (0, react_1.createContext)(null);
|
|
30
|
+
exports.SITrackerProvider = SITrackerContext.Provider;
|
|
31
|
+
/**
|
|
32
|
+
* Get the tracker instance from context
|
|
33
|
+
*/
|
|
34
|
+
function useTracker() {
|
|
35
|
+
return (0, react_1.useContext)(SITrackerContext);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Hook to sync auth state with tracker
|
|
39
|
+
* Place this once in your app layout
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* function App() {
|
|
44
|
+
* const { user } = useAuth();
|
|
45
|
+
* useSITrackingInit(tracker, user?.id);
|
|
46
|
+
* return <div>...</div>;
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
function useSITrackingInit(tracker, userId) {
|
|
51
|
+
(0, react_1.useEffect)(() => {
|
|
52
|
+
if (tracker) {
|
|
53
|
+
tracker.setUserId(userId ?? null);
|
|
54
|
+
}
|
|
55
|
+
}, [tracker, userId]);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Hook for tracking click events
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```tsx
|
|
62
|
+
* const trackClick = useTrackClick(tracker, 'PostCard');
|
|
63
|
+
* <button onClick={() => trackClick('like', postId)}>Like</button>
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
function useTrackClick(tracker, componentId) {
|
|
67
|
+
return (0, react_1.useCallback)((action, targetId, metadata) => {
|
|
68
|
+
if (tracker) {
|
|
69
|
+
tracker.trackClick(componentId, action, targetId, metadata);
|
|
70
|
+
}
|
|
71
|
+
}, [tracker, componentId]);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Hook for tracking component views (impressions)
|
|
75
|
+
* Automatically tracks when component mounts
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```tsx
|
|
79
|
+
* useTrackView(tracker, 'PostCard', post.id);
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
function useTrackView(tracker, componentId, targetId, options) {
|
|
83
|
+
const { trackOnMount = true } = options ?? {};
|
|
84
|
+
(0, react_1.useEffect)(() => {
|
|
85
|
+
if (tracker && trackOnMount) {
|
|
86
|
+
tracker.trackView(componentId, targetId);
|
|
87
|
+
}
|
|
88
|
+
}, [tracker, componentId, targetId, trackOnMount]);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Hook for tracking engagement time on a specific target
|
|
92
|
+
* Automatically handles start/end of engagement session
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```tsx
|
|
96
|
+
* const { recordInteraction } = useTrackEngagement(tracker, post.id);
|
|
97
|
+
* <button onClick={recordInteraction}>Interact</button>
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
function useTrackEngagement(tracker, targetId, componentId = 'Content') {
|
|
101
|
+
const engagementStarted = (0, react_1.useRef)(false);
|
|
102
|
+
(0, react_1.useEffect)(() => {
|
|
103
|
+
if (!tracker || !targetId)
|
|
104
|
+
return;
|
|
105
|
+
// Start engagement tracking
|
|
106
|
+
tracker.startEngagement(targetId);
|
|
107
|
+
engagementStarted.current = true;
|
|
108
|
+
return () => {
|
|
109
|
+
// End engagement tracking on unmount
|
|
110
|
+
if (engagementStarted.current && tracker) {
|
|
111
|
+
tracker.endEngagement(targetId, componentId);
|
|
112
|
+
engagementStarted.current = false;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}, [tracker, targetId, componentId]);
|
|
116
|
+
const recordInteraction = (0, react_1.useCallback)(() => {
|
|
117
|
+
if (tracker) {
|
|
118
|
+
tracker.recordEngagementInteraction(targetId);
|
|
119
|
+
}
|
|
120
|
+
}, [tracker, targetId]);
|
|
121
|
+
return { recordInteraction };
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Hook for tracking scroll depth in feed
|
|
125
|
+
* Attach to a scrollable container
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```tsx
|
|
129
|
+
* const { handleScroll, resetScroll } = useTrackScrollDepth(tracker);
|
|
130
|
+
* <div onScroll={handleScroll}>...</div>
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
function useTrackScrollDepth(tracker, componentId = 'Feed') {
|
|
134
|
+
const handleScroll = (0, react_1.useCallback)((event) => {
|
|
135
|
+
if (!tracker)
|
|
136
|
+
return;
|
|
137
|
+
const target = event.currentTarget;
|
|
138
|
+
const scrollHeight = target.scrollHeight - target.clientHeight;
|
|
139
|
+
if (scrollHeight <= 0)
|
|
140
|
+
return;
|
|
141
|
+
const scrollPercent = Math.round((target.scrollTop / scrollHeight) * 100);
|
|
142
|
+
tracker.trackScrollDepth(scrollPercent, componentId);
|
|
143
|
+
}, [tracker, componentId]);
|
|
144
|
+
const resetScroll = (0, react_1.useCallback)(() => {
|
|
145
|
+
if (tracker) {
|
|
146
|
+
tracker.resetScrollTracking();
|
|
147
|
+
}
|
|
148
|
+
}, [tracker]);
|
|
149
|
+
// Reset on mount
|
|
150
|
+
(0, react_1.useEffect)(() => {
|
|
151
|
+
if (tracker) {
|
|
152
|
+
tracker.resetScrollTracking();
|
|
153
|
+
}
|
|
154
|
+
}, [tracker]);
|
|
155
|
+
return { handleScroll, resetScroll };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Hook for tracking intersection observer visibility
|
|
159
|
+
* Useful for tracking when components come into view in feed
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* ```tsx
|
|
163
|
+
* const ref = useTrackVisibility(tracker, 'PostCard', post.id);
|
|
164
|
+
* <div ref={ref}>...</div>
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
function useTrackVisibility(tracker, componentId, targetId, options) {
|
|
168
|
+
const { threshold = 0.5 } = options ?? {};
|
|
169
|
+
const hasTracked = (0, react_1.useRef)(false);
|
|
170
|
+
const observerRef = (0, react_1.useRef)(null);
|
|
171
|
+
const refCallback = (0, react_1.useCallback)((element) => {
|
|
172
|
+
// Cleanup previous observer
|
|
173
|
+
if (observerRef.current) {
|
|
174
|
+
observerRef.current.disconnect();
|
|
175
|
+
observerRef.current = null;
|
|
176
|
+
}
|
|
177
|
+
if (!element || !tracker)
|
|
178
|
+
return;
|
|
179
|
+
// Create new observer
|
|
180
|
+
observerRef.current = new IntersectionObserver((entries) => {
|
|
181
|
+
entries.forEach((entry) => {
|
|
182
|
+
if (entry.isIntersecting && !hasTracked.current) {
|
|
183
|
+
tracker.trackView(componentId, targetId);
|
|
184
|
+
hasTracked.current = true;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}, { threshold });
|
|
188
|
+
observerRef.current.observe(element);
|
|
189
|
+
}, [tracker, componentId, targetId, threshold]);
|
|
190
|
+
// Reset tracking flag when targetId changes
|
|
191
|
+
(0, react_1.useEffect)(() => {
|
|
192
|
+
hasTracked.current = false;
|
|
193
|
+
}, [targetId]);
|
|
194
|
+
// Cleanup on unmount
|
|
195
|
+
(0, react_1.useEffect)(() => {
|
|
196
|
+
return () => {
|
|
197
|
+
if (observerRef.current) {
|
|
198
|
+
observerRef.current.disconnect();
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
}, []);
|
|
202
|
+
return refCallback;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create a component-specific tracking hook factory
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* // Define your actions
|
|
210
|
+
* type PostActions = 'like' | 'unlike' | 'share' | 'bookmark';
|
|
211
|
+
*
|
|
212
|
+
* // Create hooks for PostCard
|
|
213
|
+
* export function usePostCardTracking(tracker: SITracker<PostActions>, postId: string) {
|
|
214
|
+
* const trackClick = useTrackClick(tracker, 'PostCard');
|
|
215
|
+
* const visibilityRef = useTrackVisibility(tracker, 'PostCard', postId);
|
|
216
|
+
*
|
|
217
|
+
* return {
|
|
218
|
+
* trackLike: () => trackClick('like', postId),
|
|
219
|
+
* trackShare: () => trackClick('share', postId),
|
|
220
|
+
* visibilityRef,
|
|
221
|
+
* };
|
|
222
|
+
* }
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
function createComponentTrackingHook(componentId, factory) {
|
|
226
|
+
return function useComponentTracking(tracker, targetId) {
|
|
227
|
+
const trackClick = useTrackClick(tracker, componentId);
|
|
228
|
+
if (!tracker)
|
|
229
|
+
return null;
|
|
230
|
+
return factory(trackClick, tracker, targetId);
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/tracking/hooks.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,YAAY,CAAC;AARb;;;;;;GAMG;;;AAeH,gCAEC;AAeD,8CASC;AAWD,sCAYC;AAWD,oCAaC;AAYD,gDAgCC;AAYD,kDAoCC;AAYD,gDAqDC;AAuBD,kEAkBC;AA1RD,iCAAkF;AAGlF,yCAAyC;AACzC,MAAM,gBAAgB,GAAG,IAAA,qBAAa,EAAmB,IAAI,CAAC,CAAC;AAElD,QAAA,iBAAiB,GAAG,gBAAgB,CAAC,QAAQ,CAAC;AAE3D;;GAEG;AACH,SAAgB,UAAU;IACxB,OAAO,IAAA,kBAAU,EAAC,gBAAgB,CAA8B,CAAC;AACnE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,iBAAiB,CAC/B,OAAyB,EACzB,MAAiC;IAEjC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAC3B,OAAkC,EAClC,WAAmB;IAEnB,OAAO,IAAA,mBAAW,EAChB,CAAC,MAAe,EAAE,QAAiB,EAAE,QAAkC,EAAE,EAAE;QACzE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAC1B,OAAyB,EACzB,WAAmB,EACnB,QAAiB,EACjB,OAAoC;IAEpC,MAAM,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE9C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YAC5B,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAChC,OAAyB,EACzB,QAAgB,EAChB,WAAW,GAAG,SAAS;IAIvB,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAExC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAElC,4BAA4B;QAC5B,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAClC,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC;QAEjC,OAAO,GAAG,EAAE;YACV,qCAAqC;YACrC,IAAI,iBAAiB,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;gBACzC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;gBAC7C,iBAAiB,CAAC,OAAO,GAAG,KAAK,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAErC,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACzC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExB,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB,CACjC,OAAyB,EACzB,WAAW,GAAG,MAAM;IAKpB,MAAM,YAAY,GAAG,IAAA,mBAAW,EAC9B,CAAC,KAAiC,EAAE,EAAE;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;QACnC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QAE/D,IAAI,YAAY,IAAI,CAAC;YAAE,OAAO;QAE9B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1E,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,CAAC,CACvB,CAAC;IAEF,MAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,iBAAiB;IACjB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAChC,OAAyB,EACzB,WAAmB,EACnB,QAAiB,EACjB,OAAgC;IAEhC,MAAM,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IACjC,MAAM,WAAW,GAAG,IAAA,cAAM,EAA8B,IAAI,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,IAAA,mBAAW,EAC7B,CAAC,OAA2B,EAAE,EAAE;QAC9B,4BAA4B;QAC5B,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACjC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;YAAE,OAAO;QAEjC,sBAAsB;QACtB,WAAW,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAC5C,CAAC,OAAO,EAAE,EAAE;YACV,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACxB,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBAChD,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;oBACzC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,EACD,EAAE,SAAS,EAAE,CACd,CAAC;QAEF,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,EACD,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAC5C,CAAC;IAEF,4CAA4C;IAC5C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;IAC7B,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,qBAAqB;IACrB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YACnC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,2BAA2B,CACzC,WAAmB,EACnB,OAIY;IAEZ,OAAO,SAAS,oBAAoB,CAClC,OAAkC,EAClC,QAAgB;QAEhB,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEvD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAE1B,OAAO,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Supernal Interface Tracking Module
|
|
4
|
+
*
|
|
5
|
+
* Analytics and interaction tracking for SI-enabled applications.
|
|
6
|
+
* Automatically batches events, handles offline scenarios, and provides
|
|
7
|
+
* React hooks for easy integration.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Create a tracker
|
|
14
|
+
* import { createTracker, TrackingProvider, useTrackClick } from '@supernal/interface/tracking';
|
|
15
|
+
*
|
|
16
|
+
* const tracker = createTracker({
|
|
17
|
+
* endpoint: '/api/v1/analytics',
|
|
18
|
+
* batchSize: 10,
|
|
19
|
+
* debug: process.env.NODE_ENV === 'development',
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* // Provide to React tree
|
|
23
|
+
* function App() {
|
|
24
|
+
* const { user } = useAuth();
|
|
25
|
+
* return (
|
|
26
|
+
* <TrackingProvider tracker={tracker} userId={user?.id}>
|
|
27
|
+
* <YourApp />
|
|
28
|
+
* </TrackingProvider>
|
|
29
|
+
* );
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* // Use in components
|
|
33
|
+
* function PostCard({ post }) {
|
|
34
|
+
* const tracker = useTracker();
|
|
35
|
+
* const trackClick = useTrackClick(tracker, 'PostCard');
|
|
36
|
+
* const visibilityRef = useTrackVisibility(tracker, 'PostCard', post.id);
|
|
37
|
+
*
|
|
38
|
+
* return (
|
|
39
|
+
* <div ref={visibilityRef}>
|
|
40
|
+
* <button onClick={() => trackClick('like', post.id)}>Like</button>
|
|
41
|
+
* </div>
|
|
42
|
+
* );
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.withTracking = exports.TrackingProvider = exports.createComponentTrackingHook = exports.useTrackVisibility = exports.useTrackScrollDepth = exports.useTrackEngagement = exports.useTrackView = exports.useTrackClick = exports.useSITrackingInit = exports.useTracker = exports.SITrackerProvider = exports.createTracker = exports.SITracker = void 0;
|
|
48
|
+
// Core tracker
|
|
49
|
+
var tracker_1 = require("./tracker");
|
|
50
|
+
Object.defineProperty(exports, "SITracker", { enumerable: true, get: function () { return tracker_1.SITracker; } });
|
|
51
|
+
Object.defineProperty(exports, "createTracker", { enumerable: true, get: function () { return tracker_1.createTracker; } });
|
|
52
|
+
// React hooks
|
|
53
|
+
var hooks_1 = require("./hooks");
|
|
54
|
+
Object.defineProperty(exports, "SITrackerProvider", { enumerable: true, get: function () { return hooks_1.SITrackerProvider; } });
|
|
55
|
+
Object.defineProperty(exports, "useTracker", { enumerable: true, get: function () { return hooks_1.useTracker; } });
|
|
56
|
+
Object.defineProperty(exports, "useSITrackingInit", { enumerable: true, get: function () { return hooks_1.useSITrackingInit; } });
|
|
57
|
+
Object.defineProperty(exports, "useTrackClick", { enumerable: true, get: function () { return hooks_1.useTrackClick; } });
|
|
58
|
+
Object.defineProperty(exports, "useTrackView", { enumerable: true, get: function () { return hooks_1.useTrackView; } });
|
|
59
|
+
Object.defineProperty(exports, "useTrackEngagement", { enumerable: true, get: function () { return hooks_1.useTrackEngagement; } });
|
|
60
|
+
Object.defineProperty(exports, "useTrackScrollDepth", { enumerable: true, get: function () { return hooks_1.useTrackScrollDepth; } });
|
|
61
|
+
Object.defineProperty(exports, "useTrackVisibility", { enumerable: true, get: function () { return hooks_1.useTrackVisibility; } });
|
|
62
|
+
Object.defineProperty(exports, "createComponentTrackingHook", { enumerable: true, get: function () { return hooks_1.createComponentTrackingHook; } });
|
|
63
|
+
// React provider component
|
|
64
|
+
var SITrackingProvider_1 = require("./SITrackingProvider");
|
|
65
|
+
Object.defineProperty(exports, "TrackingProvider", { enumerable: true, get: function () { return SITrackingProvider_1.TrackingProvider; } });
|
|
66
|
+
Object.defineProperty(exports, "withTracking", { enumerable: true, get: function () { return SITrackingProvider_1.withTracking; } });
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tracking/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;;;AAEH,eAAe;AACf,qCAMmB;AALjB,oGAAA,SAAS,OAAA;AACT,wGAAA,aAAa,OAAA;AAMf,cAAc;AACd,iCAUiB;AATf,0GAAA,iBAAiB,OAAA;AACjB,mGAAA,UAAU,OAAA;AACV,0GAAA,iBAAiB,OAAA;AACjB,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,2GAAA,kBAAkB,OAAA;AAClB,4GAAA,mBAAmB,OAAA;AACnB,2GAAA,kBAAkB,OAAA;AAClB,oHAAA,2BAA2B,OAAA;AAG7B,2BAA2B;AAC3B,2DAAoG;AAA3F,sHAAA,gBAAgB,OAAA;AAAE,kHAAA,YAAY,OAAA"}
|