@gemx-dev/heatmap-react 3.5.60 → 3.5.62

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 (72) hide show
  1. package/dist/esm/components/VizElement/DefaultRankBadges.d.ts +2 -2
  2. package/dist/esm/components/VizElement/DefaultRankBadges.d.ts.map +1 -1
  3. package/dist/esm/components/VizElement/ElementCalloutOverlay.d.ts.map +1 -1
  4. package/dist/esm/configs/index.d.ts +1 -0
  5. package/dist/esm/configs/index.d.ts.map +1 -1
  6. package/dist/esm/configs/zoom.d.ts +6 -0
  7. package/dist/esm/configs/zoom.d.ts.map +1 -0
  8. package/dist/esm/helpers/viz-area-click/area-builder.d.ts +2 -2
  9. package/dist/esm/helpers/viz-area-click/area-builder.d.ts.map +1 -1
  10. package/dist/esm/hooks/view-context/index.d.ts +1 -0
  11. package/dist/esm/hooks/view-context/index.d.ts.map +1 -1
  12. package/dist/esm/hooks/view-context/useHeatmapData.d.ts +3 -31
  13. package/dist/esm/hooks/view-context/useHeatmapData.d.ts.map +1 -1
  14. package/dist/esm/hooks/view-context/useHeatmapSetting.d.ts +38 -0
  15. package/dist/esm/hooks/view-context/useHeatmapSetting.d.ts.map +1 -0
  16. package/dist/esm/hooks/view-context/useHeatmapViz.d.ts +2 -0
  17. package/dist/esm/hooks/view-context/useHeatmapViz.d.ts.map +1 -1
  18. package/dist/esm/hooks/viz-elm/useHeatmapElementPosition.d.ts +2 -2
  19. package/dist/esm/hooks/viz-elm/useHeatmapElementPosition.d.ts.map +1 -1
  20. package/dist/esm/hooks/viz-scale/useScaleCalculation.d.ts.map +1 -1
  21. package/dist/esm/index.js +151 -36
  22. package/dist/esm/index.mjs +151 -36
  23. package/dist/esm/stores/data.d.ts +1 -0
  24. package/dist/esm/stores/data.d.ts.map +1 -1
  25. package/dist/esm/stores/index.d.ts +1 -0
  26. package/dist/esm/stores/index.d.ts.map +1 -1
  27. package/dist/esm/stores/setting.d.ts +22 -0
  28. package/dist/esm/stores/setting.d.ts.map +1 -0
  29. package/dist/esm/stores/viz.d.ts +2 -0
  30. package/dist/esm/stores/viz.d.ts.map +1 -1
  31. package/dist/esm/types/heatmap-info.d.ts +22 -3
  32. package/dist/esm/types/heatmap-info.d.ts.map +1 -1
  33. package/dist/esm/types/heatmap.d.ts +8 -0
  34. package/dist/esm/types/heatmap.d.ts.map +1 -1
  35. package/dist/esm/types/viz-elm.d.ts +2 -2
  36. package/dist/esm/types/viz-elm.d.ts.map +1 -1
  37. package/dist/umd/components/VizElement/DefaultRankBadges.d.ts +2 -2
  38. package/dist/umd/components/VizElement/DefaultRankBadges.d.ts.map +1 -1
  39. package/dist/umd/components/VizElement/ElementCalloutOverlay.d.ts.map +1 -1
  40. package/dist/umd/configs/index.d.ts +1 -0
  41. package/dist/umd/configs/index.d.ts.map +1 -1
  42. package/dist/umd/configs/zoom.d.ts +6 -0
  43. package/dist/umd/configs/zoom.d.ts.map +1 -0
  44. package/dist/umd/helpers/viz-area-click/area-builder.d.ts +2 -2
  45. package/dist/umd/helpers/viz-area-click/area-builder.d.ts.map +1 -1
  46. package/dist/umd/hooks/view-context/index.d.ts +1 -0
  47. package/dist/umd/hooks/view-context/index.d.ts.map +1 -1
  48. package/dist/umd/hooks/view-context/useHeatmapData.d.ts +3 -31
  49. package/dist/umd/hooks/view-context/useHeatmapData.d.ts.map +1 -1
  50. package/dist/umd/hooks/view-context/useHeatmapSetting.d.ts +38 -0
  51. package/dist/umd/hooks/view-context/useHeatmapSetting.d.ts.map +1 -0
  52. package/dist/umd/hooks/view-context/useHeatmapViz.d.ts +2 -0
  53. package/dist/umd/hooks/view-context/useHeatmapViz.d.ts.map +1 -1
  54. package/dist/umd/hooks/viz-elm/useHeatmapElementPosition.d.ts +2 -2
  55. package/dist/umd/hooks/viz-elm/useHeatmapElementPosition.d.ts.map +1 -1
  56. package/dist/umd/hooks/viz-scale/useScaleCalculation.d.ts.map +1 -1
  57. package/dist/umd/index.js +2 -2
  58. package/dist/umd/stores/data.d.ts +1 -0
  59. package/dist/umd/stores/data.d.ts.map +1 -1
  60. package/dist/umd/stores/index.d.ts +1 -0
  61. package/dist/umd/stores/index.d.ts.map +1 -1
  62. package/dist/umd/stores/setting.d.ts +22 -0
  63. package/dist/umd/stores/setting.d.ts.map +1 -0
  64. package/dist/umd/stores/viz.d.ts +2 -0
  65. package/dist/umd/stores/viz.d.ts.map +1 -1
  66. package/dist/umd/types/heatmap-info.d.ts +22 -3
  67. package/dist/umd/types/heatmap-info.d.ts.map +1 -1
  68. package/dist/umd/types/heatmap.d.ts +8 -0
  69. package/dist/umd/types/heatmap.d.ts.map +1 -1
  70. package/dist/umd/types/viz-elm.d.ts +2 -2
  71. package/dist/umd/types/viz-elm.d.ts.map +1 -1
  72. package/package.json +1 -1
