@gemx-dev/heatmap-react 3.5.62 → 3.5.63

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 (70) hide show
  1. package/dist/esm/components/Layout/Sidebar/PopoverSidebar.d.ts.map +1 -1
  2. package/dist/esm/components/VizDom/VizDomRenderer.d.ts.map +1 -1
  3. package/dist/esm/components/VizDom/WrapperVisual.d.ts.map +1 -1
  4. package/dist/esm/components/VizElement/ElementMissing.d.ts.map +1 -1
  5. package/dist/esm/components/VizElement/ElementOverlay.d.ts.map +1 -1
  6. package/dist/esm/components/VizElement/VizElements.d.ts.map +1 -1
  7. package/dist/esm/components/VizLive/VizLiveRenderer.d.ts.map +1 -1
  8. package/dist/esm/components/VizScrollmap/ScrollMapMinimap.d.ts.map +1 -1
  9. package/dist/esm/components/VizScrollmap/ScrollmapMarker.d.ts.map +1 -1
  10. package/dist/esm/components/VizScrollmap/VizScrollMap.d.ts.map +1 -1
  11. package/dist/esm/hooks/common/index.d.ts +1 -0
  12. package/dist/esm/hooks/common/index.d.ts.map +1 -1
  13. package/dist/esm/hooks/common/useHeatmapWidthByDevice.d.ts +2 -0
  14. package/dist/esm/hooks/common/useHeatmapWidthByDevice.d.ts.map +1 -0
  15. package/dist/esm/hooks/register/useRegisterConfig.d.ts.map +1 -1
  16. package/dist/esm/hooks/view-context/useHeatmapHover.d.ts +3 -27
  17. package/dist/esm/hooks/view-context/useHeatmapHover.d.ts.map +1 -1
  18. package/dist/esm/hooks/view-context/useHeatmapSetting.d.ts +7 -17
  19. package/dist/esm/hooks/view-context/useHeatmapSetting.d.ts.map +1 -1
  20. package/dist/esm/hooks/view-context/useHeatmapViz.d.ts +0 -17
  21. package/dist/esm/hooks/view-context/useHeatmapViz.d.ts.map +1 -1
  22. package/dist/esm/hooks/viz-elm/useHoveredElement.d.ts.map +1 -1
  23. package/dist/esm/hooks/viz-live/useVizLiveRender.d.ts.map +1 -1
  24. package/dist/esm/hooks/viz-render/useHeatmapRender.d.ts.map +1 -1
  25. package/dist/esm/hooks/viz-scale/useHeatmapScale.d.ts.map +1 -1
  26. package/dist/esm/index.js +158 -143
  27. package/dist/esm/index.mjs +158 -143
  28. package/dist/esm/stores/config.d.ts +0 -11
  29. package/dist/esm/stores/config.d.ts.map +1 -1
  30. package/dist/esm/stores/setting.d.ts +7 -1
  31. package/dist/esm/stores/setting.d.ts.map +1 -1
  32. package/dist/esm/stores/viz-hover.d.ts +1 -0
  33. package/dist/esm/stores/viz-hover.d.ts.map +1 -1
  34. package/dist/esm/types/heatmap.d.ts +5 -1
  35. package/dist/esm/types/heatmap.d.ts.map +1 -1
  36. package/dist/umd/components/Layout/Sidebar/PopoverSidebar.d.ts.map +1 -1
  37. package/dist/umd/components/VizDom/VizDomRenderer.d.ts.map +1 -1
  38. package/dist/umd/components/VizDom/WrapperVisual.d.ts.map +1 -1
  39. package/dist/umd/components/VizElement/ElementMissing.d.ts.map +1 -1
  40. package/dist/umd/components/VizElement/ElementOverlay.d.ts.map +1 -1
  41. package/dist/umd/components/VizElement/VizElements.d.ts.map +1 -1
  42. package/dist/umd/components/VizLive/VizLiveRenderer.d.ts.map +1 -1
  43. package/dist/umd/components/VizScrollmap/ScrollMapMinimap.d.ts.map +1 -1
  44. package/dist/umd/components/VizScrollmap/ScrollmapMarker.d.ts.map +1 -1
  45. package/dist/umd/components/VizScrollmap/VizScrollMap.d.ts.map +1 -1
  46. package/dist/umd/hooks/common/index.d.ts +1 -0
  47. package/dist/umd/hooks/common/index.d.ts.map +1 -1
  48. package/dist/umd/hooks/common/useHeatmapWidthByDevice.d.ts +2 -0
  49. package/dist/umd/hooks/common/useHeatmapWidthByDevice.d.ts.map +1 -0
  50. package/dist/umd/hooks/register/useRegisterConfig.d.ts.map +1 -1
  51. package/dist/umd/hooks/view-context/useHeatmapHover.d.ts +3 -27
  52. package/dist/umd/hooks/view-context/useHeatmapHover.d.ts.map +1 -1
  53. package/dist/umd/hooks/view-context/useHeatmapSetting.d.ts +7 -17
  54. package/dist/umd/hooks/view-context/useHeatmapSetting.d.ts.map +1 -1
  55. package/dist/umd/hooks/view-context/useHeatmapViz.d.ts +0 -17
  56. package/dist/umd/hooks/view-context/useHeatmapViz.d.ts.map +1 -1
  57. package/dist/umd/hooks/viz-elm/useHoveredElement.d.ts.map +1 -1
  58. package/dist/umd/hooks/viz-live/useVizLiveRender.d.ts.map +1 -1
  59. package/dist/umd/hooks/viz-render/useHeatmapRender.d.ts.map +1 -1
  60. package/dist/umd/hooks/viz-scale/useHeatmapScale.d.ts.map +1 -1
  61. package/dist/umd/index.js +2 -2
  62. package/dist/umd/stores/config.d.ts +0 -11
  63. package/dist/umd/stores/config.d.ts.map +1 -1
  64. package/dist/umd/stores/setting.d.ts +7 -1
  65. package/dist/umd/stores/setting.d.ts.map +1 -1
  66. package/dist/umd/stores/viz-hover.d.ts +1 -0
  67. package/dist/umd/stores/viz-hover.d.ts.map +1 -1
  68. package/dist/umd/types/heatmap.d.ts +5 -1
  69. package/dist/umd/types/heatmap.d.ts.map +1 -1
  70. package/package.json +4 -4
