@gemx-dev/heatmap-react 3.5.70 → 3.5.71
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/esm/components/VizElement/ElementCallout.d.ts.map +1 -1
- package/dist/esm/hooks/view-context/useHeatmapSetting.d.ts +13 -13
- package/dist/esm/hooks/viz-render/useReplayRender.d.ts.map +1 -1
- package/dist/esm/index.js +73 -71
- package/dist/esm/index.mjs +73 -71
- package/dist/esm/stores/setting.d.ts +13 -13
- package/dist/esm/types/heatmap.d.ts +7 -7
- package/dist/umd/components/VizElement/ElementCallout.d.ts.map +1 -1
- package/dist/umd/hooks/view-context/useHeatmapSetting.d.ts +13 -13
- package/dist/umd/hooks/viz-render/useReplayRender.d.ts.map +1 -1
- package/dist/umd/index.js +2 -2
- package/dist/umd/stores/setting.d.ts +13 -13
- package/dist/umd/types/heatmap.d.ts +7 -7
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementCallout.d.ts","sourceRoot":"","sources":["../../../src/components/VizElement/ElementCallout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAiBvF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ElementCallout.d.ts","sourceRoot":"","sources":["../../../src/components/VizElement/ElementCallout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAiBvF,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,OAAO,CAAC;AAExD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,YAAY,CAAC,EAAE,oBAAoB,CAAC;CACrC;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkDxD,CAAC"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { EClickMode, EClickRankType, EClickType, EDeviceType, EHeatmapType, EScrollType } from '../../types';
|
|
2
2
|
interface IHeatmapSettingState {
|
|
3
3
|
isRendering: boolean;
|
|
4
|
-
rankedBy:
|
|
5
|
-
deviceType:
|
|
6
|
-
clickType:
|
|
7
|
-
clickMode:
|
|
8
|
-
scrollType:
|
|
9
|
-
heatmapType:
|
|
4
|
+
rankedBy: EClickRankType | undefined;
|
|
5
|
+
deviceType: EDeviceType | undefined;
|
|
6
|
+
clickType: EClickType | undefined;
|
|
7
|
+
clickMode: EClickMode | undefined;
|
|
8
|
+
scrollType: EScrollType | undefined;
|
|
9
|
+
heatmapType: EHeatmapType | undefined;
|
|
10
10
|
}
|
|
11
11
|
interface IHeatmapSettingActions {
|
|
12
|
-
setRankedBy: (rankedBy:
|
|
13
|
-
setDeviceType: (deviceType:
|
|
14
|
-
setClickType: (clickType:
|
|
15
|
-
setClickMode: (clickMode:
|
|
16
|
-
setScrollType: (scrollType:
|
|
17
|
-
setHeatmapType: (heatmapType:
|
|
12
|
+
setRankedBy: (rankedBy: EClickRankType) => void;
|
|
13
|
+
setDeviceType: (deviceType: EDeviceType) => void;
|
|
14
|
+
setClickType: (clickType: EClickType) => void;
|
|
15
|
+
setClickMode: (clickMode: EClickMode) => void;
|
|
16
|
+
setScrollType: (scrollType: EScrollType) => void;
|
|
17
|
+
setHeatmapType: (heatmapType: EHeatmapType) => void;
|
|
18
18
|
setIsRendering: (isRendering: boolean) => void;
|
|
19
19
|
clearView: (viewId: string) => void;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReplayRender.d.ts","sourceRoot":"","sources":["../../../src/hooks/viz-render/useReplayRender.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useReplayRender.d.ts","sourceRoot":"","sources":["../../../src/hooks/viz-render/useReplayRender.ts"],"names":[],"mappings":"AASA,UAAU,sBAAsB;IAC9B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACrD,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,eAAe,QAAO,sBAgJlC,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -149,53 +149,53 @@ function useDebounceCallback(callback, delay) {
|
|
|
149
149
|
}, [delay]);
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
var
|
|
153
|
-
(function (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
})(
|
|
158
|
-
var
|
|
159
|
-
(function (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
})(
|
|
163
|
-
var
|
|
164
|
-
(function (
|
|
152
|
+
var EDeviceType;
|
|
153
|
+
(function (EDeviceType) {
|
|
154
|
+
EDeviceType["Desktop"] = "DESKTOP";
|
|
155
|
+
EDeviceType["Mobile"] = "MOBILE";
|
|
156
|
+
EDeviceType["Tablet"] = "TABLET";
|
|
157
|
+
})(EDeviceType || (EDeviceType = {}));
|
|
158
|
+
var EHeatmapType;
|
|
159
|
+
(function (EHeatmapType) {
|
|
160
|
+
EHeatmapType["Click"] = "click";
|
|
161
|
+
EHeatmapType["Scroll"] = "scroll";
|
|
162
|
+
})(EHeatmapType || (EHeatmapType = {}));
|
|
163
|
+
var EClickType;
|
|
164
|
+
(function (EClickType) {
|
|
165
165
|
/** Return all clicks (default) */
|
|
166
|
-
|
|
166
|
+
EClickType["All"] = "ALL";
|
|
167
167
|
/** Rapid clicks in a small area, indicating user frustration */
|
|
168
|
-
|
|
168
|
+
EClickType["Rage"] = "RAGE";
|
|
169
169
|
/** Clicks with no effect (no navigation, no state change) */
|
|
170
|
-
|
|
170
|
+
EClickType["Dead"] = "DEAD";
|
|
171
171
|
/** Clicks followed by JavaScript errors */
|
|
172
|
-
|
|
172
|
+
EClickType["Error"] = "ERROR";
|
|
173
173
|
/** The first click of the session */
|
|
174
|
-
|
|
174
|
+
EClickType["First"] = "FIRST";
|
|
175
175
|
/** The last click of the session */
|
|
176
|
-
|
|
176
|
+
EClickType["Last"] = "LAST";
|
|
177
177
|
/** Normal click with no special behavior (fallback type) */
|
|
178
|
-
|
|
179
|
-
})(
|
|
180
|
-
var
|
|
181
|
-
(function (
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
})(
|
|
188
|
-
var
|
|
189
|
-
(function (
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
})(
|
|
193
|
-
var
|
|
194
|
-
(function (
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
})(
|
|
178
|
+
EClickType["Standard"] = "STANDARD";
|
|
179
|
+
})(EClickType || (EClickType = {}));
|
|
180
|
+
var EClickRankType;
|
|
181
|
+
(function (EClickRankType) {
|
|
182
|
+
EClickRankType["MostClicks"] = "most-clicks";
|
|
183
|
+
EClickRankType["Revenue"] = "revenue";
|
|
184
|
+
EClickRankType["ConversionRate"] = "conversion-rate";
|
|
185
|
+
EClickRankType["RevenuePerClick"] = "revenue-per-click";
|
|
186
|
+
EClickRankType["RevenuePerSession"] = "revenue-per-session";
|
|
187
|
+
})(EClickRankType || (EClickRankType = {}));
|
|
188
|
+
var EClickMode;
|
|
189
|
+
(function (EClickMode) {
|
|
190
|
+
EClickMode["Default"] = "default";
|
|
191
|
+
EClickMode["Area"] = "click-area";
|
|
192
|
+
})(EClickMode || (EClickMode = {}));
|
|
193
|
+
var EScrollType;
|
|
194
|
+
(function (EScrollType) {
|
|
195
|
+
EScrollType["Depth"] = "scroll-depth";
|
|
196
|
+
EScrollType["Attention"] = "attention-scroll";
|
|
197
|
+
EScrollType["Revenue"] = "revenue-scroll";
|
|
198
|
+
})(EScrollType || (EScrollType = {}));
|
|
199
199
|
|
|
200
200
|
const ViewIdContext = createContext(undefined);
|
|
201
201
|
const useViewIdContext = () => {
|
|
@@ -307,7 +307,7 @@ const useHeatmapConfigStore = create()((set) => {
|
|
|
307
307
|
return {
|
|
308
308
|
mode: 'single',
|
|
309
309
|
sidebarWidth: DEFAULT_SIDEBAR_WIDTH,
|
|
310
|
-
clickMode:
|
|
310
|
+
clickMode: EClickMode.Default,
|
|
311
311
|
isRendering: true,
|
|
312
312
|
setMode: (mode) => set({ mode }),
|
|
313
313
|
resetMode: () => set({ mode: 'single' }),
|
|
@@ -416,12 +416,12 @@ const useHeatmapDataStore = create()(subscribeWithSelector((set) => {
|
|
|
416
416
|
const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
|
|
417
417
|
return {
|
|
418
418
|
isRendering: new Map([[DEFAULT_VIEW_ID, false]]),
|
|
419
|
-
rankedBy: new Map([[DEFAULT_VIEW_ID,
|
|
420
|
-
deviceType: new Map([[DEFAULT_VIEW_ID,
|
|
421
|
-
clickType: new Map([[DEFAULT_VIEW_ID,
|
|
422
|
-
clickMode: new Map([[DEFAULT_VIEW_ID,
|
|
423
|
-
scrollType: new Map([[DEFAULT_VIEW_ID,
|
|
424
|
-
heatmapType: new Map([[DEFAULT_VIEW_ID,
|
|
419
|
+
rankedBy: new Map([[DEFAULT_VIEW_ID, EClickRankType.MostClicks]]),
|
|
420
|
+
deviceType: new Map([[DEFAULT_VIEW_ID, EDeviceType.Desktop]]),
|
|
421
|
+
clickType: new Map([[DEFAULT_VIEW_ID, EClickType.All]]),
|
|
422
|
+
clickMode: new Map([[DEFAULT_VIEW_ID, EClickMode.Default]]),
|
|
423
|
+
scrollType: new Map([[DEFAULT_VIEW_ID, EScrollType.Depth]]),
|
|
424
|
+
heatmapType: new Map([[DEFAULT_VIEW_ID, EHeatmapType.Click]]),
|
|
425
425
|
setIsRendering: (isRendering, viewId = DEFAULT_VIEW_ID) => set((prev) => {
|
|
426
426
|
const newIsRendering = new Map(prev.isRendering);
|
|
427
427
|
newIsRendering.set(viewId, isRendering);
|
|
@@ -503,12 +503,12 @@ const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
|
|
|
503
503
|
}),
|
|
504
504
|
resetAll: () => set({
|
|
505
505
|
isRendering: new Map([[DEFAULT_VIEW_ID, false]]),
|
|
506
|
-
rankedBy: new Map([[DEFAULT_VIEW_ID,
|
|
507
|
-
deviceType: new Map([[DEFAULT_VIEW_ID,
|
|
508
|
-
clickType: new Map([[DEFAULT_VIEW_ID,
|
|
509
|
-
clickMode: new Map([[DEFAULT_VIEW_ID,
|
|
510
|
-
scrollType: new Map([[DEFAULT_VIEW_ID,
|
|
511
|
-
heatmapType: new Map([[DEFAULT_VIEW_ID,
|
|
506
|
+
rankedBy: new Map([[DEFAULT_VIEW_ID, EClickRankType.MostClicks]]),
|
|
507
|
+
deviceType: new Map([[DEFAULT_VIEW_ID, EDeviceType.Desktop]]),
|
|
508
|
+
clickType: new Map([[DEFAULT_VIEW_ID, EClickType.All]]),
|
|
509
|
+
clickMode: new Map([[DEFAULT_VIEW_ID, EClickMode.Default]]),
|
|
510
|
+
scrollType: new Map([[DEFAULT_VIEW_ID, EScrollType.Depth]]),
|
|
511
|
+
heatmapType: new Map([[DEFAULT_VIEW_ID, EHeatmapType.Click]]),
|
|
512
512
|
}),
|
|
513
513
|
};
|
|
514
514
|
}));
|
|
@@ -1339,11 +1339,11 @@ const useHeatmapWidthByDevice = () => {
|
|
|
1339
1339
|
if (!deviceType)
|
|
1340
1340
|
return 1440;
|
|
1341
1341
|
switch (deviceType) {
|
|
1342
|
-
case
|
|
1342
|
+
case EDeviceType.Desktop:
|
|
1343
1343
|
return 1440;
|
|
1344
|
-
case
|
|
1344
|
+
case EDeviceType.Tablet:
|
|
1345
1345
|
return 768;
|
|
1346
|
-
case
|
|
1346
|
+
case EDeviceType.Mobile:
|
|
1347
1347
|
return 375;
|
|
1348
1348
|
}
|
|
1349
1349
|
}
|
|
@@ -4449,15 +4449,15 @@ const useHeatmapCanvas = () => {
|
|
|
4449
4449
|
const { start: startScrollmap } = useScrollmap();
|
|
4450
4450
|
useEffect(() => {
|
|
4451
4451
|
switch (heatmapType) {
|
|
4452
|
-
case
|
|
4453
|
-
if (clickMode ===
|
|
4452
|
+
case EHeatmapType.Click:
|
|
4453
|
+
if (clickMode === EClickMode.Default) {
|
|
4454
4454
|
startClickmap();
|
|
4455
4455
|
}
|
|
4456
4456
|
else {
|
|
4457
4457
|
startAreaClickmap();
|
|
4458
4458
|
}
|
|
4459
4459
|
break;
|
|
4460
|
-
case
|
|
4460
|
+
case EHeatmapType.Scroll:
|
|
4461
4461
|
startScrollmap();
|
|
4462
4462
|
break;
|
|
4463
4463
|
}
|
|
@@ -6456,7 +6456,8 @@ function sortEvents(a, b) {
|
|
|
6456
6456
|
}
|
|
6457
6457
|
|
|
6458
6458
|
const useReplayRender = () => {
|
|
6459
|
-
const
|
|
6459
|
+
const setIframeHeight = useHeatmapVizRect((s) => s.setIframeHeight);
|
|
6460
|
+
const setIsRenderViz = useHeatmapViz((s) => s.setIsRenderViz);
|
|
6460
6461
|
const { data } = useHeatmapData();
|
|
6461
6462
|
const visualizerRef = useRef(null);
|
|
6462
6463
|
const iframeRef = useRef(null);
|
|
@@ -6474,15 +6475,16 @@ const useReplayRender = () => {
|
|
|
6474
6475
|
const mobile = isMobileDevice(userAgent);
|
|
6475
6476
|
visualizer.setup(iframe.contentWindow, {
|
|
6476
6477
|
version: envelope.version,
|
|
6477
|
-
onresize: (
|
|
6478
|
-
|
|
6478
|
+
onresize: (height) => {
|
|
6479
|
+
height && setIframeHeight(height);
|
|
6480
|
+
setIsRenderViz(true);
|
|
6479
6481
|
},
|
|
6480
6482
|
mobile,
|
|
6481
6483
|
vNext: true,
|
|
6482
6484
|
locale: 'en-us',
|
|
6483
6485
|
});
|
|
6484
6486
|
return visualizer;
|
|
6485
|
-
}, [
|
|
6487
|
+
}, []);
|
|
6486
6488
|
// Animation loop for replay
|
|
6487
6489
|
const replayLoop = useCallback(() => {
|
|
6488
6490
|
if (!isPlayingRef.current)
|
|
@@ -8319,13 +8321,13 @@ const VizElements = ({ iframeRef, visualRef, wrapperRef }) => {
|
|
|
8319
8321
|
const VizClickmap = ({ iframeRef, visualRef, wrapperRef }) => {
|
|
8320
8322
|
const clickMode = useHeatmapSetting((state) => state.clickMode);
|
|
8321
8323
|
const heatmapType = useHeatmapSetting((state) => state.heatmapType);
|
|
8322
|
-
const isClickType = heatmapType ===
|
|
8324
|
+
const isClickType = heatmapType === EHeatmapType.Click;
|
|
8323
8325
|
if (!isClickType)
|
|
8324
8326
|
return null;
|
|
8325
8327
|
switch (clickMode) {
|
|
8326
|
-
case
|
|
8328
|
+
case EClickMode.Default:
|
|
8327
8329
|
return jsx(VizElements, { iframeRef: iframeRef, visualRef: visualRef, wrapperRef: wrapperRef });
|
|
8328
|
-
case
|
|
8330
|
+
case EClickMode.Area:
|
|
8329
8331
|
return (jsx(VizAreaClick, { iframeRef: iframeRef, visualRef: visualRef, autoCreateTopN: 10, onAreaClick: (_area) => {
|
|
8330
8332
|
// console.log('area clicked', area);
|
|
8331
8333
|
} }));
|
|
@@ -8335,7 +8337,7 @@ const VizClickmap = ({ iframeRef, visualRef, wrapperRef }) => {
|
|
|
8335
8337
|
const ScrollMapMinimap = ({ zones, maxUsers }) => {
|
|
8336
8338
|
const scrollType = useHeatmapSetting((s) => s.scrollType);
|
|
8337
8339
|
const showMinimap = useHeatmapScroll((s) => s.showMinimap);
|
|
8338
|
-
const isScrollType = [
|
|
8340
|
+
const isScrollType = [EScrollType.Attention].includes(scrollType ?? EScrollType.Depth);
|
|
8339
8341
|
if (!showMinimap || !isScrollType)
|
|
8340
8342
|
return null;
|
|
8341
8343
|
return (jsx("div", { style: {
|
|
@@ -8506,7 +8508,7 @@ const ScrollmapMarker = ({ iframeRef, wrapperRef }) => {
|
|
|
8506
8508
|
{ percent: 25, label: '25%', color: '#EF4444' },
|
|
8507
8509
|
{ percent: 5, label: '5%', color: '#8B5CF6' },
|
|
8508
8510
|
];
|
|
8509
|
-
const isScrollDepth = scrollType ===
|
|
8511
|
+
const isScrollDepth = scrollType === EScrollType.Depth;
|
|
8510
8512
|
if (!isScrollDepth)
|
|
8511
8513
|
return null;
|
|
8512
8514
|
return (jsx(Fragment, { children: boundaries.map((boundary) => {
|
|
@@ -8558,12 +8560,12 @@ const ScrollmapMarker = ({ iframeRef, wrapperRef }) => {
|
|
|
8558
8560
|
}) }));
|
|
8559
8561
|
};
|
|
8560
8562
|
|
|
8561
|
-
const SCROLL_TYPES = [
|
|
8563
|
+
const SCROLL_TYPES = [EHeatmapType.Scroll];
|
|
8562
8564
|
const VizScrollMap = ({ iframeRef, wrapperRef }) => {
|
|
8563
8565
|
const heatmapType = useHeatmapSetting((s) => s.heatmapType);
|
|
8564
8566
|
const iframeHeight = useHeatmapVizRect((s) => s.iframeHeight);
|
|
8565
8567
|
// useRenderCount('VizScrollMap');
|
|
8566
|
-
const isHeatmapScroll = SCROLL_TYPES.includes(heatmapType ??
|
|
8568
|
+
const isHeatmapScroll = SCROLL_TYPES.includes(heatmapType ?? EHeatmapType.Click);
|
|
8567
8569
|
if (!iframeHeight || !isHeatmapScroll)
|
|
8568
8570
|
return null;
|
|
8569
8571
|
return (jsxs("div", { style: {
|
|
@@ -8753,4 +8755,4 @@ const HeatmapLayout = ({ data, clickmap, clickAreas, scrollmap, controls, dataIn
|
|
|
8753
8755
|
}
|
|
8754
8756
|
};
|
|
8755
8757
|
|
|
8756
|
-
export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO,
|
|
8758
|
+
export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO, EClickMode, EClickRankType, EClickType, EDeviceType, EHeatmapType, ELM_CALLOUT_CONFIG, EScrollType, GraphView, HEATMAP_CONFIG, HEATMAP_IFRAME, HEATMAP_STYLE, HeatmapLayout, ViewIdContext, Z_INDEX, compareViewPerformance, convertViewportToIframeCoords, createStorePerformanceTracker, createViewContextHook, downloadPerformanceReport, getCompareViewId, getMetricsByViewId, getPerformanceReportJSON, getScrollGradientColor, performanceLogger, printPerformanceSummary, scrollToElementIfNeeded, sendPerformanceReport, serializeAreas, trackStoreAction, useAreaCreation, useAreaEditMode, useAreaFilterVisible, useAreaHydration, useAreaInteraction, useAreaPositionsUpdater, useAreaRectSync, useAreaRendererContainer, useAreaTopAutoDetect, useClickedElement, useDebounceCallback, useElementCalloutVisible, useHeatmapAreaClick, useHeatmapCanvas, useHeatmapClick, useHeatmapCompareStore, useHeatmapConfigStore, useHeatmapCopyView, useHeatmapData, useHeatmapEffects, useHeatmapElementPosition, useHeatmapHover, useHeatmapLiveStore, useHeatmapRenderByMode, useHeatmapScale, useHeatmapScroll, useHeatmapSetting, useHeatmapViz, useHeatmapVizRect, useHeatmapWidthByDevice, useHoveredElement, useIframeHeight, useIframeHeightProcessor, useMeasureFunction, useRegisterConfig, useRegisterControl, useRegisterData, useRegisterHeatmap, useRenderCount, useScrollmapZones, useTrackHookCall, useViewIdContext, useVizLiveRender, useWhyDidYouUpdate, useWrapperRefHeight, useZonePositions, withPerformanceTracking };
|
package/dist/esm/index.mjs
CHANGED
|
@@ -149,53 +149,53 @@ function useDebounceCallback(callback, delay) {
|
|
|
149
149
|
}, [delay]);
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
var
|
|
153
|
-
(function (
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
})(
|
|
158
|
-
var
|
|
159
|
-
(function (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
})(
|
|
163
|
-
var
|
|
164
|
-
(function (
|
|
152
|
+
var EDeviceType;
|
|
153
|
+
(function (EDeviceType) {
|
|
154
|
+
EDeviceType["Desktop"] = "DESKTOP";
|
|
155
|
+
EDeviceType["Mobile"] = "MOBILE";
|
|
156
|
+
EDeviceType["Tablet"] = "TABLET";
|
|
157
|
+
})(EDeviceType || (EDeviceType = {}));
|
|
158
|
+
var EHeatmapType;
|
|
159
|
+
(function (EHeatmapType) {
|
|
160
|
+
EHeatmapType["Click"] = "click";
|
|
161
|
+
EHeatmapType["Scroll"] = "scroll";
|
|
162
|
+
})(EHeatmapType || (EHeatmapType = {}));
|
|
163
|
+
var EClickType;
|
|
164
|
+
(function (EClickType) {
|
|
165
165
|
/** Return all clicks (default) */
|
|
166
|
-
|
|
166
|
+
EClickType["All"] = "ALL";
|
|
167
167
|
/** Rapid clicks in a small area, indicating user frustration */
|
|
168
|
-
|
|
168
|
+
EClickType["Rage"] = "RAGE";
|
|
169
169
|
/** Clicks with no effect (no navigation, no state change) */
|
|
170
|
-
|
|
170
|
+
EClickType["Dead"] = "DEAD";
|
|
171
171
|
/** Clicks followed by JavaScript errors */
|
|
172
|
-
|
|
172
|
+
EClickType["Error"] = "ERROR";
|
|
173
173
|
/** The first click of the session */
|
|
174
|
-
|
|
174
|
+
EClickType["First"] = "FIRST";
|
|
175
175
|
/** The last click of the session */
|
|
176
|
-
|
|
176
|
+
EClickType["Last"] = "LAST";
|
|
177
177
|
/** Normal click with no special behavior (fallback type) */
|
|
178
|
-
|
|
179
|
-
})(
|
|
180
|
-
var
|
|
181
|
-
(function (
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
})(
|
|
188
|
-
var
|
|
189
|
-
(function (
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
})(
|
|
193
|
-
var
|
|
194
|
-
(function (
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
})(
|
|
178
|
+
EClickType["Standard"] = "STANDARD";
|
|
179
|
+
})(EClickType || (EClickType = {}));
|
|
180
|
+
var EClickRankType;
|
|
181
|
+
(function (EClickRankType) {
|
|
182
|
+
EClickRankType["MostClicks"] = "most-clicks";
|
|
183
|
+
EClickRankType["Revenue"] = "revenue";
|
|
184
|
+
EClickRankType["ConversionRate"] = "conversion-rate";
|
|
185
|
+
EClickRankType["RevenuePerClick"] = "revenue-per-click";
|
|
186
|
+
EClickRankType["RevenuePerSession"] = "revenue-per-session";
|
|
187
|
+
})(EClickRankType || (EClickRankType = {}));
|
|
188
|
+
var EClickMode;
|
|
189
|
+
(function (EClickMode) {
|
|
190
|
+
EClickMode["Default"] = "default";
|
|
191
|
+
EClickMode["Area"] = "click-area";
|
|
192
|
+
})(EClickMode || (EClickMode = {}));
|
|
193
|
+
var EScrollType;
|
|
194
|
+
(function (EScrollType) {
|
|
195
|
+
EScrollType["Depth"] = "scroll-depth";
|
|
196
|
+
EScrollType["Attention"] = "attention-scroll";
|
|
197
|
+
EScrollType["Revenue"] = "revenue-scroll";
|
|
198
|
+
})(EScrollType || (EScrollType = {}));
|
|
199
199
|
|
|
200
200
|
const ViewIdContext = createContext(undefined);
|
|
201
201
|
const useViewIdContext = () => {
|
|
@@ -307,7 +307,7 @@ const useHeatmapConfigStore = create()((set) => {
|
|
|
307
307
|
return {
|
|
308
308
|
mode: 'single',
|
|
309
309
|
sidebarWidth: DEFAULT_SIDEBAR_WIDTH,
|
|
310
|
-
clickMode:
|
|
310
|
+
clickMode: EClickMode.Default,
|
|
311
311
|
isRendering: true,
|
|
312
312
|
setMode: (mode) => set({ mode }),
|
|
313
313
|
resetMode: () => set({ mode: 'single' }),
|
|
@@ -416,12 +416,12 @@ const useHeatmapDataStore = create()(subscribeWithSelector((set) => {
|
|
|
416
416
|
const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
|
|
417
417
|
return {
|
|
418
418
|
isRendering: new Map([[DEFAULT_VIEW_ID, false]]),
|
|
419
|
-
rankedBy: new Map([[DEFAULT_VIEW_ID,
|
|
420
|
-
deviceType: new Map([[DEFAULT_VIEW_ID,
|
|
421
|
-
clickType: new Map([[DEFAULT_VIEW_ID,
|
|
422
|
-
clickMode: new Map([[DEFAULT_VIEW_ID,
|
|
423
|
-
scrollType: new Map([[DEFAULT_VIEW_ID,
|
|
424
|
-
heatmapType: new Map([[DEFAULT_VIEW_ID,
|
|
419
|
+
rankedBy: new Map([[DEFAULT_VIEW_ID, EClickRankType.MostClicks]]),
|
|
420
|
+
deviceType: new Map([[DEFAULT_VIEW_ID, EDeviceType.Desktop]]),
|
|
421
|
+
clickType: new Map([[DEFAULT_VIEW_ID, EClickType.All]]),
|
|
422
|
+
clickMode: new Map([[DEFAULT_VIEW_ID, EClickMode.Default]]),
|
|
423
|
+
scrollType: new Map([[DEFAULT_VIEW_ID, EScrollType.Depth]]),
|
|
424
|
+
heatmapType: new Map([[DEFAULT_VIEW_ID, EHeatmapType.Click]]),
|
|
425
425
|
setIsRendering: (isRendering, viewId = DEFAULT_VIEW_ID) => set((prev) => {
|
|
426
426
|
const newIsRendering = new Map(prev.isRendering);
|
|
427
427
|
newIsRendering.set(viewId, isRendering);
|
|
@@ -503,12 +503,12 @@ const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
|
|
|
503
503
|
}),
|
|
504
504
|
resetAll: () => set({
|
|
505
505
|
isRendering: new Map([[DEFAULT_VIEW_ID, false]]),
|
|
506
|
-
rankedBy: new Map([[DEFAULT_VIEW_ID,
|
|
507
|
-
deviceType: new Map([[DEFAULT_VIEW_ID,
|
|
508
|
-
clickType: new Map([[DEFAULT_VIEW_ID,
|
|
509
|
-
clickMode: new Map([[DEFAULT_VIEW_ID,
|
|
510
|
-
scrollType: new Map([[DEFAULT_VIEW_ID,
|
|
511
|
-
heatmapType: new Map([[DEFAULT_VIEW_ID,
|
|
506
|
+
rankedBy: new Map([[DEFAULT_VIEW_ID, EClickRankType.MostClicks]]),
|
|
507
|
+
deviceType: new Map([[DEFAULT_VIEW_ID, EDeviceType.Desktop]]),
|
|
508
|
+
clickType: new Map([[DEFAULT_VIEW_ID, EClickType.All]]),
|
|
509
|
+
clickMode: new Map([[DEFAULT_VIEW_ID, EClickMode.Default]]),
|
|
510
|
+
scrollType: new Map([[DEFAULT_VIEW_ID, EScrollType.Depth]]),
|
|
511
|
+
heatmapType: new Map([[DEFAULT_VIEW_ID, EHeatmapType.Click]]),
|
|
512
512
|
}),
|
|
513
513
|
};
|
|
514
514
|
}));
|
|
@@ -1339,11 +1339,11 @@ const useHeatmapWidthByDevice = () => {
|
|
|
1339
1339
|
if (!deviceType)
|
|
1340
1340
|
return 1440;
|
|
1341
1341
|
switch (deviceType) {
|
|
1342
|
-
case
|
|
1342
|
+
case EDeviceType.Desktop:
|
|
1343
1343
|
return 1440;
|
|
1344
|
-
case
|
|
1344
|
+
case EDeviceType.Tablet:
|
|
1345
1345
|
return 768;
|
|
1346
|
-
case
|
|
1346
|
+
case EDeviceType.Mobile:
|
|
1347
1347
|
return 375;
|
|
1348
1348
|
}
|
|
1349
1349
|
}
|
|
@@ -4449,15 +4449,15 @@ const useHeatmapCanvas = () => {
|
|
|
4449
4449
|
const { start: startScrollmap } = useScrollmap();
|
|
4450
4450
|
useEffect(() => {
|
|
4451
4451
|
switch (heatmapType) {
|
|
4452
|
-
case
|
|
4453
|
-
if (clickMode ===
|
|
4452
|
+
case EHeatmapType.Click:
|
|
4453
|
+
if (clickMode === EClickMode.Default) {
|
|
4454
4454
|
startClickmap();
|
|
4455
4455
|
}
|
|
4456
4456
|
else {
|
|
4457
4457
|
startAreaClickmap();
|
|
4458
4458
|
}
|
|
4459
4459
|
break;
|
|
4460
|
-
case
|
|
4460
|
+
case EHeatmapType.Scroll:
|
|
4461
4461
|
startScrollmap();
|
|
4462
4462
|
break;
|
|
4463
4463
|
}
|
|
@@ -6456,7 +6456,8 @@ function sortEvents(a, b) {
|
|
|
6456
6456
|
}
|
|
6457
6457
|
|
|
6458
6458
|
const useReplayRender = () => {
|
|
6459
|
-
const
|
|
6459
|
+
const setIframeHeight = useHeatmapVizRect((s) => s.setIframeHeight);
|
|
6460
|
+
const setIsRenderViz = useHeatmapViz((s) => s.setIsRenderViz);
|
|
6460
6461
|
const { data } = useHeatmapData();
|
|
6461
6462
|
const visualizerRef = useRef(null);
|
|
6462
6463
|
const iframeRef = useRef(null);
|
|
@@ -6474,15 +6475,16 @@ const useReplayRender = () => {
|
|
|
6474
6475
|
const mobile = isMobileDevice(userAgent);
|
|
6475
6476
|
visualizer.setup(iframe.contentWindow, {
|
|
6476
6477
|
version: envelope.version,
|
|
6477
|
-
onresize: (
|
|
6478
|
-
|
|
6478
|
+
onresize: (height) => {
|
|
6479
|
+
height && setIframeHeight(height);
|
|
6480
|
+
setIsRenderViz(true);
|
|
6479
6481
|
},
|
|
6480
6482
|
mobile,
|
|
6481
6483
|
vNext: true,
|
|
6482
6484
|
locale: 'en-us',
|
|
6483
6485
|
});
|
|
6484
6486
|
return visualizer;
|
|
6485
|
-
}, [
|
|
6487
|
+
}, []);
|
|
6486
6488
|
// Animation loop for replay
|
|
6487
6489
|
const replayLoop = useCallback(() => {
|
|
6488
6490
|
if (!isPlayingRef.current)
|
|
@@ -8319,13 +8321,13 @@ const VizElements = ({ iframeRef, visualRef, wrapperRef }) => {
|
|
|
8319
8321
|
const VizClickmap = ({ iframeRef, visualRef, wrapperRef }) => {
|
|
8320
8322
|
const clickMode = useHeatmapSetting((state) => state.clickMode);
|
|
8321
8323
|
const heatmapType = useHeatmapSetting((state) => state.heatmapType);
|
|
8322
|
-
const isClickType = heatmapType ===
|
|
8324
|
+
const isClickType = heatmapType === EHeatmapType.Click;
|
|
8323
8325
|
if (!isClickType)
|
|
8324
8326
|
return null;
|
|
8325
8327
|
switch (clickMode) {
|
|
8326
|
-
case
|
|
8328
|
+
case EClickMode.Default:
|
|
8327
8329
|
return jsx(VizElements, { iframeRef: iframeRef, visualRef: visualRef, wrapperRef: wrapperRef });
|
|
8328
|
-
case
|
|
8330
|
+
case EClickMode.Area:
|
|
8329
8331
|
return (jsx(VizAreaClick, { iframeRef: iframeRef, visualRef: visualRef, autoCreateTopN: 10, onAreaClick: (_area) => {
|
|
8330
8332
|
// console.log('area clicked', area);
|
|
8331
8333
|
} }));
|
|
@@ -8335,7 +8337,7 @@ const VizClickmap = ({ iframeRef, visualRef, wrapperRef }) => {
|
|
|
8335
8337
|
const ScrollMapMinimap = ({ zones, maxUsers }) => {
|
|
8336
8338
|
const scrollType = useHeatmapSetting((s) => s.scrollType);
|
|
8337
8339
|
const showMinimap = useHeatmapScroll((s) => s.showMinimap);
|
|
8338
|
-
const isScrollType = [
|
|
8340
|
+
const isScrollType = [EScrollType.Attention].includes(scrollType ?? EScrollType.Depth);
|
|
8339
8341
|
if (!showMinimap || !isScrollType)
|
|
8340
8342
|
return null;
|
|
8341
8343
|
return (jsx("div", { style: {
|
|
@@ -8506,7 +8508,7 @@ const ScrollmapMarker = ({ iframeRef, wrapperRef }) => {
|
|
|
8506
8508
|
{ percent: 25, label: '25%', color: '#EF4444' },
|
|
8507
8509
|
{ percent: 5, label: '5%', color: '#8B5CF6' },
|
|
8508
8510
|
];
|
|
8509
|
-
const isScrollDepth = scrollType ===
|
|
8511
|
+
const isScrollDepth = scrollType === EScrollType.Depth;
|
|
8510
8512
|
if (!isScrollDepth)
|
|
8511
8513
|
return null;
|
|
8512
8514
|
return (jsx(Fragment, { children: boundaries.map((boundary) => {
|
|
@@ -8558,12 +8560,12 @@ const ScrollmapMarker = ({ iframeRef, wrapperRef }) => {
|
|
|
8558
8560
|
}) }));
|
|
8559
8561
|
};
|
|
8560
8562
|
|
|
8561
|
-
const SCROLL_TYPES = [
|
|
8563
|
+
const SCROLL_TYPES = [EHeatmapType.Scroll];
|
|
8562
8564
|
const VizScrollMap = ({ iframeRef, wrapperRef }) => {
|
|
8563
8565
|
const heatmapType = useHeatmapSetting((s) => s.heatmapType);
|
|
8564
8566
|
const iframeHeight = useHeatmapVizRect((s) => s.iframeHeight);
|
|
8565
8567
|
// useRenderCount('VizScrollMap');
|
|
8566
|
-
const isHeatmapScroll = SCROLL_TYPES.includes(heatmapType ??
|
|
8568
|
+
const isHeatmapScroll = SCROLL_TYPES.includes(heatmapType ?? EHeatmapType.Click);
|
|
8567
8569
|
if (!iframeHeight || !isHeatmapScroll)
|
|
8568
8570
|
return null;
|
|
8569
8571
|
return (jsxs("div", { style: {
|
|
@@ -8753,4 +8755,4 @@ const HeatmapLayout = ({ data, clickmap, clickAreas, scrollmap, controls, dataIn
|
|
|
8753
8755
|
}
|
|
8754
8756
|
};
|
|
8755
8757
|
|
|
8756
|
-
export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO,
|
|
8758
|
+
export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO, EClickMode, EClickRankType, EClickType, EDeviceType, EHeatmapType, ELM_CALLOUT_CONFIG, EScrollType, GraphView, HEATMAP_CONFIG, HEATMAP_IFRAME, HEATMAP_STYLE, HeatmapLayout, ViewIdContext, Z_INDEX, compareViewPerformance, convertViewportToIframeCoords, createStorePerformanceTracker, createViewContextHook, downloadPerformanceReport, getCompareViewId, getMetricsByViewId, getPerformanceReportJSON, getScrollGradientColor, performanceLogger, printPerformanceSummary, scrollToElementIfNeeded, sendPerformanceReport, serializeAreas, trackStoreAction, useAreaCreation, useAreaEditMode, useAreaFilterVisible, useAreaHydration, useAreaInteraction, useAreaPositionsUpdater, useAreaRectSync, useAreaRendererContainer, useAreaTopAutoDetect, useClickedElement, useDebounceCallback, useElementCalloutVisible, useHeatmapAreaClick, useHeatmapCanvas, useHeatmapClick, useHeatmapCompareStore, useHeatmapConfigStore, useHeatmapCopyView, useHeatmapData, useHeatmapEffects, useHeatmapElementPosition, useHeatmapHover, useHeatmapLiveStore, useHeatmapRenderByMode, useHeatmapScale, useHeatmapScroll, useHeatmapSetting, useHeatmapViz, useHeatmapVizRect, useHeatmapWidthByDevice, useHoveredElement, useIframeHeight, useIframeHeightProcessor, useMeasureFunction, useRegisterConfig, useRegisterControl, useRegisterData, useRegisterHeatmap, useRenderCount, useScrollmapZones, useTrackHookCall, useViewIdContext, useVizLiveRender, useWhyDidYouUpdate, useWrapperRefHeight, useZonePositions, withPerformanceTracking };
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EClickMode, EClickRankType, EClickType, EDeviceType, EHeatmapType, EScrollType } from '../types';
|
|
2
2
|
export interface IHeatmapSettingStore {
|
|
3
3
|
isRendering: Map<string, boolean>;
|
|
4
|
-
rankedBy: Map<string,
|
|
5
|
-
deviceType: Map<string,
|
|
6
|
-
clickType: Map<string,
|
|
7
|
-
clickMode: Map<string,
|
|
8
|
-
scrollType: Map<string,
|
|
9
|
-
heatmapType: Map<string,
|
|
4
|
+
rankedBy: Map<string, EClickRankType | undefined>;
|
|
5
|
+
deviceType: Map<string, EDeviceType | undefined>;
|
|
6
|
+
clickType: Map<string, EClickType | undefined>;
|
|
7
|
+
clickMode: Map<string, EClickMode | undefined>;
|
|
8
|
+
scrollType: Map<string, EScrollType | undefined>;
|
|
9
|
+
heatmapType: Map<string, EHeatmapType | undefined>;
|
|
10
10
|
setIsRendering: (isRendering: boolean, viewId?: string) => void;
|
|
11
|
-
setRankedBy: (rankedBy:
|
|
12
|
-
setDeviceType: (deviceType:
|
|
13
|
-
setClickType: (clickType:
|
|
14
|
-
setClickMode: (clickMode:
|
|
15
|
-
setScrollType: (scrollType:
|
|
16
|
-
setHeatmapType: (heatmapType:
|
|
11
|
+
setRankedBy: (rankedBy: EClickRankType, viewId?: string) => void;
|
|
12
|
+
setDeviceType: (deviceType: EDeviceType, viewId?: string) => void;
|
|
13
|
+
setClickType: (clickType: EClickType, viewId?: string) => void;
|
|
14
|
+
setClickMode: (clickMode: EClickMode, viewId?: string) => void;
|
|
15
|
+
setScrollType: (scrollType: EScrollType, viewId?: string) => void;
|
|
16
|
+
setHeatmapType: (heatmapType: EHeatmapType, viewId?: string) => void;
|
|
17
17
|
copyView: (fromViewId: string, toViewId: string) => void;
|
|
18
18
|
clearView: (viewId: string) => void;
|
|
19
19
|
resetAll: () => void;
|