@@ -113,6 +113,12 @@ const Z_INDEX = {
113
113
  SIDEBAR_POPOVER: 4001,
114
114
  };
115
115
 
116
+ const DEFAULT_ZOOM_RATIO = {
117
+ DEFAULT: 100,
118
+ MIN: 10,
119
+ MAX: 100,
120
+ };
121
+
116
122
  /**
117
123
  * Creates a debounced version of a callback that delays invoking until after
118
124
  * wait milliseconds have elapsed since the last time it was invoked.
@@ -180,6 +186,15 @@ var IClickType;
180
186
  IClickType["First"] = "first-clicks";
181
187
  IClickType["Last"] = "last-clicks";
182
188
  })(IClickType || (IClickType = {}));
189
+ var IClickRankType;
190
+ (function (IClickRankType) {
191
+ IClickRankType["MostClicks"] = "most-clicks";
192
+ IClickRankType["Revenue"] = "revenue";
193
+ IClickRankType["AttributionRate"] = "attribution-rate";
194
+ IClickRankType["ConversionRate"] = "conversion-rate";
195
+ IClickRankType["RevenuePerClick"] = "revenue-per-click";
196
+ IClickRankType["RevenuePerSession"] = "revenue-per-session";
197
+ })(IClickRankType || (IClickRankType = {}));
183
198
  var IClickMode;
184
199
  (function (IClickMode) {
185
200
  IClickMode["Default"] = "default";
@@ -253,6 +268,16 @@ const useHeatmapDataStore = create()(subscribeWithSelector((set) => {
253
268
  newScrollmap.set(viewId, scrollmap);
254
269
  return { scrollmap: newScrollmap };
255
270
  }),
271
+ setDataInfoByKey: (key, value, viewId = DEFAULT_VIEW_ID) => set((prev) => {
272
+ const currentHeatmapInfo = prev.dataInfo.get(viewId) || {};
273
+ const newHeatmapInfo = {
274
+ ...currentHeatmapInfo,
275
+ [key]: value,
276
+ };
277
+ const newDataInfo = new Map(prev.dataInfo);
278
+ newDataInfo.set(viewId, newHeatmapInfo);
279
+ return { dataInfo: newDataInfo };
280
+ }),
256
281
  copyView: (fromViewId, toViewId) => set((prev) => {
257
282
  const newData = new Map(prev.data);
258
283
  const newClickmap = new Map(prev.clickmap);
@@ -301,11 +326,66 @@ const useHeatmapDataStore = create()(subscribeWithSelector((set) => {
301
326
  };
302
327
  }));
303
328
 
329
+ const useHeatmapSettingStore = create()(subscribeWithSelector((set) => {
330
+ return {
331
+ rankedBy: new Map([[DEFAULT_VIEW_ID, IClickRankType.MostClicks]]),
332
+ clickType: new Map([[DEFAULT_VIEW_ID, IClickType.Total]]),
333
+ scrollType: new Map([[DEFAULT_VIEW_ID, IScrollType.Depth]]),
334
+ setRankedBy: (rankedBy, viewId = DEFAULT_VIEW_ID) => set((prev) => {
335
+ const newRankedBy = new Map(prev.rankedBy);
336
+ newRankedBy.set(viewId, rankedBy);
337
+ return { rankedBy: newRankedBy };
338
+ }),
339
+ setClickType: (clickType, viewId = DEFAULT_VIEW_ID) => set((prev) => {
340
+ const newClickType = new Map(prev.clickType);
341
+ newClickType.set(viewId, clickType);
342
+ return { clickType: newClickType };
343
+ }),
344
+ setScrollType: (scrollType, viewId = DEFAULT_VIEW_ID) => set((prev) => {
345
+ const newScrollType = new Map(prev.scrollType);
346
+ newScrollType.set(viewId, scrollType);
347
+ return { scrollType: newScrollType };
348
+ }),
349
+ copyView: (fromViewId, toViewId) => set((prev) => {
350
+ const newRankedBy = new Map(prev.rankedBy);
351
+ const newClickType = new Map(prev.clickType);
352
+ const newScrollType = new Map(prev.scrollType);
353
+ newRankedBy.set(toViewId, prev.rankedBy.get(fromViewId));
354
+ newClickType.set(toViewId, prev.clickType.get(fromViewId));
355
+ newScrollType.set(toViewId, prev.scrollType.get(fromViewId));
356
+ return {
357
+ rankedBy: newRankedBy,
358
+ clickType: newClickType,
359
+ scrollType: newScrollType,
360
+ };
361
+ }),
362
+ clearView: (viewId) => set((prev) => {
363
+ const newRankedBy = new Map(prev.rankedBy);
364
+ const newClickType = new Map(prev.clickType);
365
+ const newScrollType = new Map(prev.scrollType);
366
+ newRankedBy.delete(viewId);
367
+ newClickType.delete(viewId);
368
+ newScrollType.delete(viewId);
369
+ return {
370
+ rankedBy: newRankedBy,
371
+ clickType: newClickType,
372
+ scrollType: newScrollType,
373
+ };
374
+ }),
375
+ resetAll: () => set({
376
+ rankedBy: new Map([[DEFAULT_VIEW_ID, IClickRankType.MostClicks]]),
377
+ clickType: new Map([[DEFAULT_VIEW_ID, IClickType.Total]]),
378
+ scrollType: new Map([[DEFAULT_VIEW_ID, IScrollType.Depth]]),
379
+ }),
380
+ };
381
+ }));
382
+
304
383
  const useHeatmapVizStore = create()(subscribeWithSelector((set) => {
305
384
  return {
306
385
  isRenderViz: new Map([[DEFAULT_VIEW_ID, false]]),
307
- zoomRatio: new Map([[DEFAULT_VIEW_ID, 100]]),
308
- minZoomRatio: new Map([[DEFAULT_VIEW_ID, 10]]),
386
+ zoomRatio: new Map([[DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO.DEFAULT]]),
387
+ minZoomRatio: new Map([[DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO.MIN]]),
388
+ maxZoomRatio: new Map([[DEFAULT_VIEW_ID, DEFAULT_ZOOM_RATIO.MAX]]),
309
389
  scale: new Map([[DEFAULT_VIEW_ID, 1]]),
310
390
  isScaledToFit: new Map([[DEFAULT_VIEW_ID, false]]),
311
391
  setIsRenderViz: (isRenderViz, viewId = DEFAULT_VIEW_ID) => set((prev) => {
@@ -323,6 +403,11 @@ const useHeatmapVizStore = create()(subscribeWithSelector((set) => {
323
403
  newMinZoomRatio.set(viewId, minZoomRatio);
324
404
  return { minZoomRatio: newMinZoomRatio };
325
405
  }),
406
+ setMaxZoomRatio: (maxZoomRatio, viewId = DEFAULT_VIEW_ID) => set((prev) => {
407
+ const newMaxZoomRatio = new Map(prev.maxZoomRatio);
408
+ newMaxZoomRatio.set(viewId, maxZoomRatio);
409
+ return { maxZoomRatio: newMaxZoomRatio };
410
+ }),
326
411
  setScale: (scale, viewId = DEFAULT_VIEW_ID) => set((prev) => {
327
412
  const newScale = new Map(prev.scale);
328
413
  newScale.set(viewId, scale);
@@ -1031,9 +1116,6 @@ const useHeatmapClick = createViewContextHook({
1031
1116
  }),
1032
1117
  });
1033
1118
 
1034
- // ===========================
1035
- // Hook
1036
- // ===========================
1037
1119
  /**
1038
1120
  * Hook to access heatmap data state and actions with optional selector
1039
1121
  *
@@ -1063,6 +1145,7 @@ const useHeatmapData = createViewContextHook({
1063
1145
  setData: (newData) => store.setData(newData, viewId),
1064
1146
  setClickmap: (newClickmap) => store.setClickmap(newClickmap, viewId),
1065
1147
  setClickAreas: (newClickAreas) => store.setClickAreas(newClickAreas, viewId),
1148
+ setDataInfoByKey: (key, value) => store.setDataInfoByKey(key, value, viewId),
1066
1149
  setScrollmap: (newScrollmap) => store.setScrollmap(newScrollmap, viewId),
1067
1150
  setDataInfo: (newDataInfo) => store.setDataInfo(newDataInfo, viewId),
1068
1151
  removeClickArea: (areaId) => store.removeClickArea(areaId, viewId),
@@ -1127,6 +1210,37 @@ const useHeatmapScroll = createViewContextHook({
1127
1210
  }),
1128
1211
  });
1129
1212
 
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
+ const useHeatmapSetting = createViewContextHook({
1230
+ useStore: useHeatmapSettingStore,
1231
+ getState: (store, viewId) => ({
1232
+ rankedBy: store.rankedBy.get(viewId),
1233
+ clickType: store.clickType.get(viewId),
1234
+ scrollType: store.scrollType.get(viewId),
1235
+ }),
1236
+ getActions: (store, viewId) => ({
1237
+ setRankedBy: (rankedBy) => store.setRankedBy(rankedBy, viewId),
1238
+ setClickType: (clickType) => store.setClickType(clickType, viewId),
1239
+ setScrollType: (scrollType) => store.setScrollType(scrollType, viewId),
1240
+ clearView: (viewId) => store.clearView(viewId),
1241
+ }),
1242
+ });
1243
+
1130
1244
  // ===========================
1131
1245
  // Hook
1132
1246
  // ===========================
@@ -1150,8 +1264,9 @@ const useHeatmapViz = createViewContextHook({
1150
1264
  useStore: useHeatmapVizStore,
1151
1265
  getState: (store, viewId) => ({
1152
1266
  isRenderViz: store.isRenderViz.get(viewId) ?? false,
1153
- zoomRatio: store.zoomRatio.get(viewId) ?? 100,
1154
- minZoomRatio: store.minZoomRatio.get(viewId) ?? 10,
1267
+ zoomRatio: store.zoomRatio.get(viewId) ?? DEFAULT_ZOOM_RATIO.DEFAULT,
1268
+ minZoomRatio: store.minZoomRatio.get(viewId) ?? DEFAULT_ZOOM_RATIO.MIN,
1269
+ maxZoomRatio: store.maxZoomRatio.get(viewId) ?? DEFAULT_ZOOM_RATIO.MAX,
1155
1270
  widthScale: store.scale.get(viewId) ?? 1,
1156
1271
  isScaledToFit: store.isScaledToFit.get(viewId) ?? false,
1157
1272
  }),
@@ -1159,6 +1274,7 @@ const useHeatmapViz = createViewContextHook({
1159
1274
  setIsRenderViz: (value) => store.setIsRenderViz(value, viewId),
1160
1275
  setZoomRatio: (value) => store.setZoomRatio(value, viewId),
1161
1276
  setMinZoomRatio: (value) => store.setMinZoomRatio(value, viewId),
1277
+ setMaxZoomRatio: (value) => store.setMaxZoomRatio(value, viewId),
1162
1278
  setScale: (value) => store.setScale(value, viewId),
1163
1279
  setIsScaledToFit: (value) => store.setIsScaledToFit(value, viewId),
1164
1280
  }),
@@ -1617,31 +1733,31 @@ function getElementSelector(element) {
1617
1733
  * @param elementMapInfo - Map of hash to element click info
1618
1734
  * @returns Total clicks for element + all descendants
1619
1735
  */