package/dist/esm/index.js CHANGED
@@ -149,32 +149,15 @@ function useDebounceCallback(callback, delay) {
149
149
  }, [delay]);
150
150
  }
151
151
 
152
- const useHeatmapControlStore = create()((set, get) => {
153
- return {
154
- controls: {
155
- Sidebar: undefined,
156
- SidebarActivator: undefined,
157
- Toolbar: null,
158
- MetricBar: null,
159
- VizLoading: null,
160
- TopBar: undefined,
161
- ElementCallout: undefined,
162
- },
163
- registerControl: (key, control) => {
164
- set({
165
- controls: {
166
- ...get().controls,
167
- [key]: control,
168
- },
169
- });
170
- },
171
- };
172
- });
173
-
152
+ var IDeviceType;
153
+ (function (IDeviceType) {
154
+ IDeviceType["Desktop"] = "desktop";
155
+ IDeviceType["Mobile"] = "mobile";
156
+ IDeviceType["Tablet"] = "tablet";
157
+ })(IDeviceType || (IDeviceType = {}));
174
158
  var IHeatmapType;
175
159
  (function (IHeatmapType) {
176
160
  IHeatmapType["Click"] = "click";
177
- IHeatmapType["ClickArea"] = "click-area";
178
161
  IHeatmapType["Scroll"] = "scroll";
179
162
  })(IHeatmapType || (IHeatmapType = {}));
180
163
  var IClickType;
@@ -207,24 +190,37 @@ var IScrollType;
207
190
  IScrollType["Revenue"] = "revenue-scroll";
208
191
  })(IScrollType || (IScrollType = {}));
209
192
 
193
+ const useHeatmapControlStore = create()((set, get) => {
194
+ return {
195
+ controls: {
196
+ Sidebar: undefined,
197
+ SidebarActivator: undefined,
198
+ Toolbar: null,
199
+ MetricBar: null,
200
+ VizLoading: null,
201
+ TopBar: undefined,
202
+ ElementCallout: undefined,
203
+ },
204
+ registerControl: (key, control) => {
205
+ set({
206
+ controls: {
207
+ ...get().controls,
208
+ [key]: control,
209
+ },
210
+ });
211
+ },
212
+ };
213
+ });
214
+
210
215
  const useHeatmapConfigStore = create()((set) => {
211
216
  return {
212
217
  mode: 'single',
213
- width: 1440,
214
218
  sidebarWidth: DEFAULT_SIDEBAR_WIDTH,
215
- heatmapType: IHeatmapType.Click,
216
- clickType: IClickType.Total,
217
219
  clickMode: IClickMode.Default,
218
- scrollType: IScrollType.Depth,
219
220
  isRendering: true,
220
221
  setMode: (mode) => set({ mode }),
221
222
  resetMode: () => set({ mode: 'single' }),
222
- setWidth: (width) => set({ width }),
223
223
  setSidebarWidth: (sidebarWidth) => set({ sidebarWidth }),
224
- setHeatmapType: (heatmapType) => set({ heatmapType }),
225
- setClickType: (clickType) => set({ clickType }),
226
- setClickMode: (clickMode) => set({ clickMode }),
227
- setScrollType: (scrollType) => set({ scrollType }),
228
224
  setIsRendering: (isRendering) => set({ isRendering }),
229
225
  };
230
226
  });
@@ -329,8 +325,16 @@ const useHeatmapDataStore = create()(subscribeWithSelector((set) => {
329
325
  const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
330
326
  return {
331
327
  rankedBy: new Map([[DEFAULT_VIEW_ID, IClickRankType.MostClicks]]),
328
+ deviceType: new Map([[DEFAULT_VIEW_ID, IDeviceType.Desktop]]),
332
329
  clickType: new Map([[DEFAULT_VIEW_ID, IClickType.Total]]),
330
+ clickMode: new Map([[DEFAULT_VIEW_ID, IClickMode.Default]]),
333
331
  scrollType: new Map([[DEFAULT_VIEW_ID, IScrollType.Depth]]),
332
+ heatmapType: new Map([[DEFAULT_VIEW_ID, IHeatmapType.Click]]),
333
+ setDeviceType: (deviceType, viewId = DEFAULT_VIEW_ID) => set((prev) => {
334
+ const newDeviceType = new Map(prev.deviceType);
335
+ newDeviceType.set(viewId, deviceType);
336
+ return { deviceType: newDeviceType };
337
+ }),
334
338
  setRankedBy: (rankedBy, viewId = DEFAULT_VIEW_ID) => set((prev) => {
335
339
  const newRankedBy = new Map(prev.rankedBy);
336
340
  newRankedBy.set(viewId, rankedBy);
@@ -341,41 +345,72 @@ const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
341
345
  newClickType.set(viewId, clickType);
342
346
  return { clickType: newClickType };
343
347
  }),
348
+ setClickMode: (clickMode, viewId = DEFAULT_VIEW_ID) => set((prev) => {
349
+ const newClickMode = new Map(prev.clickMode);
350
+ newClickMode.set(viewId, clickMode);
351
+ return { clickMode: newClickMode };
352
+ }),
344
353
  setScrollType: (scrollType, viewId = DEFAULT_VIEW_ID) => set((prev) => {
345
354
  const newScrollType = new Map(prev.scrollType);
346
355
  newScrollType.set(viewId, scrollType);
347
356
  return { scrollType: newScrollType };
348
357
  }),
358
+ setHeatmapType: (heatmapType, viewId = DEFAULT_VIEW_ID) => set((prev) => {
359
+ const newHeatmapType = new Map(prev.heatmapType);
360
+ newHeatmapType.set(viewId, heatmapType);
361
+ return { heatmapType: newHeatmapType };
362
+ }),
349
363
  copyView: (fromViewId, toViewId) => set((prev) => {
350
364
  const newRankedBy = new Map(prev.rankedBy);
365
+ const newDeviceType = new Map(prev.deviceType);
351
366
  const newClickType = new Map(prev.clickType);
367
+ const newClickMode = new Map(prev.clickMode);
352
368
  const newScrollType = new Map(prev.scrollType);
369
+ const newHeatmapType = new Map(prev.heatmapType);
353
370
  newRankedBy.set(toViewId, prev.rankedBy.get(fromViewId));
371
+ newDeviceType.set(toViewId, prev.deviceType.get(fromViewId));
354
372
  newClickType.set(toViewId, prev.clickType.get(fromViewId));
373
+ newClickMode.set(toViewId, prev.clickMode.get(fromViewId));
355
374
  newScrollType.set(toViewId, prev.scrollType.get(fromViewId));
375
+ newHeatmapType.set(toViewId, prev.heatmapType.get(fromViewId));
356
376
  return {
357
377
  rankedBy: newRankedBy,
378
+ deviceType: newDeviceType,
358
379
  clickType: newClickType,
380
+ clickMode: newClickMode,
359
381
  scrollType: newScrollType,
382
+ heatmapType: newHeatmapType,
360
383
  };
361
384
  }),
362
385
  clearView: (viewId) => set((prev) => {
363
386
  const newRankedBy = new Map(prev.rankedBy);
387
+ const newDeviceType = new Map(prev.deviceType);
364
388
  const newClickType = new Map(prev.clickType);
389
+ const newClickMode = new Map(prev.clickMode);
365
390
  const newScrollType = new Map(prev.scrollType);
391
+ const newHeatmapType = new Map(prev.heatmapType);
366
392
  newRankedBy.delete(viewId);
393
+ newDeviceType.delete(viewId);
367
394
  newClickType.delete(viewId);
395
+ newClickMode.delete(viewId);
368
396
  newScrollType.delete(viewId);
397
+ newHeatmapType.delete(viewId);
369
398
  return {
370
399
  rankedBy: newRankedBy,
400
+ deviceType: newDeviceType,
371
401
  clickType: newClickType,
402
+ clickMode: newClickMode,
372
403
  scrollType: newScrollType,
404
+ heatmapType: newHeatmapType,
373
405
  };
374
406
  }),
375
407
  resetAll: () => set({
376
408
  rankedBy: new Map([[DEFAULT_VIEW_ID, IClickRankType.MostClicks]]),
409
+ deviceType: new Map([[DEFAULT_VIEW_ID, IDeviceType.Desktop]]),
377
410
  clickType: new Map([[DEFAULT_VIEW_ID, IClickType.Total]]),
411
+ clickMode: new Map([[DEFAULT_VIEW_ID, IClickMode.Default]]),
378
412
  scrollType: new Map([[DEFAULT_VIEW_ID, IScrollType.Depth]]),
413
+ heatmapType: new Map([[DEFAULT_VIEW_ID, IHeatmapType.Click]]),
379
414
  }),
380
415
  };
381
416
  }));
@@ -651,7 +686,7 @@ const useHeatmapClickStore = create()(subscribeWithSelector((set) => {
651
686
  };
652
687
  }));
653
688
 