1620
- function calculateTotalClicksWithChildren(element, elementMapInfo) {
1736
+ function calculateTotalClicksWithChildren(element, clickMapMetrics) {
1621
1737
  let totalClicks = 0;
1622
1738
  // Get clicks for the element itself
1623
1739
  const elementHash = getElementHash(element);
1624
1740
  if (elementHash) {
1625
- const elementInfo = elementMapInfo[elementHash];
1626
- totalClicks += elementInfo?.totalclicks || 0;
1741
+ const elementInfo = clickMapMetrics[elementHash];
1742
+ totalClicks += elementInfo?.totalClicked.value ?? 0;
1627
1743
  }
1628
1744
  const children = element.querySelectorAll('*');
1629
1745
  children.forEach((child) => {
1630
1746
  const childHash = getElementHash(child);
1631
1747
  if (childHash) {
1632
- const childInfo = elementMapInfo[childHash];
1633
- totalClicks += childInfo?.totalclicks || 0;
1748
+ const childInfo = clickMapMetrics[childHash];
1749
+ totalClicks += childInfo?.totalClicked.value ?? 0;
1634
1750
  }
1635
1751
  });
1636
1752
  return totalClicks;
1637
1753
  }
1638
1754
  function buildAreaNode(element, hash, heatmapInfo, shadowRoot, persistedData) {
1639
- if (!heatmapInfo.elementMapInfo)
1755
+ if (!heatmapInfo.clickMapMetrics)
1640
1756
  return;
1641
1757
  const totalClicks = heatmapInfo.totalClicks || 0;
1642
- const elementInfo = heatmapInfo.elementMapInfo[hash];
1758
+ const elementInfo = heatmapInfo.clickMapMetrics[hash];
1643
1759
  // Calculate total clicks including all child elements
1644
- const elementClicks = calculateTotalClicksWithChildren(element, heatmapInfo.elementMapInfo);
1760
+ const elementClicks = calculateTotalClicksWithChildren(element, heatmapInfo.clickMapMetrics);
1645
1761
  const clickDist = calculateClickDistribution(elementClicks, totalClicks);
1646
1762
  const rect = getElementRect(element);
1647
1763
  const color = getColorFromClickDist(clickDist);
@@ -1677,11 +1793,11 @@ function buildAreaNode(element, hash, heatmapInfo, shadowRoot, persistedData) {
1677
1793
  };
1678
1794
  return areaNode;
1679
1795
  }
1680
- function getTopElementsByClicks(elementMapInfo, topN = 10) {
1681
- const elements = Object.entries(elementMapInfo)
1796
+ function getTopElementsByClicks(clickMapMetrics, topN = 10) {
1797
+ const elements = Object.entries(clickMapMetrics)
1682
1798
  .map(([hash, info]) => ({
1683
1799
  hash,
1684
- totalclicks: info.totalclicks,
1800
+ totalclicks: info.totalClicked.value ?? 0,
1685
1801
  selector: info.selector || '',
1686
1802
  }))
1687
1803
  .sort((a, b) => b.totalclicks - a.totalclicks)
@@ -2219,11 +2335,11 @@ const getElementRank = (hash, elements) => {
2219
2335
  const buildElementInfo = (hash, rect, heatmapInfo) => {
2220
2336
  if (!rect || !heatmapInfo)
2221
2337
  return null;
2222
- const info = heatmapInfo.elementMapInfo?.[hash];
2338
+ const info = heatmapInfo.clickMapMetrics?.[hash];
2223
2339
  if (!info)
2224
2340
  return null;
2225
2341
  const rank = getElementRank(hash, heatmapInfo.sortedElements);
2226
- const clicks = info.totalclicks ?? 0;
2342
+ const clicks = info.totalClicked.value ?? 0;
2227
2343
  const selector = info.selector ?? '';
2228
2344
  const baseInfo = {
2229
2345
  hash,
@@ -3856,7 +3972,7 @@ const clearCanvas = (canvas) => {
3856
3972
  };
3857
3973
 
3858
3974
  function validateAreaCreation(dataInfo, hash, areas) {
3859
- if (!dataInfo?.elementMapInfo || !dataInfo?.totalClicks) {
3975
+ if (!dataInfo?.clickMapMetrics || !dataInfo?.totalClicks) {
3860
3976
  logger$4.warn('Cannot create area: missing heatmap data');
3861
3977
  return false;
3862
3978
  }
@@ -4249,7 +4365,7 @@ const useAreaTopAutoDetect = (props) => {
4249
4365
  useEffect(() => {
4250
4366
  if (isInitializing)
4251
4367
  return;
4252
- if (!dataInfo?.elementMapInfo || !dataInfo?.totalClicks)
4368
+ if (!dataInfo?.clickMapMetrics || !dataInfo?.totalClicks)
4253
4369
  return;
4254
4370
  if (!autoCreateTopN)
4255
4371
  return;
@@ -4257,7 +4373,7 @@ const useAreaTopAutoDetect = (props) => {
4257
4373
  return;
4258
4374
  if (areas?.length)
4259
4375
  return;
4260
- const topElements = getTopElementsByClicks(dataInfo.elementMapInfo, autoCreateTopN);
4376
+ const topElements = getTopElementsByClicks(dataInfo.clickMapMetrics, autoCreateTopN);
4261
4377
  const newAreas = [];
4262
4378
  topElements.forEach(({ hash }) => {
4263
4379
  const element = findElementByHash({ hash, vizRef });
@@ -4402,11 +4518,11 @@ const useClickedElement = ({ visualRef, getRect }) => {
4402
4518
  useEffect(() => {
4403
4519
  const hash = selectedElement?.hash;
4404
4520
  // if (hash === clickedElement?.hash) return;
4405
- if (!selectedElement || !hash || !dataInfo?.elementMapInfo) {
4521
+ if (!selectedElement || !hash || !dataInfo?.clickMapMetrics) {
4406
4522
  reset();
4407
4523
  return;
4408
4524
  }
4409
- const info = dataInfo.elementMapInfo[hash];
4525
+ const info = dataInfo.clickMapMetrics[hash];
4410
4526
  if (!info) {
4411
4527
  setClickedElement(null);
4412
4528
  return;
@@ -4447,7 +4563,7 @@ const useElementCalloutVisible = ({ visualRef, getRect, positionMode }) => {
4447
4563
  if (!hash)
4448
4564
  return;
4449
4565
  const elementIsInViewportFn = () => {
4450
- const elementInfo = dataInfo?.elementMapInfo?.[hash];
4566
+ const elementInfo = dataInfo?.clickMapMetrics?.[hash];
4451
4567
  if (!elementInfo)
4452
4568
  return;
4453
4569
  const rect = getRect({ hash, selector: elementInfo.selector });
@@ -4660,7 +4776,7 @@ const useHoveredElement = ({ iframeRef, getRect }) => {
4660
4776
  reset();
4661
4777
  return;
4662
4778
  }
4663
- const selector = dataInfo?.elementMapInfo?.[hash];
4779
+ const selector = dataInfo?.clickMapMetrics?.[hash];
4664
4780
  const rect = getRect({ hash, selector });
4665
4781
  const elementInfo = buildElementInfo(hash, rect, dataInfo);
4666
4782
  if (!elementInfo) {
@@ -4725,7 +4841,7 @@ const findTargetElement = (doc, x, y, heatmapInfo) => {
4725
4841
  for (let i = 0; i < elementsAtPoint.length; i++) {
4726
4842
  const element = elementsAtPoint[i];
4727
4843
  const elementHash = getElementHash(element) ?? '';
4728
- const isExistElmInfo = heatmapInfo.elementMapInfo?.[elementHash];
4844
+ const isExistElmInfo = heatmapInfo.clickMapMetrics?.[elementHash];
4729
4845
  if (elementHash && isExistElmInfo) {
4730
4846
  const boundingBox = getBoundingBox(element);
4731
4847
  if (boundingBox) {
@@ -4744,7 +4860,7 @@ const findTargetElement = (doc, x, y, heatmapInfo) => {
4744
4860
  return targetElement;
4745
4861
  };
4746
4862
  const isIframeReady = (iframeRef, heatmapInfo) => {
4747
- return !!(iframeRef.current?.contentDocument && heatmapInfo?.elementMapInfo);
4863
+ return !!(iframeRef.current?.contentDocument && heatmapInfo?.clickMapMetrics);
4748
4864
  };
4749
4865
  const isValidElement = (element, heatmapInfo) => {
4750
4866
  if (!element)
@@ -4752,7 +4868,7 @@ const isValidElement = (element, heatmapInfo) => {
4752
4868
  const hash = getElementHash(element);
4753
4869
  if (!hash)
4754
4870
  return false;
4755
- return !!heatmapInfo?.elementMapInfo?.[hash];
4871
+ return !!heatmapInfo?.clickMapMetrics?.[hash];
4756
4872
  };
4757
4873
 
4758
4874
  function useIframeHeightProcessor(options) {
@@ -6644,13 +6760,12 @@ const useObserveIframeHeight = (props) => {
6644
6760
  return {};
6645
6761
  };
6646
6762
 
6647
- // Max zoom ratio constant: 100% = fit to width
6648
- const MAX_ZOOM_RATIO = 200;
6649
6763
  const useScaleCalculation = (props) => {
6650
6764
  const widthScale = useHeatmapViz((s) => s.widthScale);
6651
6765
  const zoomRatio = useHeatmapViz((s) => s.zoomRatio);
6652
6766
  const isScaledToFit = useHeatmapViz((s) => s.isScaledToFit);
6653
6767
  const minZoomRatio = useHeatmapViz((s) => s.minZoomRatio);
6768
+ const maxZoomRatio = useHeatmapViz((s) => s.maxZoomRatio);
6654
6769
  const setScale = useHeatmapViz((s) => s.setScale);
6655
6770
  const setIsScaledToFit = useHeatmapViz((s) => s.setIsScaledToFit);
6656
6771
  const setMinZoomRatio = useHeatmapViz((s) => s.setMinZoomRatio);
@@ -6672,9 +6787,9 @@ const useScaleCalculation = (props) => {
6672
6787
  const calculatedMinZoomRatio = (availableHeight / (contentHeight * widthScale)) * 100;
6673
6788
  // Limit minZoomRatio: cannot exceed MAX_ZOOM_RATIO (100%)
6674
6789
  // and should have a reasonable minimum (e.g., 1%)
6675
- const finalMinZoomRatio = Math.max(1, Math.min(calculatedMinZoomRatio, MAX_ZOOM_RATIO));
6790
+ const finalMinZoomRatio = Math.max(1, Math.min(calculatedMinZoomRatio, maxZoomRatio));
6676
6791
  // 4. Apply zoom ratio (clamp between min and max)
6677
- const clampedZoomRatio = Math.max(finalMinZoomRatio, Math.min(zoomRatio, MAX_ZOOM_RATIO));
6792
+ const clampedZoomRatio = Math.max(finalMinZoomRatio, Math.min(zoomRatio, maxZoomRatio));
6678
6793
  const zoomMultiplier = clampedZoomRatio / 100;
6679
6794
  // 5. Calculate finalScale
6680
6795
  // finalScale = widthScale * zoomMultiplier
@@ -6688,7 +6803,7 @@ const useScaleCalculation = (props) => {
6688
6803
  setIsScaledToFit(isCurrentlyFitted);
6689
6804
  setMinZoomRatio(finalMinZoomRatio);
6690
6805
  }
6691
- }, [containerWidth, containerHeight, contentWidth, contentHeight, zoomRatio]);
6806
+ }, [containerWidth, containerHeight, contentWidth, contentHeight, zoomRatio, maxZoomRatio]);
6692
6807
  useEffect(() => {
6693
6808
  calculateScaleResult();
6694
6809
  }, [calculateScaleResult]);
@@ -8633,4 +8748,4 @@ const HeatmapLayout = ({ data, clickmap, clickAreas, scrollmap, controls, dataIn
8633
8748
  }
8634
8749
  };
8635
8750
 
8636
- export { BACKDROP_CONFIG, DEFAULT_SIDEBAR_WIDTH, DEFAULT_VIEW_ID, ELM_CALLOUT_CONFIG, GraphView, HEATMAP_CONFIG, HEATMAP_IFRAME, HEATMAP_STYLE, HeatmapLayout, IClickMode, 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, useHeatmapViz, useHeatmapVizRect, useHoveredElement, useIframeHeight, useIframeHeightProcessor, useMeasureFunction, useRegisterConfig, useRegisterControl, useRegisterData, useRegisterHeatmap, useRenderCount, useScrollmapZones, useTrackHookCall, useViewIdContext, useVizLiveRender, useWhyDidYouUpdate, useWrapperRefHeight, useZonePositions, withPerformanceTracking };
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 };
@@ -11,6 +11,7 @@ export interface IHeatmapDataStore {
11
11
  setClickAreas: (clickAreas: IPersistedAreaData[], viewId?: string) => void;
12
12
  removeClickArea: (areaId: string, viewId?: string) => void;
13
13
  setScrollmap: (scrollmap: ScrollMapPoint[], viewId?: string) => void;
14
+ setDataInfoByKey: <K extends keyof IHeatmapInfo>(key: K, value: IHeatmapInfo[K], viewId?: string) => void;
14
15
  copyView: (fromViewId: string, toViewId: string) => void;
15
16
  clearView: (viewId: string) => void;
16
17
  resetAll: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/stores/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAMhH,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC;IAChD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC,CAAC;IACnD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC,CAAC;IAC1D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;IAChD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC;IAGrD,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGrE,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;EA8G/B,CAAC"}
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/stores/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAMhH,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC;IAChD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC,CAAC;IACnD,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC,CAAC;IAC1D,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC,CAAC;IAChD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC;IAGrD,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClE,aAAa,EAAE,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,YAAY,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,gBAAgB,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAG1G,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,mBAAmB;;;;;;;;EA2H/B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  export * from './comp';
2
2
  export * from './config';
3
3
  export * from './data';
4
+ export * from './setting';
4
5
  export * from './viz';
5
6
  export * from './viz-area-click';
6
7
  export * from './viz-click';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AAEvB,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stores/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAE1B,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { IClickType, IClickRankType, IScrollType } from '../types';
2
+ export interface IHeatmapSettingStore {
3
+ rankedBy: Map<string, IClickRankType | undefined>;
4
+ clickType: Map<string, IClickType | undefined>;
5
+ scrollType: Map<string, IScrollType | undefined>;
6
+ setRankedBy: (rankedBy: IClickRankType, viewId?: string) => void;
7
+ setClickType: (clickType: IClickType, viewId?: string) => void;
8
+ setScrollType: (scrollType: IScrollType, viewId?: string) => void;
9
+ copyView: (fromViewId: string, toViewId: string) => void;
10
+ clearView: (viewId: string) => void;
11
+ resetAll: () => void;
12
+ }
13
+ export declare const useHeatmapSettingStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<IHeatmapSettingStore>, "subscribe"> & {
14
+ subscribe: {
15
+ (listener: (selectedState: IHeatmapSettingStore, previousSelectedState: IHeatmapSettingStore) => void): () => void;
16
+ <U>(selector: (state: IHeatmapSettingStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
17
+ equalityFn?: ((a: U, b: U) => boolean) | undefined;
18
+ fireImmediately?: boolean;
19
+ } | undefined): () => void;
20
+ };
21
+ }>;
22
+ //# sourceMappingURL=setting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setting.d.ts","sourceRoot":"","sources":["../../src/stores/setting.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,WAAW,oBAAoB;IAEnC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,CAAC,CAAC;IAClD,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IAGjD,WAAW,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,YAAY,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,aAAa,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGlE,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;EAsElC,CAAC"}
@@ -2,11 +2,13 @@ export interface IHeatmapVizStore {
2
2
  isRenderViz: Map<string, boolean>;
3
3
  zoomRatio: Map<string, number>;
4
4
  minZoomRatio: Map<string, number>;
5
+ maxZoomRatio: Map<string, number>;
5
6
  scale: Map<string, number>;
6
7
  isScaledToFit: Map<string, boolean>;
7
8
  setIsRenderViz: (isRenderViz: boolean, viewId?: string) => void;
8
9
  setZoomRatio: (zoomRatio: number, viewId?: string) => void;
9
10
  setMinZoomRatio: (minZoomRatio: number, viewId?: string) => void;
11
+ setMaxZoomRatio: (maxZoomRatio: number, viewId?: string) => void;
10
12
  setScale: (scale: number, viewId?: string) => void;
11
13
  setIsScaledToFit: (isScaledToFit: boolean, viewId?: string) => void;
12
14
  copyView: (fromViewId: string, toViewId: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"viz.d.ts","sourceRoot":"","sources":["../../src/stores/viz.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAE/B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpE,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB;;;;;;;;EAoG9B,CAAC"}
1
+ {"version":3,"file":"viz.d.ts","sourceRoot":"","sources":["../../src/stores/viz.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAE/B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,gBAAgB,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpE,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAGzD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,eAAO,MAAM,kBAAkB;;;;;;;;EA4G9B,CAAC"}
@@ -1,8 +1,27 @@
1
- import type { ElementMapInfo, HeatmapElement } from './viz-elm';
1
+ import type { IClickmapSorted } from './viz-elm';
2
2
  import type { ScrollMapInfo } from './viz-scrollmap';
3
+ export interface IMetricResult<K = number | undefined, F = string> {
4
+ formatter: F;
5
+ value: K;
6
+ }
7
+ export interface IClickMapMetricData<K = number | undefined, F = string> {
8
+ hash: string;
9
+ selector?: string;
10
+ totalClicked: IMetricResult<K, F>;
11
+ totalOrders: IMetricResult<K, F>;
12
+ totalRevenue: IMetricResult<K, F>;
13
+ conversionRate: IMetricResult<K, F>;
14
+ attributionRate: IMetricResult<K, F>;
15
+ revenuePerClick: IMetricResult<K, F>;
16
+ revenuePerSession: IMetricResult<K, F>;
17
+ totalSessions: IMetricResult<K, F>;
18
+ }
19
+ export interface IClickMapMetric<K = number | undefined, F = string> {
20
+ [key: string]: IClickMapMetricData<K, F>;
21
+ }
3
22
  export interface IHeatmapInfo {
4
- sortedElements?: HeatmapElement[];
5
- elementMapInfo?: ElementMapInfo;
23
+ sortedElements?: IClickmapSorted[];
24
+ clickMapMetrics?: IClickMapMetric;
6
25
  scrollMapInfo?: ScrollMapInfo;
7
26
  totalClicks?: number;
8
27
  width?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"heatmap-info.d.ts","sourceRoot":"","sources":["../../src/types/heatmap-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"heatmap-info.d.ts","sourceRoot":"","sources":["../../src/types/heatmap-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC,GAAG,MAAM;IAC/D,SAAS,EAAE,CAAC,CAAC;IACb,KAAK,EAAE,CAAC,CAAC;CACV;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC,GAAG,MAAM;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,WAAW,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,YAAY,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,cAAc,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,eAAe,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,eAAe,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,iBAAiB,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,aAAa,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC,GAAG,MAAM;IACjE,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -11,6 +11,14 @@ export declare enum IClickType {
11
11
  First = "first-clicks",
12
12
  Last = "last-clicks"
13
13
  }
14
+ export declare enum IClickRankType {
15
+ MostClicks = "most-clicks",
16
+ Revenue = "revenue",
17
+ AttributionRate = "attribution-rate",
18
+ ConversionRate = "conversion-rate",
19
+ RevenuePerClick = "revenue-per-click",
20
+ RevenuePerSession = "revenue-per-session"
21
+ }
14
22
  export declare enum IClickMode {
15
23
  Default = "default",
16
24
  Area = "click-area"
@@ -1 +1 @@
1
- {"version":3,"file":"heatmap.d.ts","sourceRoot":"","sources":["../../src/types/heatmap.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACtB,KAAK,UAAU;IACf,SAAS,eAAe;IACxB,MAAM,WAAW;CAClB;AAED,oBAAY,UAAU;IACpB,KAAK,iBAAiB;IACtB,IAAI,gBAAgB;IACpB,IAAI,gBAAgB;IACpB,KAAK,iBAAiB;IACtB,KAAK,iBAAiB;IACtB,IAAI,gBAAgB;CACrB;AACD,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,IAAI,eAAe;CACpB;AAED,oBAAY,WAAW;IACrB,KAAK,iBAAiB;IACtB,SAAS,qBAAqB;IAC9B,OAAO,mBAAmB;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B"}
1
+ {"version":3,"file":"heatmap.d.ts","sourceRoot":"","sources":["../../src/types/heatmap.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IACtB,KAAK,UAAU;IACf,SAAS,eAAe;IACxB,MAAM,WAAW;CAClB;AAED,oBAAY,UAAU;IACpB,KAAK,iBAAiB;IACtB,IAAI,gBAAgB;IACpB,IAAI,gBAAgB;IACpB,KAAK,iBAAiB;IACtB,KAAK,iBAAiB;IACtB,IAAI,gBAAgB;CACrB;AAED,oBAAY,cAAc;IACxB,UAAU,gBAAgB;IAC1B,OAAO,YAAY;IACnB,eAAe,qBAAqB;IACpC,cAAc,oBAAoB;IAClC,eAAe,sBAAsB;IACrC,iBAAiB,wBAAwB;CAC1C;AAED,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,IAAI,eAAe;CACpB;AAED,oBAAY,WAAW;IACrB,KAAK,iBAAiB;IACtB,SAAS,qBAAqB;IAC9B,OAAO,mBAAmB;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B"}
@@ -15,10 +15,10 @@ export interface ElementInfo extends ElementRect {
15
15
  y: number;
16
16
  };
17
17
  }
18
- export interface HeatmapElement {
18
+ export interface IClickmapSorted {
19
19
  hash: string;
20
+ rank: number;
20
21
  selector?: string;
21
- totalclicks?: number;
22
22
  }
23
23
  export interface ElementMapInfoItem {
24
24
  totalclicks: number;
@@ -1 +1 @@
1
- {"version":3,"file":"viz-elm.d.ts","sourceRoot":"","sources":["../../src/types/viz-elm.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACnC;AAGD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC;CAC3C"}
1
+ {"version":3,"file":"viz-elm.d.ts","sourceRoot":"","sources":["../../src/types/viz-elm.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACnC;AAGD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,CAAC;CAC3C"}
@@ -1,6 +1,6 @@
1
- import type { ElementRect, HeatmapElement } from '../../types';
1
+ import type { ElementRect, IClickmapSorted } from '../../types';
2
2
  interface Props {
3
- getRect: (el?: HeatmapElement) => ElementRect | null;
3
+ getRect: (el?: IClickmapSorted) => ElementRect | null;
4
4
  hidden?: boolean;
5
5
  }
6
6
  export declare const DefaultRankBadges: import("react").NamedExoticComponent<Props>;
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultRankBadges.d.ts","sourceRoot":"","sources":["../../../src/components/VizElement/DefaultRankBadges.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO/D,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,KAAK,WAAW,GAAG,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+BD,eAAO,MAAM,iBAAiB,6CAAmC,CAAC"}
1
+ {"version":3,"file":"DefaultRankBadges.d.ts","sourceRoot":"","sources":["../../../src/components/VizElement/DefaultRankBadges.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOhE,UAAU,KAAK;IACb,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,eAAe,KAAK,WAAW,GAAG,IAAI,CAAC;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+BD,eAAO,MAAM,iBAAiB,6CAAmC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementCalloutOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/VizElement/ElementCalloutOverlay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAO5D,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA2C/D,CAAC"}
1
+ {"version":3,"file":"ElementCalloutOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/VizElement/ElementCalloutOverlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAQ5D,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA2C/D,CAAC"}
@@ -4,4 +4,5 @@ export * from './iframe';
4
4
  export * from './style';
5
5
  export * from './viewId';
6
6
  export * from './z-index';
7
+ export * from './zoom';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configs/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configs/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const DEFAULT_ZOOM_RATIO: {
2
+ DEFAULT: number;
3
+ MIN: number;
4
+ MAX: number;
5
+ };
6
+ //# sourceMappingURL=zoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../../src/configs/zoom.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC"}
@@ -1,6 +1,6 @@
1
- import type { ElementMapInfo, IAreaNode, IHeatmapInfo, IPersistedAreaData } from '../../types';
1
+ import type { IAreaNode, IClickMapMetric, IHeatmapInfo, IPersistedAreaData } from '../../types';
2
2
  export declare function buildAreaNode(element: HTMLElement, hash: string, heatmapInfo: IHeatmapInfo, shadowRoot?: HTMLElement, persistedData?: IPersistedAreaData): IAreaNode | undefined;
3
- export declare function getTopElementsByClicks(elementMapInfo: ElementMapInfo, topN?: number): Array<{
3
+ export declare function getTopElementsByClicks(clickMapMetrics: IClickMapMetric, topN?: number): Array<{
4
4
  hash: string;
5
5
  totalclicks: number;
6
6
  selector: string;
@@ -1 +1 @@
1
- {"version":3,"file":"area-builder.d.ts","sourceRoot":"","sources":["../../../src/helpers/viz-area-click/area-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAa,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAkD1G,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,YAAY,EACzB,UAAU,CAAC,EAAE,WAAW,EACxB,aAAa,CAAC,EAAE,kBAAkB,GACjC,SAAS,GAAG,SAAS,CAmDvB;AAED,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,cAAc,EAC9B,IAAI,GAAE,MAAW,GAChB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAWhE"}
1
+ {"version":3,"file":"area-builder.d.ts","sourceRoot":"","sources":["../../../src/helpers/viz-area-click/area-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,SAAS,EAAa,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAkD3H,wBAAgB,aAAa,CAC3B,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,YAAY,EACzB,UAAU,CAAC,EAAE,WAAW,EACxB,aAAa,CAAC,EAAE,kBAAkB,GACjC,SAAS,GAAG,SAAS,CAmDvB;AAED,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,eAAe,EAChC,IAAI,GAAE,MAAW,GAChB,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAWhE"}
@@ -3,6 +3,7 @@ export * from './useHeatmapClick';
3
3
  export * from './useHeatmapData';
4
4
  export * from './useHeatmapHover';
5
5
  export * from './useHeatmapScroll';
6
+ export * from './useHeatmapSetting';
6
7
  export * from './useHeatmapViz';
7
8
  export * from './useHeatmapVizRect';
8
9
  export * from './useHeatmapCopyView';