654
- const useHeatmapHoverStore = create()(subscribeWithSelector((set) => {
689
+ const useHeatmapHoverStore = create()(subscribeWithSelector((set, get) => {
655
690
  return {
656
691
  hoveredElement: new Map([[DEFAULT_VIEW_ID, null]]),
657
692
  setHoveredElement: (hoveredElement, viewId = DEFAULT_VIEW_ID) => set((prev) => {
@@ -659,6 +694,7 @@ const useHeatmapHoverStore = create()(subscribeWithSelector((set) => {
659
694
  newHoveredElement.set(viewId, hoveredElement);
660
695
  return { hoveredElement: newHoveredElement };
661
696
  }),
697
+ isHoveredElement: (hash, viewId = DEFAULT_VIEW_ID) => get().hoveredElement.get(viewId)?.hash === hash,
662
698
  copyView: (fromViewId, toViewId) => set((prev) => {
663
699
  const newHoveredElement = new Map(prev.hoveredElement);
664
700
  newHoveredElement.set(toViewId, prev.hoveredElement.get(fromViewId) ?? null);
@@ -925,39 +961,6 @@ const useHeatmapVizRectStore = create()(subscribeWithSelector((set) => {
925
961
  };
926
962
  }));
927
963
 
928
- const useRegisterConfig = () => {
929
- const mode = useHeatmapConfigStore((state) => state.mode);
930
- const width = useHeatmapConfigStore((state) => state.width);
931
- const sidebarWidth = useHeatmapConfigStore((state) => state.sidebarWidth);
932
- // const heatmapType = useHeatmapConfigStore((state) => state.heatmapType);
933
- // const clickMode = useHeatmapConfigStore((state) => state.clickMode);
934
- const setIsRendering = useHeatmapConfigStore((state) => state.setIsRendering);
935
- useEffect(() => {
936
- setIsRendering(true);
937
- setTimeout(() => {
938
- setIsRendering(false);
939
- }, 1000);
940
- }, [mode, width, sidebarWidth]); // eslint-disable-line react-hooks/exhaustive-deps
941
- };
942
-
943
- const useRegisterControl = (control) => {
944
- const registerControl = useHeatmapControlStore((state) => state.registerControl);
945
- const isRegistered = useRef(false);
946
- useEffect(() => {
947
- if (isRegistered.current)
948
- return;
949
- registerControl('Sidebar', control.Sidebar);
950
- registerControl('SidebarActivator', control.SidebarActivator);
951
- registerControl('TopBar', control.TopBar);
952
- registerControl('Toolbar', control.Toolbar);
953
- registerControl('MetricBar', control.MetricBar);
954
- registerControl('VizLoading', control.VizLoading);
955
- registerControl('ElementCallout', control.ElementCallout);
956
- registerControl('ScrollZoneTooltip', control.ScrollZoneTooltip);
957
- isRegistered.current = true;
958
- }, []); // eslint-disable-line react-hooks/exhaustive-deps
959
- };
960
-
961
964
  const ViewIdContext = createContext(undefined);
962
965
  const useViewIdContext = () => {
963
966
  const viewId = useContext(ViewIdContext);
@@ -1153,23 +1156,6 @@ const useHeatmapData = createViewContextHook({
1153
1156
  }),
1154
1157
  });
1155
1158
 
1156
- // ===========================
1157
- // Hook
1158
- // ===========================
1159
- /**
1160
- * Hook to access heatmap hover state and actions with optional selector
1161
- * Separated from useHeatmapClick to prevent unnecessary re-renders
1162
- *
1163
- * @example
1164
- * ```tsx
1165
- * // Get everything
1166
- * const { hoveredElement, setHoveredElement } = useHeatmapHover();
1167
- *
1168
- * // Get only what you need (no unnecessary re-renders)
1169
- * const hoveredElement = useHeatmapHover(s => s.hoveredElement);
1170
- * const setHoveredElement = useHeatmapHover(s => s.setHoveredElement);
1171
- * ```
1172
- */
1173
1159
  const useHeatmapHover = createViewContextHook({
1174
1160
  useStore: useHeatmapHoverStore,
1175
1161
  getState: (store, viewId) => ({
@@ -1177,6 +1163,7 @@ const useHeatmapHover = createViewContextHook({
1177
1163
  }),
1178
1164
  getActions: (store, viewId) => ({
1179
1165
  setHoveredElement: (el) => store.setHoveredElement(el, viewId),
1166
+ isHoveredElement: (hash) => store.isHoveredElement(hash, viewId),
1180
1167
  }),
1181
1168
  });
1182
1169
 
@@ -1210,56 +1197,27 @@ const useHeatmapScroll = createViewContextHook({
1210
1197
  }),
1211
1198
  });
1212
1199
 
1213
- /**
1214
- * Hook to access heatmap setting state and actions with optional selector
1215
- *
1216
- * @example
1217
- * ```tsx
1218
- * // Get everything
1219
- * const { rankedBy, clickType, setRankedBy } = useHeatmapSetting();
1220
- *
1221
- * // Get only what you need (no unnecessary re-renders)
1222
- * const rankedBy = useHeatmapSetting(s => s.rankedBy);
1223
- * const { setRankedBy, setClickType } = useHeatmapSetting(s => ({
1224
- * setRankedBy: s.setRankedBy,
1225
- * setClickType: s.setClickType,
1226
- * }));
1227
- * ```
1228
- */
1229
1200
  const useHeatmapSetting = createViewContextHook({
1230
1201
  useStore: useHeatmapSettingStore,
1231
1202
  getState: (store, viewId) => ({
1232
1203
  rankedBy: store.rankedBy.get(viewId),
1204
+ deviceType: store.deviceType.get(viewId),
1233
1205
  clickType: store.clickType.get(viewId),
1206
+ clickMode: store.clickMode.get(viewId),
1234
1207
  scrollType: store.scrollType.get(viewId),
1208
+ heatmapType: store.heatmapType.get(viewId),
1235
1209
  }),
1236
1210
  getActions: (store, viewId) => ({
1237
1211
  setRankedBy: (rankedBy) => store.setRankedBy(rankedBy, viewId),
1212
+ setDeviceType: (deviceType) => store.setDeviceType(deviceType, viewId),
1238
1213
  setClickType: (clickType) => store.setClickType(clickType, viewId),
1214
+ setClickMode: (clickMode) => store.setClickMode(clickMode, viewId),
1239
1215
  setScrollType: (scrollType) => store.setScrollType(scrollType, viewId),
1216
+ setHeatmapType: (heatmapType) => store.setHeatmapType(heatmapType, viewId),
1240
1217
  clearView: (viewId) => store.clearView(viewId),
1241
1218
  }),
1242
1219
  });
1243
1220
 
1244
- // ===========================
1245
- // Hook
1246
- // ===========================
1247
- /**
1248
- * Hook to access heatmap viz state and actions (zoom, scale, render state)
1249
- *
1250
- * @example
1251
- * ```tsx
1252
- * // Get everything
1253
- * const { zoomRatio, setZoomRatio, isRenderViz } = useHeatmapViz();
1254
- *
1255
- * // Get only what you need (no unnecessary re-renders)
1256
- * const zoomRatio = useHeatmapViz(s => s.zoomRatio);
1257
- * const { setZoomRatio, setScale } = useHeatmapViz(s => ({
1258
- * setZoomRatio: s.setZoomRatio,
1259
- * setScale: s.setScale,
1260
- * }));
1261
- * ```
1262
- */
1263
1221
  const useHeatmapViz = createViewContextHook({
1264
1222
  useStore: useHeatmapVizStore,
1265
1223
  getState: (store, viewId) => ({
@@ -1386,6 +1344,57 @@ const useHeatmapCopyView = () => {
1386
1344
  };
1387
1345
  };
1388
1346
 
1347
+ const useHeatmapWidthByDevice = () => {
1348
+ const deviceType = useHeatmapSetting((state) => state.deviceType);
1349
+ const width = useMemo(() => calcWidthByDeviceType(deviceType), [deviceType]);
1350
+ return width;
1351
+ function calcWidthByDeviceType(deviceType) {
1352
+ if (!deviceType)
1353
+ return 1440;
1354
+ switch (deviceType) {
1355
+ case IDeviceType.Desktop:
1356
+ return 1440;
1357
+ case IDeviceType.Tablet:
1358
+ return 768;
1359
+ case IDeviceType.Mobile:
1360
+ return 375;
1361
+ }
1362
+ }
1363
+ };
1364
+
1365
+ const useRegisterConfig = () => {
1366
+ const mode = useHeatmapConfigStore((state) => state.mode);
1367
+ const deviceType = useHeatmapSetting((state) => state.deviceType);
1368
+ const sidebarWidth = useHeatmapConfigStore((state) => state.sidebarWidth);
1369
+ // const heatmapType = useHeatmapConfigStore((state) => state.heatmapType);
1370
+ // const clickMode = useHeatmapConfigStore((state) => state.clickMode);
1371
+ const setIsRendering = useHeatmapConfigStore((state) => state.setIsRendering);
1372
+ useEffect(() => {
1373
+ setIsRendering(true);
1374
+ setTimeout(() => {
1375
+ setIsRendering(false);
1376
+ }, 1000);
1377
+ }, [mode, deviceType, sidebarWidth]); // eslint-disable-line react-hooks/exhaustive-deps
1378
+ };
1379
+
1380
+ const useRegisterControl = (control) => {
1381
+ const registerControl = useHeatmapControlStore((state) => state.registerControl);
1382
+ const isRegistered = useRef(false);
1383
+ useEffect(() => {
1384
+ if (isRegistered.current)
1385
+ return;
1386
+ registerControl('Sidebar', control.Sidebar);
1387
+ registerControl('SidebarActivator', control.SidebarActivator);
1388
+ registerControl('TopBar', control.TopBar);
1389
+ registerControl('Toolbar', control.Toolbar);
1390
+ registerControl('MetricBar', control.MetricBar);
1391
+ registerControl('VizLoading', control.VizLoading);
1392
+ registerControl('ElementCallout', control.ElementCallout);
1393
+ registerControl('ScrollZoneTooltip', control.ScrollZoneTooltip);
1394
+ isRegistered.current = true;
1395
+ }, []); // eslint-disable-line react-hooks/exhaustive-deps
1396
+ };
1397
+
1389
1398
  const useRegisterData = (data, dataInfo) => {
1390
1399
  const setIsRendering = useHeatmapConfigStore((state) => state.setIsRendering);
1391
1400
  const setData = useHeatmapData((s) => s.setData);
@@ -4449,8 +4458,8 @@ const useScrollmap = () => {
4449
4458
  };
4450
4459
 
4451
4460
  const useHeatmapCanvas = () => {
4452
- const heatmapType = useHeatmapConfigStore((state) => state.heatmapType);
4453
- const clickMode = useHeatmapConfigStore((state) => state.clickMode);
4461
+ const heatmapType = useHeatmapSetting((state) => state.heatmapType);
4462
+ const clickMode = useHeatmapSetting((state) => state.clickMode);
4454
4463
  const { start: startClickmap } = useClickmap();
4455
4464
  const { start: startAreaClickmap } = useAreaClickmap();
4456
4465
  const { start: startScrollmap } = useScrollmap();
@@ -4606,7 +4615,7 @@ const useHeatmapEffects = ({ isVisible }) => {
4606
4615
  };
4607
4616
 
4608
4617
  const useHeatmapElementPosition = ({ iframeRef, wrapperRef, visualizer }) => {
4609
- const heatmapWidth = useHeatmapConfigStore((state) => state.width);
4618
+ const heatmapWidth = useHeatmapWidthByDevice();
4610
4619
  const iframeHeight = useHeatmapVizRect((s) => s.iframeHeight);
4611
4620
  const widthScale = useHeatmapViz((s) => s.widthScale);
4612
4621
  const getRect = useCallback((element) => {
@@ -4737,6 +4746,7 @@ function getBoundingBox(element) {
4737
4746
 
4738
4747
  const useHoveredElement = ({ iframeRef, getRect }) => {
4739
4748
  const setHoveredElement = useHeatmapHover((s) => s.setHoveredElement);
4749
+ const isHoveredElement = useHeatmapHover((s) => s.isHoveredElement);
4740
4750
  const setSelectedElement = useHeatmapClick((s) => s.setSelectedElement);
4741
4751
  const widthScale = useHeatmapViz((s) => s.widthScale);
4742
4752
  const dataInfo = useHeatmapData((s) => s.dataInfo);
@@ -4776,6 +4786,8 @@ const useHoveredElement = ({ iframeRef, getRect }) => {
4776
4786
  reset();
4777
4787
  return;
4778
4788
  }
4789
+ if (isHoveredElement(hash))
4790
+ return;
4779
4791
  const selector = dataInfo?.clickMapMetrics?.[hash];
4780
4792
  const rect = getRect({ hash, selector });
4781
4793
  const elementInfo = buildElementInfo(hash, rect, dataInfo);
@@ -4785,7 +4797,7 @@ const useHoveredElement = ({ iframeRef, getRect }) => {
4785
4797
  }
4786
4798
  const mousePosition = getElementMousePosition(event, widthScale);
4787
4799
  setHoveredElement({ ...elementInfo, mousePosition });
4788
- }, [dataInfo, getRect, reset, widthScale, getHashFromEvent, setHoveredElement]);
4800
+ }, [dataInfo, getRect, reset, widthScale, getHashFromEvent, setHoveredElement, isHoveredElement]);
4789
4801
  const handleMouseMove = useMemo(() => throttleRAF(onHandleMouseMove), [onHandleMouseMove]);
4790
4802
  const handleClick = useCallback((event, hash) => {
4791
4803
  if (!hash)
@@ -6297,7 +6309,7 @@ function useVizLiveRender() {
6297
6309
  const wrapperHeight = useHeatmapVizRect((s) => s.wrapperHeight);
6298
6310
  const wrapperWidth = useHeatmapVizRect((s) => s.wrapperWidth);
6299
6311
  const setIsRenderViz = useHeatmapViz((s) => s.setIsRenderViz);
6300
- const contentWidth = useHeatmapConfigStore((state) => state.width);
6312
+ const contentWidth = useHeatmapWidthByDevice();
6301
6313
  const htmlContent = useHeatmapLiveStore((state) => state.htmlContent);
6302
6314
  const targetUrl = useHeatmapLiveStore((state) => state.targetUrl);
6303
6315
  const renderMode = useHeatmapLiveStore((state) => state.renderMode);
@@ -6391,6 +6403,7 @@ function initIframeHelper$1(iframe, rect, onSuccess) {
6391
6403
  }
6392
6404
 
6393
6405
  const useHeatmapRender = () => {
6406
+ const viewId = useViewIdContext();
6394
6407
  const data = useHeatmapData((s) => s.data);
6395
6408
  const vizRef = useHeatmapVizRect((s) => s.vizRef);
6396
6409
  const setVizRef = useHeatmapVizRect((s) => s.setVizRef);
@@ -6409,7 +6422,7 @@ const useHeatmapRender = () => {
6409
6422
  const iframe = iframeRef.current;
6410
6423
  if (!iframe?.contentWindow)
6411
6424
  return;
6412
- await visualizer.html(payloads, iframe.contentWindow, true);
6425
+ await visualizer.html(payloads, iframe.contentWindow, viewId);
6413
6426
  initIframeHelper(iframe, payloads, (height) => {
6414
6427
  height && setIframeHeight(height);
6415
6428
  setIsRenderViz(true);
@@ -6619,7 +6632,7 @@ const useContainerDimensions = (props) => {
6619
6632
  };
6620
6633
 
6621
6634
  const useContentDimensions = ({ iframeRef }) => {
6622
- const contentWidth = useHeatmapConfigStore((state) => state.width);
6635
+ const contentWidth = useHeatmapWidthByDevice();
6623
6636
  useEffect(() => {
6624
6637
  if (!contentWidth)
6625
6638
  return;
@@ -6858,7 +6871,7 @@ const useHeatmapScale = (props) => {
6858
6871
  };
6859
6872
  const useIframeHeight = (props) => {
6860
6873
  const { iframeRef } = props;
6861
- const iframeWidth = useHeatmapConfigStore((state) => state.width);
6874
+ const iframeWidth = useHeatmapWidthByDevice();
6862
6875
  const wrapperHeight = useHeatmapVizRect((s) => s.wrapperHeight);
6863
6876
  const setIframeHeight = useHeatmapVizRect((s) => s.setIframeHeight);
6864
6877
  const isRenderViz = useHeatmapViz((s) => s.isRenderViz);
@@ -7188,14 +7201,15 @@ const PopoverSidebar = () => {
7188
7201
  return null;
7189
7202
  if (!CompSidebar || !CompSidebarActivator)
7190
7203
  return null;
7191
- return (jsxs("div", { children: [!isPopoverOpen && (jsx("div", { style: { ...stylePopover, width: 'auto', height: 'auto' }, children: jsx(CompSidebarActivator, { onClick: () => setIsPopoverOpen(true) }) })), isPopoverOpen && (jsx(Fragment, { children: jsx("div", { className: "gx-hm-sidebar-popover", style: {
7204
+ return (jsxs("div", { children: [!isPopoverOpen && (jsx("div", { style: { ...stylePopover, width: 'auto', height: 'auto' }, children: jsx(CompSidebarActivator, { onClick: () => setIsPopoverOpen(true) }) })), jsx(Fragment, { children: jsx("div", { className: "gx-hm-sidebar-popover", style: {
7192
7205
  ...stylePopover,
7193
7206
  backgroundColor: '#fff',
7194
7207
  borderRight: `${HEATMAP_CONFIG.borderWidth}px solid ${HEATMAP_CONFIG.borderColor}`,
7195
7208
  borderRadius: '8px',
7196
7209
  boxShadow: '4px 0 12px rgba(0, 0, 0, 0.15)',
7197
7210
  overflow: 'auto',
7198
- }, children: jsx(CompSidebar, { closeAction: { onClick: () => setIsPopoverOpen(false) } }) }) }))] }));
7211
+ display: isPopoverOpen ? 'block' : 'none',
7212
+ }, children: jsx(CompSidebar, { closeAction: { onClick: () => setIsPopoverOpen(false) } }) }) })] }));
7199
7213
  };
7200
7214
 
7201
7215
  const ContentToolbar = () => {
@@ -8057,7 +8071,7 @@ const useAnchorPosition = (calloutRef, props) => {
8057
8071
  const ElementMissing = ({ show = true, visualRef }) => {
8058
8072
  const widthScale = useHeatmapViz((s) => s.widthScale);
8059
8073
  const missingElementRef = useRef(null);
8060
- const wrapperWidth = useHeatmapConfigStore((s) => s.width);
8074
+ const wrapperWidth = useHeatmapWidthByDevice();
8061
8075
  const [scrollPosition, setScrollPosition] = useState({ scrollTop: 0, scrollLeft: 0 });
8062
8076
  useEffect(() => {
8063
8077
  const container = visualRef.current;
@@ -8208,7 +8222,7 @@ const ElementOverlayComponent = (props) => {
8208
8222
  const { type, element, onClick, elementId, hideOutline } = props;
8209
8223
  const widthScale = useHeatmapViz((s) => s.widthScale);
8210
8224
  const viewportHeight = useHeatmapVizRect((s) => s.iframeHeight);
8211
- const viewportWidth = useHeatmapConfigStore((s) => s.width);
8225
+ const viewportWidth = useHeatmapWidthByDevice();
8212
8226
  const overlayStyle = useMemo(() => {
8213
8227
  const isInvalid = !element || (element.width === 0 && element.height === 0);
8214
8228
  if (isInvalid)
@@ -8290,7 +8304,7 @@ const HeatmapElements = (props) => {
8290
8304
  };
8291
8305
 
8292
8306
  const VizElements = ({ iframeRef, visualRef, wrapperRef }) => {
8293
- const contentWidth = useHeatmapConfigStore((state) => state.width);
8307
+ const contentWidth = useHeatmapWidthByDevice();
8294
8308
  const dataInfo = useHeatmapData((s) => s.dataInfo);
8295
8309
  const vizRef = useHeatmapVizRect((s) => s.vizRef);
8296
8310
  const visualizer = {
@@ -8313,8 +8327,8 @@ const VizElements = ({ iframeRef, visualRef, wrapperRef }) => {
8313
8327
  };
8314
8328
 
8315
8329
  const VizClickmap = ({ iframeRef, visualRef, wrapperRef }) => {
8316
- const clickMode = useHeatmapConfigStore((state) => state.clickMode);
8317
- const heatmapType = useHeatmapConfigStore((state) => state.heatmapType);
8330
+ const clickMode = useHeatmapSetting((state) => state.clickMode);
8331
+ const heatmapType = useHeatmapSetting((state) => state.heatmapType);
8318
8332
  const isClickType = heatmapType === IHeatmapType.Click;
8319
8333
  if (!isClickType)
8320
8334
  return null;
@@ -8329,9 +8343,9 @@ const VizClickmap = ({ iframeRef, visualRef, wrapperRef }) => {
8329
8343
  };
8330
8344
 
8331
8345
  const ScrollMapMinimap = ({ zones, maxUsers }) => {
8332
- const scrollType = useHeatmapConfigStore((state) => state.scrollType);
8346
+ const scrollType = useHeatmapSetting((s) => s.scrollType);
8333
8347
  const showMinimap = useHeatmapScroll((s) => s.showMinimap);
8334
- const isScrollType = [IScrollType.Attention].includes(scrollType);
8348
+ const isScrollType = [IScrollType.Attention].includes(scrollType ?? IScrollType.Depth);
8335
8349
  if (!showMinimap || !isScrollType)
8336
8350
  return null;
8337
8351
  return (jsx("div", { style: {
@@ -8480,7 +8494,7 @@ const AverageFoldLine = ({ iframeRef, wrapperRef }) => {
8480
8494
  };
8481
8495
 
8482
8496
  const ScrollmapMarker = ({ iframeRef, wrapperRef }) => {
8483
- const scrollType = useHeatmapConfigStore((state) => state.scrollType);
8497
+ const scrollType = useHeatmapSetting((s) => s.scrollType);
8484
8498
  const { scrollmap } = useHeatmapData();
8485
8499
  const { getZonePosition } = useZonePositions();
8486
8500
  if (!scrollmap || scrollmap.length === 0)
@@ -8556,10 +8570,10 @@ const ScrollmapMarker = ({ iframeRef, wrapperRef }) => {
8556
8570
 
8557
8571
  const SCROLL_TYPES = [IHeatmapType.Scroll];
8558
8572
  const VizScrollMap = ({ iframeRef, wrapperRef }) => {
8559
- const heatmapType = useHeatmapConfigStore((state) => state.heatmapType);
8573
+ const heatmapType = useHeatmapSetting((s) => s.heatmapType);
8560
8574
  const iframeHeight = useHeatmapVizRect((s) => s.iframeHeight);
8561
8575
  // useRenderCount('VizScrollMap');
8562
- const isHeatmapScroll = SCROLL_TYPES.includes(heatmapType);
8576
+ const isHeatmapScroll = SCROLL_TYPES.includes(heatmapType ?? IHeatmapType.Click);
8563
8577
  if (!iframeHeight || !isHeatmapScroll)
8564
8578
  return null;
8565
8579
  return (jsxs("div", { style: {
@@ -8574,8 +8588,8 @@ const VizScrollMap = ({ iframeRef, wrapperRef }) => {
8574
8588
  };
8575
8589
 
8576
8590
  const WrapperVisual = ({ children, visualRef, wrapperRef, scaledHeight, iframeHeight, onScroll, }) => {
8577
- const contentWidth = useHeatmapConfigStore((state) => state.width);
8578
8591
  const widthScale = useHeatmapViz((s) => s.widthScale);
8592
+ const contentWidth = useHeatmapWidthByDevice();
8579
8593
  const contentHeight = calcContentHeight();
8580
8594
  return (jsx("div", { ref: visualRef, className: "gx-hm-visual", onScroll: onScroll, style: {
8581
8595
  overflow: 'hidden scroll',
@@ -8609,7 +8623,8 @@ const WrapperVisual = ({ children, visualRef, wrapperRef, scaledHeight, iframeHe
8609
8623
  };
8610
8624
 
8611
8625
  const VizDomRenderer = ({ mode = 'heatmap' }) => {
8612
- const contentWidth = useHeatmapConfigStore((state) => state.width || 0);
8626
+ const viewId = useViewIdContext();
8627
+ const contentWidth = useHeatmapWidthByDevice();
8613
8628
  const iframeHeight = useHeatmapVizRect((s) => s.iframeHeight);
8614
8629
  const wrapperHeight = useHeatmapVizRect((s) => s.wrapperHeight);
8615
8630
  const wrapperRef = useRef(null);
@@ -8622,7 +8637,7 @@ const VizDomRenderer = ({ mode = 'heatmap' }) => {
8622
8637
  const scrollTop = e.currentTarget.scrollTop;
8623
8638
  handleScroll(scrollTop);
8624
8639
  };
8625
- return (jsxs(WrapperVisual, { visualRef: visualRef, wrapperRef: wrapperRef, scaledHeight: scaledHeight, onScroll: onScroll, iframeHeight: iframeHeight, children: [jsx(VizClickmap, { iframeRef: iframeRef, visualRef: visualRef, wrapperRef: wrapperRef }), jsx("iframe", { ...HEATMAP_IFRAME, ref: iframeRef, width: contentWidth, height: wrapperHeight }), jsx(VizScrollMap, { iframeRef: iframeRef, wrapperRef: visualRef })] }));
8640
+ return (jsxs(WrapperVisual, { visualRef: visualRef, wrapperRef: wrapperRef, scaledHeight: scaledHeight, onScroll: onScroll, iframeHeight: iframeHeight, children: [jsx(VizClickmap, { iframeRef: iframeRef, visualRef: visualRef, wrapperRef: wrapperRef }), jsx("iframe", { ...HEATMAP_IFRAME, id: `clarity-iframe-${viewId}`, ref: iframeRef, width: contentWidth, height: wrapperHeight }), jsx(VizScrollMap, { iframeRef: iframeRef, wrapperRef: visualRef })] }));
8626
8641
  };
8627
8642
 
8628
8643
  const VizLoading = () => {
@@ -8658,7 +8673,7 @@ const VizDomHeatmap = () => {
8658
8673
  VizDomHeatmap.displayName = 'VizDomHeatmap';
8659
8674
 
8660
8675
  const VizLiveRenderer = () => {
8661
- const contentWidth = useHeatmapConfigStore((state) => state.width);
8676
+ const contentWidth = useHeatmapWidthByDevice();
8662
8677
  const iframeHeight = useHeatmapVizRect((s) => s.iframeHeight);
8663
8678
  const wrapperHeight = useHeatmapVizRect((s) => s.wrapperHeight);
8664
8679
  const visualRef = useRef(null);
@@ -8748,4 +8763,4 @@ const HeatmapLayout = ({ data, clickmap, clickAreas, scrollmap, controls, dataIn
8748
8763
  }
8749
8764
  };
8750
8765
 
8751
- export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO, ELM_CALLOUT_CONFIG, GraphView, HEATMAP_CONFIG, HEATMAP_IFRAME, HEATMAP_STYLE, HeatmapLayout, IClickMode, IClickRankType, IClickType, IHeatmapType, IScrollType, ViewIdContext, Z_INDEX, compareViewPerformance, convertViewportToIframeCoords, createStorePerformanceTracker, 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, useHoveredElement, useIframeHeight, useIframeHeightProcessor, useMeasureFunction, useRegisterConfig, useRegisterControl, useRegisterData, useRegisterHeatmap, useRenderCount, useScrollmapZones, useTrackHookCall, useViewIdContext, useVizLiveRender, useWhyDidYouUpdate, useWrapperRefHeight, useZonePositions, withPerformanceTracking };
8766
+ export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO, ELM_CALLOUT_CONFIG, GraphView, HEATMAP_CONFIG, HEATMAP_IFRAME, HEATMAP_STYLE, HeatmapLayout, IClickMode, IClickRankType, IClickType, IDeviceType, IHeatmapType, IScrollType, ViewIdContext, Z_INDEX, compareViewPerformance, convertViewportToIframeCoords, createStorePerformanceTracker, 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 };