@gooddata/sdk-ui-geo 11.58.0-alpha.1 → 11.58.0-alpha.3

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 (37) hide show
  1. package/esm/next/layers/area/adapter.d.ts.map +1 -1
  2. package/esm/next/layers/area/adapter.js +9 -7
  3. package/esm/next/layers/area/data/transformation.d.ts.map +1 -1
  4. package/esm/next/layers/area/data/transformation.js +4 -0
  5. package/esm/next/layers/area/source.d.ts.map +1 -1
  6. package/esm/next/layers/area/source.js +5 -1
  7. package/esm/next/layers/area/tooltip/tooltipManagement.js +2 -2
  8. package/esm/next/layers/common/customTooltipExecution.d.ts +5 -0
  9. package/esm/next/layers/common/customTooltipExecution.d.ts.map +1 -1
  10. package/esm/next/layers/common/customTooltipExecution.js +5 -1
  11. package/esm/next/layers/common/mapFacade.d.ts +2 -1
  12. package/esm/next/layers/common/mapFacade.d.ts.map +1 -1
  13. package/esm/next/layers/common/resolveReferencesFromGeoFeature.d.ts.map +1 -1
  14. package/esm/next/layers/common/resolveReferencesFromGeoFeature.js +12 -14
  15. package/esm/next/layers/common/tooltipReferenceMaps.d.ts +5 -8
  16. package/esm/next/layers/common/tooltipReferenceMaps.d.ts.map +1 -1
  17. package/esm/next/layers/common/tooltipReferenceMaps.js +13 -17
  18. package/esm/next/layers/common/tooltipUtils.d.ts +28 -1
  19. package/esm/next/layers/common/tooltipUtils.d.ts.map +1 -1
  20. package/esm/next/layers/common/tooltipUtils.js +22 -4
  21. package/esm/next/layers/pushpin/adapter.d.ts.map +1 -1
  22. package/esm/next/layers/pushpin/adapter.js +11 -4
  23. package/esm/next/layers/pushpin/data/transformation.d.ts.map +1 -1
  24. package/esm/next/layers/pushpin/data/transformation.js +4 -0
  25. package/esm/next/layers/pushpin/source.d.ts.map +1 -1
  26. package/esm/next/layers/pushpin/source.js +5 -1
  27. package/esm/next/layers/pushpin/tooltip/tooltipManagement.d.ts.map +1 -1
  28. package/esm/next/layers/pushpin/tooltip/tooltipManagement.js +2 -6
  29. package/esm/next/layers/registry/adapterTypes.d.ts +19 -11
  30. package/esm/next/layers/registry/adapterTypes.d.ts.map +1 -1
  31. package/esm/next/map/style/styleEndpoint.d.ts.map +1 -1
  32. package/esm/next/map/style/styleEndpoint.js +8 -1
  33. package/esm/next/types/geoData/area.d.ts +6 -0
  34. package/esm/next/types/geoData/area.d.ts.map +1 -1
  35. package/esm/next/types/geoData/common.d.ts +6 -0
  36. package/esm/next/types/geoData/common.d.ts.map +1 -1
  37. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/area/adapter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAkBjE,OAAO,EACH,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACxB,MAAM,6BAA6B,CAAC;AAkIrC,eAAO,MAAM,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAiMzE,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/area/adapter.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAkBjE,OAAO,EACH,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACxB,MAAM,6BAA6B,CAAC;AAqIrC,eAAO,MAAM,WAAW,EAAE,gBAAgB,CAAC,aAAa,EAAE,gBAAgB,CAiMzE,CAAC"}
@@ -82,12 +82,10 @@ function buildAreaTooltipExecution(layer, context, mainDefinition) {
82
82
  if (!customTooltip?.enabled || !customTooltip.content) {
83
83
  return null;
84
84
  }
85
- // idRef-only: `buildLookupTable` keys rows by the result descriptor's
86
- // identifier. A uriRef-backed display form would produce a hover key the
87
- // lookup can't match — skip the whole tooltip execution rather than fetch
88
- // values that won't resolve at hover time.
89
- const areaAttrId = getAttributeIdRefIdentifier(layer.area);
90
- if (!areaAttrId) {
85
+ // idRef-only: the tooltip-execution backend path cannot resolve a uriRef-backed
86
+ // display form, so skip the whole tooltip execution rather than fetch values
87
+ // that won't resolve at hover time.
88
+ if (!getAttributeIdRefIdentifier(layer.area)) {
91
89
  return null;
92
90
  }
93
91
  // Slice by AREA only — features are deduplicated by areaUri, so a tooltip
@@ -103,6 +101,10 @@ function buildAreaTooltipExecution(layer, context, mainDefinition) {
103
101
  if (!built) {
104
102
  return null;
105
103
  }
104
+ // The key is built from the execution-local identifier, not the LDM id, because an LDM id
105
+ // is unique only within an object type — see `buildKeySegment`. It is the same localId the
106
+ // tooltip execution was sliced by, so the lookup side agrees.
107
+ const areaAttrLocalId = slicingAttributeLocalIds[0];
106
108
  const buildFeatureKey = (properties) => {
107
109
  if (!properties) {
108
110
  return null;
@@ -111,7 +113,7 @@ function buildAreaTooltipExecution(layer, context, mainDefinition) {
111
113
  if (!areaUri) {
112
114
  return null;
113
115
  }
114
- return buildKeySegment(areaAttrId, areaUri);
116
+ return buildKeySegment(areaAttrLocalId, areaUri);
115
117
  };
116
118
  return { execution: built, buildFeatureKey };
117
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../../../../src/next/layers/area/data/transformation.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,oBAAoB,EAGzB,KAAK,aAAa,EAKrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,gCAAgC,CAAC;AAgRtF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,EAAE,EAAE,cAAc,EAClB,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,GACzB,YAAY,CAmCd;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,aAAa,EAAE,cAAc,EAAE,EAC/B,OAAO,EAAE,YAAY,GACtB,iBAAiB,CAWnB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACvE,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,aAAa,EAAE,kBAAkB,CAAC;IAClC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,oBAAoB,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CACzC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,YAAY,GACtB,0BAA0B,CAkC5B"}
1
+ {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../../../../src/next/layers/area/data/transformation.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,oBAAoB,EAGzB,KAAK,aAAa,EAKrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC/F,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,gCAAgC,CAAC;AAqRtF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,EAAE,EAAE,cAAc,EAClB,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,GACzB,YAAY,CAmCd;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,aAAa,EAAE,cAAc,EAAE,EAC/B,OAAO,EAAE,YAAY,GACtB,iBAAiB,CAWnB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACvE,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,aAAa,EAAE,kBAAkB,CAAC;IAClC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACnD,oBAAoB,EAAE,kBAAkB,GAAG,SAAS,CAAC;CACxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CACzC,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,YAAY,GACtB,0BAA0B,CAkC5B"}
@@ -78,6 +78,7 @@ function getAttributeBucketInfo(buckets, attributeDescriptors, bucketName) {
78
78
  name: attributeDescriptors[index].attributeHeader.formOf.name,
79
79
  displayFormId: attributeDescriptors[index].attributeHeader.identifier ??
80
80
  attributeDescriptors[index].attributeHeader.uri,
81
+ localIdentifier: attributeDescriptors[index].attributeHeader.localIdentifier,
81
82
  };
82
83
  }
83
84
  function getMeasureBucketInfo(buckets, measureDescriptors, bucketName) {
@@ -114,6 +115,7 @@ function processAreaBucket(ctx) {
114
115
  index: areaBucket.index,
115
116
  name: areaBucket.name,
116
117
  displayFormId: areaBucket.displayFormId,
118
+ localIdentifier: areaBucket.localIdentifier,
117
119
  data,
118
120
  uris,
119
121
  };
@@ -133,6 +135,7 @@ function processSegmentBucket(ctx) {
133
135
  index: segmentBucket.index,
134
136
  name: segmentBucket.name,
135
137
  displayFormId: segmentBucket.displayFormId,
138
+ localIdentifier: segmentBucket.localIdentifier,
136
139
  data,
137
140
  uris,
138
141
  };
@@ -152,6 +155,7 @@ function processTooltipTextBucket(ctx) {
152
155
  index: tooltipTextBucket.index,
153
156
  name: tooltipTextBucket.name,
154
157
  displayFormId: tooltipTextBucket.displayFormId,
158
+ localIdentifier: tooltipTextBucket.localIdentifier,
155
159
  data,
156
160
  uris,
157
161
  };
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/area/source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAMxF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,cAAc,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACL;AAED,KAAK,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3F,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,EAAE,CAAC;AAkN/D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,0BAA0B,EAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,0BAA0B,CA6B5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAChD,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,kBAAkB,GAC5B,0BAA0B,CA0B5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,0BAA0B,EAClC,cAAc,EAAE,8BAA8B,EAAE,EAAE,GAAG,SAAS,GAC/D,0BAA0B,CAiB5B;AAgGD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,oBAAoB,GAAG,0BAA0B,CAUtG"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/area/source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAMxF;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACjC,aAAa,EAAE,cAAc,CAAC;IAC9B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACL;AAED,KAAK,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3F,MAAM,MAAM,uBAAuB,GAAG,sBAAsB,EAAE,CAAC;AAwN/D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,0BAA0B,EAClC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,0BAA0B,CA6B5B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAChD,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,kBAAkB,GAC5B,0BAA0B,CA0B5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACtC,MAAM,EAAE,0BAA0B,EAClC,cAAc,EAAE,8BAA8B,EAAE,EAAE,GAAG,SAAS,GAC/D,0BAA0B,CAiB5B;AAkGD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,oBAAoB,GAAG,0BAA0B,CAUtG"}
@@ -44,7 +44,7 @@ function createPlaceholderGeometry() {
44
44
  };
45
45
  }
46
46
  function buildAreaProperties(args) {
47
- const { index, areaIdentifier, areaUri, areaNameTitle, tooltipValue, tooltipUri, tooltipTitle, tooltipAttrId, colorTitle, colorValue, colorFormat, colorLocalId, areaColorFill, segmentTitle, segmentValue, segmentAttrId, segmentUris, } = args;
47
+ const { index, areaIdentifier, areaUri, areaNameTitle, tooltipValue, tooltipUri, tooltipTitle, tooltipAttrId, tooltipAttrLocalId, colorTitle, colorValue, colorFormat, colorLocalId, areaColorFill, segmentTitle, segmentValue, segmentAttrId, segmentAttrLocalId, segmentUris, } = args;
48
48
  const properties = {
49
49
  areaId: areaIdentifier,
50
50
  areaUri,
@@ -53,6 +53,7 @@ function buildAreaProperties(args) {
53
53
  title: tooltipTitle ?? areaNameTitle,
54
54
  value: tooltipValue ?? areaIdentifier,
55
55
  attrId: tooltipAttrId,
56
+ attrLocalId: tooltipAttrLocalId,
56
57
  uri: tooltipUri ?? areaUri,
57
58
  },
58
59
  locationIndex: index,
@@ -74,6 +75,7 @@ function buildAreaProperties(args) {
74
75
  uri: segmentUris?.[0],
75
76
  uris: segmentUris,
76
77
  attrId: segmentAttrId,
78
+ attrLocalId: segmentAttrLocalId,
77
79
  };
78
80
  }
79
81
  return properties;
@@ -263,6 +265,7 @@ function createAreaFeatures({ geoData, colorStrategy, features, tooltipAttrIds,
263
265
  tooltipUri: areaData.tooltipUri,
264
266
  tooltipTitle: tooltipTextTitle,
265
267
  tooltipAttrId: tooltipText?.displayFormId ?? area.displayFormId ?? tooltipAttrIds?.locationName,
268
+ tooltipAttrLocalId: tooltipText?.localIdentifier ?? area.localIdentifier,
266
269
  colorTitle,
267
270
  colorValue: areaData.colorValue,
268
271
  colorFormat,
@@ -271,6 +274,7 @@ function createAreaFeatures({ geoData, colorStrategy, features, tooltipAttrIds,
271
274
  segmentTitle: areaData.segmentTitle,
272
275
  segmentValue: areaData.segmentValue,
273
276
  segmentAttrId: segment?.displayFormId ?? tooltipAttrIds?.segment,
277
+ segmentAttrLocalId: segment?.localIdentifier,
274
278
  segmentUris: areaData.segmentUris,
275
279
  });
276
280
  const mergedProperties = toMaplibreProperties(baseFeature?.properties, properties);
@@ -2,7 +2,7 @@
2
2
  import { buildTooltipLocalizedStrings } from "@gooddata/sdk-ui-vis-commons";
3
3
  import { buildCustomTooltipPieces, composeTooltipBody } from "../../common/customTooltipSection.js";
4
4
  import { presentTooltip } from "../../common/tooltipPlacement.js";
5
- import { dedupeAttributePayloadsByAttrId, formatAttributeHtml, formatMeasureHtml, getTooltipProperties, parseTooltipPayload, } from "../../common/tooltipUtils.js";
5
+ import { dedupeAttributePayloads, formatAttributeHtml, formatMeasureHtml, getTooltipProperties, parseTooltipPayload, } from "../../common/tooltipUtils.js";
6
6
  function escapeHtml(str) {
7
7
  return str
8
8
  .replace(/&/g, "&")
@@ -16,7 +16,7 @@ const tooltipFormatConfig = {
16
16
  escape: escapeHtml,
17
17
  };
18
18
  function buildAreaTooltipHtml(rawProperties, locationName, color, segment, strokeColor, separators, customConfig, referenceMaps, intl, tooltipLookup) {
19
- const attributeItems = dedupeAttributePayloadsByAttrId([locationName, segment])
19
+ const attributeItems = dedupeAttributePayloads([locationName, segment], referenceMaps)
20
20
  .map((payload) => formatAttributeHtml(payload, tooltipFormatConfig))
21
21
  .filter((item) => item !== null);
22
22
  const measureItem = formatMeasureHtml(color, separators, tooltipFormatConfig);
@@ -38,6 +38,10 @@ export declare function getAttributeLocalIdsFromBuckets(definition: IExecutionDe
38
38
  * to its identifying fields. `attrId === undefined` signals "no stable key for
39
39
  * this feature" — callers compare against the expected layer attribute id.
40
40
  *
41
+ * `attrLocalId` is the execution-local identifier, which is what the tooltip lookup key is
42
+ * built from: an LDM id is unique only within an object type, so a label and a computed
43
+ * attribute can share one (see `buildKeySegment`).
44
+ *
41
45
  * Reuses `parseTooltipPayload` so the JSON-string-or-object handling stays in
42
46
  * one place (MapLibre stringifies complex GeoJSON property values when they
43
47
  * round-trip through `queryRenderedFeatures`).
@@ -46,6 +50,7 @@ export declare function getAttributeLocalIdsFromBuckets(definition: IExecutionDe
46
50
  */
47
51
  export declare function readAttrIdentity(payload: JsonValue | undefined): {
48
52
  attrId?: string;
53
+ attrLocalId?: string;
49
54
  uri: string;
50
55
  };
51
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"customTooltipExecution.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/customTooltipExecution.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,UAAU,EACf,KAAK,oBAAoB,EAM5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAErG,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,KAAK,MAAM,GAAG,IAAI,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC5C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC9C,eAAe,EAAE,eAAe,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC3C,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,EAAE,CAcV;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAUjG;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASjG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYvF;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC7C,UAAU,EAAE,oBAAoB,EAChC,UAAU,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAMpB"}
1
+ {"version":3,"file":"customTooltipExecution.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/customTooltipExecution.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,UAAU,EACf,KAAK,oBAAoB,EAM5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAErG,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,KAAK,MAAM,GAAG,IAAI,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC5C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;CACpC;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAC9C,eAAe,EAAE,eAAe,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC3C,UAAU,EAAE,oBAAoB,EAChC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,EAAE,CAcV;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACf,CAUA;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASjG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYvF;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC7C,UAAU,EAAE,oBAAoB,EAChC,UAAU,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAMpB"}
@@ -27,6 +27,10 @@ export function getAttributeLocalIdsFromBuckets(definition, bucketNames) {
27
27
  * to its identifying fields. `attrId === undefined` signals "no stable key for
28
28
  * this feature" — callers compare against the expected layer attribute id.
29
29
  *
30
+ * `attrLocalId` is the execution-local identifier, which is what the tooltip lookup key is
31
+ * built from: an LDM id is unique only within an object type, so a label and a computed
32
+ * attribute can share one (see `buildKeySegment`).
33
+ *
30
34
  * Reuses `parseTooltipPayload` so the JSON-string-or-object handling stays in
31
35
  * one place (MapLibre stringifies complex GeoJSON property values when they
32
36
  * round-trip through `queryRenderedFeatures`).
@@ -42,7 +46,7 @@ export function readAttrIdentity(payload) {
42
46
  return { uri: "" };
43
47
  }
44
48
  const parsed = parseTooltipPayload(payload);
45
- return { attrId: parsed?.attrId, uri: parsed?.uri ?? "" };
49
+ return { attrId: parsed?.attrId, attrLocalId: parsed?.attrLocalId, uri: parsed?.uri ?? "" };
46
50
  }
47
51
  /**
48
52
  * URI refs return `undefined` — the tooltip-execution backend path can't
@@ -1,4 +1,4 @@
1
- import type { AddProtocolAction as MapLibreAddProtocolAction, CircleLayerSpecification as MapLibreCircleLayerSpecification, ExpressionSpecification as MapLibreExpressionSpecification, FillLayerSpecification as MapLibreFillLayerSpecification, FilterSpecification as MapLibreFilterSpecification, GeoJSONSourceSpecification as MapLibreGeoJSONSourceSpecification, LineLayerSpecification as MapLibreLineLayerSpecification, LngLatBoundsLike as MapLibreLngLatBoundsLike, LngLatLike as MapLibreLngLatLike, Map as MapLibreMap, MapEventType as MapLibreMapEventType, MapMouseEvent as MapLibreMapMouseEvent, MapOptions as MapLibreMapOptions, Popup as MapLibrePopup, PopupOptions as MapLibrePopupOptions, StyleSpecification as MapLibreStyleSpecification, SymbolLayerSpecification as MapLibreSymbolLayerSpecification } from "maplibre-gl";
1
+ import type { AddProtocolAction as MapLibreAddProtocolAction, CircleLayerSpecification as MapLibreCircleLayerSpecification, ExpressionSpecification as MapLibreExpressionSpecification, FillLayerSpecification as MapLibreFillLayerSpecification, FilterSpecification as MapLibreFilterSpecification, GeoJSONSourceSpecification as MapLibreGeoJSONSourceSpecification, LineLayerSpecification as MapLibreLineLayerSpecification, LngLatBoundsLike as MapLibreLngLatBoundsLike, LngLatLike as MapLibreLngLatLike, Map as MapLibreMap, MapEventType as MapLibreMapEventType, MapMouseEvent as MapLibreMapMouseEvent, MapOptions as MapLibreMapOptions, Popup as MapLibrePopup, PopupOptions as MapLibrePopupOptions, ProjectionSpecification as MapLibreProjectionSpecification, StyleSpecification as MapLibreStyleSpecification, SymbolLayerSpecification as MapLibreSymbolLayerSpecification } from "maplibre-gl";
2
2
  import type { IGeoLngLatBounds } from "../../types/common/coordinates.js";
3
3
  export type Map = MapLibreMap;
4
4
  export type Popup = MapLibrePopup;
@@ -8,6 +8,7 @@ export type Popup = MapLibrePopup;
8
8
  * @public
9
9
  */
10
10
  export type StyleSpecification = MapLibreStyleSpecification;
11
+ export type ProjectionSpecification = MapLibreProjectionSpecification;
11
12
  export type GeoJSONSourceSpecification = MapLibreGeoJSONSourceSpecification;
12
13
  export type FilterSpecification = MapLibreFilterSpecification;
13
14
  export type ExpressionSpecification = MapLibreExpressionSpecification;
@@ -1 +1 @@
1
- {"version":3,"file":"mapFacade.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/mapFacade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mapFacade.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/mapFacade.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveReferencesFromGeoFeature.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/resolveReferencesFromGeoFeature.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACH,KAAK,wBAAwB,EAMhC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,+BAA+B,CAC3C,UAAU,EAAE,OAAO,CAAC,iBAAiB,EACrC,aAAa,EAAE,qBAAqB,GAAG,SAAS,EAChD,UAAU,EAAE,WAAW,GAAG,SAAS,GACpC,wBAAwB,CAwE1B"}
1
+ {"version":3,"file":"resolveReferencesFromGeoFeature.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/resolveReferencesFromGeoFeature.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACH,KAAK,wBAAwB,EAKhC,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAIzE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,+BAA+B,CAC3C,UAAU,EAAE,OAAO,CAAC,iBAAiB,EACrC,aAAa,EAAE,qBAAqB,GAAG,SAAS,EAChD,UAAU,EAAE,WAAW,GAAG,SAAS,GACpC,wBAAwB,CAsE1B"}
@@ -1,5 +1,5 @@
1
1
  // (C) 2026 GoodData Corporation
2
- import { computedAttributeKey, labelKey, labelReference, measureReference, metricKey, } from "@gooddata/sdk-ui-vis-commons";
2
+ import { labelKey, labelReference, measureReference, metricKey, } from "@gooddata/sdk-ui-vis-commons";
3
3
  import { getTooltipProperties, parseTooltipPayload } from "./tooltipUtils.js";
4
4
  /**
5
5
  * Builds the resolver lookup table for a hovered GeoJSON feature.
@@ -24,29 +24,27 @@ export function resolveReferencesFromGeoFeature(properties, referenceMaps, separ
24
24
  }
25
25
  const props = getTooltipProperties(properties);
26
26
  const measureLdmByLocalId = referenceMaps?.measures ?? {};
27
- const attributeIdByDisplayFormId = referenceMaps?.attributes ?? {};
28
- const computedAttributeIds = new Set(referenceMaps?.computedAttributeIds ?? []);
27
+ const attributeKeysByLocalId = referenceMaps?.attributes ?? {};
29
28
  const registerAttribute = (payload) => {
30
29
  if (!payload?.attrId || payload.value === undefined) {
31
30
  return;
32
31
  }
33
32
  const status = labelReference(String(payload.value));
34
- // A computed attribute publishes under its own namespace, so it cannot be answered by -
35
- // or answer - a label that happens to share its identifier.
36
- const buildKey = computedAttributeIds.has(payload.attrId) ? computedAttributeKey : labelKey;
37
- const displayFormKey = buildKey(payload.attrId);
33
+ // The reference keys come from the maps, looked up by the attribute's localIdentifier -
34
+ // exactly how a measure resolves its LDM id. They carry the object type, which the
35
+ // payload's `attrId` cannot: an LDM id is unique only within a type, so a label and a
36
+ // computed attribute may share one. A payload with no localIdentifier predates this and
37
+ // is treated as a label, which is what it would have resolved as before.
38
+ const keys = payload.attrLocalId ? attributeKeysByLocalId[payload.attrLocalId] : undefined;
39
+ const displayFormKey = keys?.displayFormKey ?? labelKey(payload.attrId);
38
40
  if (values[displayFormKey] === undefined) {
39
41
  values[displayFormKey] = status;
40
42
  }
41
- // When `attrId` and the parent attribute id are equal, `attributeKey`
43
+ // When the display form and the parent attribute ids coincide, `attributeKey`
42
44
  // collapses onto `displayFormKey` and the second write is a no-op
43
45
  // under first-wins — no self-equality check needed.
44
- const attributeId = attributeIdByDisplayFormId[payload.attrId];
45
- if (attributeId) {
46
- const attributeKey = buildKey(attributeId);
47
- if (values[attributeKey] === undefined) {
48
- values[attributeKey] = status;
49
- }
46
+ if (keys && values[keys.attributeKey] === undefined) {
47
+ values[keys.attributeKey] = status;
50
48
  }
51
49
  };
52
50
  const registerMeasure = (payload) => {
@@ -5,14 +5,11 @@ import { type ITooltipReferenceMaps } from "../registry/adapterTypes.js";
5
5
  *
6
6
  * - `measures`: `localIdentifier` → LDM measure id (skipping measures whose
7
7
  * identifier ref can't be resolved, e.g. arithmetic measures).
8
- * - `attributes`: display-form id → attribute id, sourced from each attribute
9
- * descriptor's `identifier` (the display-form id surfaced on tooltip
10
- * payloads as `attrId`) paired with `formOf.identifier` (the parent
11
- * attribute id). Entries where both ids are equal are still emitted so
12
- * callers can do a single lookup without a self-equality check.
13
- * - `computedAttributeIds`: which of those ids name a computed attribute, read from the
14
- * descriptor ref the backend types honestly, so the resolver can publish them under their own
15
- * key namespace instead of the label one.
8
+ * - `attributes`: attribute localIdentifier (surfaced on tooltip payloads as `attrLocalId`)
9
+ * → the typed reference keys for its display form and its parent attribute. The type comes
10
+ * from the descriptor's ref, which the backend types honestly, and is what separates a
11
+ * computed attribute from a label of the same id. Entries where both keys are equal are
12
+ * still emitted so callers can do a single lookup without a self-equality check.
16
13
  *
17
14
  * @internal
18
15
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipReferenceMaps.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/tooltipReferenceMaps.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,qBAAqB,CA6BzF"}
1
+ {"version":3,"file":"tooltipReferenceMaps.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/tooltipReferenceMaps.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAA8B,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAErG;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,GAAG,qBAAqB,CA4BzF"}
@@ -1,19 +1,16 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { isComputedAttributeRef, measureLocalId } from "@gooddata/sdk-model";
3
- import { resolveMeasureLdmIdentifier } from "@gooddata/sdk-ui-vis-commons";
3
+ import { computedAttributeKey, labelKey, resolveMeasureLdmIdentifier } from "@gooddata/sdk-ui-vis-commons";
4
4
  /**
5
5
  * Builds the per-layer reference maps the custom-tooltip resolver needs.
6
6
  *
7
7
  * - `measures`: `localIdentifier` → LDM measure id (skipping measures whose
8
8
  * identifier ref can't be resolved, e.g. arithmetic measures).
9
- * - `attributes`: display-form id → attribute id, sourced from each attribute
10
- * descriptor's `identifier` (the display-form id surfaced on tooltip
11
- * payloads as `attrId`) paired with `formOf.identifier` (the parent
12
- * attribute id). Entries where both ids are equal are still emitted so
13
- * callers can do a single lookup without a self-equality check.
14
- * - `computedAttributeIds`: which of those ids name a computed attribute, read from the
15
- * descriptor ref the backend types honestly, so the resolver can publish them under their own
16
- * key namespace instead of the label one.
9
+ * - `attributes`: attribute localIdentifier (surfaced on tooltip payloads as `attrLocalId`)
10
+ * → the typed reference keys for its display form and its parent attribute. The type comes
11
+ * from the descriptor's ref, which the backend types honestly, and is what separates a
12
+ * computed attribute from a label of the same id. Entries where both keys are equal are
13
+ * still emitted so callers can do a single lookup without a self-equality check.
17
14
  *
18
15
  * @internal
19
16
  */
@@ -27,20 +24,19 @@ export function buildTooltipReferenceMaps(dataView) {
27
24
  }
28
25
  }
29
26
  const attributes = {};
30
- const computedAttributeIds = [];
31
27
  for (const descriptor of dataView.meta().attributeDescriptors()) {
32
28
  const header = descriptor.attributeHeader;
33
29
  // `identifier` is the display-form id (URI-typed display forms fall
34
30
  // back to `uri` since `identifier` is undefined for them).
35
31
  const displayFormId = header.identifier ?? header.uri;
36
32
  const attributeId = header.formOf?.identifier;
37
- if (displayFormId && attributeId) {
38
- attributes[displayFormId] = attributeId;
39
- if (isComputedAttributeRef(header.ref)) {
40
- // For a computed attribute both ids are its own, so one entry covers both.
41
- computedAttributeIds.push(displayFormId);
42
- }
33
+ if (displayFormId && attributeId && header.localIdentifier) {
34
+ const buildKey = isComputedAttributeRef(header.ref) ? computedAttributeKey : labelKey;
35
+ attributes[header.localIdentifier] = {
36
+ displayFormKey: buildKey(displayFormId),
37
+ attributeKey: buildKey(attributeId),
38
+ };
43
39
  }
44
40
  }
45
- return { measures, attributes, computedAttributeIds };
41
+ return { measures, attributes };
46
42
  }
@@ -1,5 +1,6 @@
1
1
  import { type ISeparators } from "@gooddata/sdk-model";
2
2
  import { type JsonValue } from "../../utils/guards.js";
3
+ import { type ITooltipReferenceMaps } from "../registry/adapterTypes.js";
3
4
  export type TooltipPayload = {
4
5
  title: string;
5
6
  value?: string | number;
@@ -11,6 +12,20 @@ export type TooltipPayload = {
11
12
  * execution path to build per-feature lookup keys.
12
13
  */
13
14
  uri?: string;
15
+ /**
16
+ * Bucket `localIdentifier` of the underlying attribute. By convention only set by
17
+ * attribute payload writers (locationName, segment, tooltipText) — the mirror of
18
+ * {@link TooltipPayload.localId} for measures, and used the same way: as the lookup key
19
+ * into `ITooltipReferenceMaps.attributes`, which yields the reference keys the value is
20
+ * published under.
21
+ *
22
+ * Separate from {@link TooltipPayload.attrId} because that one is the LDM identifier
23
+ * saying WHICH attribute a slot holds, and an LDM identifier is unique only within an
24
+ * object type: a label and a computed attribute may share one, so the identifier alone
25
+ * cannot say which of the two a value belongs to. A localIdentifier is unique within the
26
+ * execution.
27
+ */
28
+ attrLocalId?: string;
14
29
  fill?: string;
15
30
  /**
16
31
  * Bucket `localIdentifier` of the underlying measure. By convention only
@@ -24,7 +39,19 @@ export type TooltipPayload = {
24
39
  export declare function getTooltipProperties(properties: GeoJSON.GeoJsonProperties | undefined): Record<string, JsonValue>;
25
40
  export declare function parseTooltipPayload(item: JsonValue): TooltipPayload | undefined;
26
41
  export declare function isTooltipPayloadValid(item: JsonValue): boolean;
27
- export declare function dedupeAttributePayloadsByAttrId(payloads: Array<TooltipPayload | undefined>): Array<TooltipPayload | undefined>;
42
+ /**
43
+ * Drops the later of two attribute payloads that show the same display form, so a label used
44
+ * both as location/area and as segment-by appears once in the tooltip.
45
+ *
46
+ * The identity is the typed reference key of the display form, not the bare LDM identifier: an
47
+ * LDM identifier is unique only within an object type, so a label and a computed attribute may
48
+ * share one, and those are two different objects that both belong in the tooltip. The key comes
49
+ * from the reference maps, looked up by the payload's localIdentifier; a payload the maps cannot
50
+ * place is treated as a label, which is what it would have resolved as before.
51
+ *
52
+ * @internal
53
+ */
54
+ export declare function dedupeAttributePayloads(payloads: Array<TooltipPayload | undefined>, referenceMaps: ITooltipReferenceMaps | undefined): Array<TooltipPayload | undefined>;
28
55
  export type TooltipFormatConfig = {
29
56
  emptyValue: string;
30
57
  escape: (value: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipUtils.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/tooltipUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,OAAO,CAAC,iBAAiB,GAAG,SAAS,GAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAK3B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAoC/E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED,wBAAgB,+BAA+B,CAC3C,QAAQ,EAAE,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,GAC5C,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,CAYnC;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC,CAAC;AAEF,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACvC,MAAM,CAOR;AAED,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,MAAM,EAAE,mBAAmB,GAC5B,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,MAAM,EAAE,mBAAmB,GAC5B,MAAM,GAAG,IAAI,CAYf"}
1
+ {"version":3,"file":"tooltipUtils.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/common/tooltipUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAMF,wBAAgB,oBAAoB,CAChC,UAAU,EAAE,OAAO,CAAC,iBAAiB,GAAG,SAAS,GAClD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAK3B;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAsC/E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,EAC3C,aAAa,EAAE,qBAAqB,GAAG,SAAS,GACjD,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,CAenC;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACrC,CAAC;AAEF,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GACvC,MAAM,CAOR;AAED,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,MAAM,EAAE,mBAAmB,GAC5B,MAAM,GAAG,IAAI,CAQf;AAED,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,MAAM,EAAE,mBAAmB,GAC5B,MAAM,GAAG,IAAI,CAYf"}
@@ -1,4 +1,5 @@
1
1
  // (C) 2025-2026 GoodData Corporation
2
+ import { labelKey } from "@gooddata/sdk-ui-vis-commons";
2
3
  import { formatValueForTooltip } from "../../map/style/tooltipFormatting.js";
3
4
  function isPayloadRecord(value) {
4
5
  return value !== null && typeof value === "object";
@@ -31,6 +32,7 @@ export function parseTooltipPayload(item) {
31
32
  const format = typeof parsed["format"] === "string" ? parsed["format"] : undefined;
32
33
  const attrId = typeof parsed["attrId"] === "string" ? parsed["attrId"] : undefined;
33
34
  const uri = typeof parsed["uri"] === "string" ? parsed["uri"] : undefined;
35
+ const attrLocalId = typeof parsed["attrLocalId"] === "string" ? parsed["attrLocalId"] : undefined;
34
36
  const fill = typeof parsed["fill"] === "string" ? parsed["fill"] : undefined;
35
37
  const localId = typeof parsed["localId"] === "string" ? parsed["localId"] : undefined;
36
38
  return {
@@ -38,6 +40,7 @@ export function parseTooltipPayload(item) {
38
40
  value,
39
41
  format,
40
42
  attrId,
43
+ attrLocalId,
41
44
  uri,
42
45
  fill,
43
46
  localId,
@@ -46,16 +49,31 @@ export function parseTooltipPayload(item) {
46
49
  export function isTooltipPayloadValid(item) {
47
50
  return Boolean(parseTooltipPayload(item));
48
51
  }
49
- export function dedupeAttributePayloadsByAttrId(payloads) {
50
- const seenAttrIds = new Set();
52
+ /**
53
+ * Drops the later of two attribute payloads that show the same display form, so a label used
54
+ * both as location/area and as segment-by appears once in the tooltip.
55
+ *
56
+ * The identity is the typed reference key of the display form, not the bare LDM identifier: an
57
+ * LDM identifier is unique only within an object type, so a label and a computed attribute may
58
+ * share one, and those are two different objects that both belong in the tooltip. The key comes
59
+ * from the reference maps, looked up by the payload's localIdentifier; a payload the maps cannot
60
+ * place is treated as a label, which is what it would have resolved as before.
61
+ *
62
+ * @internal
63
+ */
64
+ export function dedupeAttributePayloads(payloads, referenceMaps) {
65
+ const attributeKeysByLocalId = referenceMaps?.attributes ?? {};
66
+ const seen = new Set();
51
67
  return payloads.map((payload) => {
52
68
  if (!payload?.attrId) {
53
69
  return payload;
54
70
  }
55
- if (seenAttrIds.has(payload.attrId)) {
71
+ const keys = payload.attrLocalId ? attributeKeysByLocalId[payload.attrLocalId] : undefined;
72
+ const identity = keys?.displayFormKey ?? labelKey(payload.attrId);
73
+ if (seen.has(identity)) {
56
74
  return undefined;
57
75
  }
58
- seenAttrIds.add(payload.attrId);
76
+ seen.add(identity);
59
77
  return payload;
60
78
  });
61
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/pushpin/adapter.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAqBpE,OAAO,KAAK,EAAsB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAqB7G,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAuEhG;AA2LD,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,mBAAmB,CA0LlF,CAAC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/pushpin/adapter.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAqBpE,OAAO,KAAK,EAAsB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAqB7G,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAuEhG;AAmMD,eAAO,MAAM,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,mBAAmB,CA0LlF,CAAC"}
@@ -212,18 +212,25 @@ function buildPushpinTooltipExecution(layer, context, mainDefinition) {
212
212
  if (!built) {
213
213
  return null;
214
214
  }
215
+ // The key is built from execution-local identifiers, not LDM ids, because an LDM id is
216
+ // unique only within an object type — see `buildKeySegment`. The guards still compare the
217
+ // LDM id, which is what identifies WHICH attribute this feature slot holds.
218
+ const tooltipAttrLocalId = getAttributeLocalIdsFromBuckets(mainDefinition, [BucketNames.TOOLTIP_TEXT])[0];
219
+ const segmentAttrLocalId = segmentAttrId
220
+ ? getAttributeLocalIdsFromBuckets(mainDefinition, [BucketNames.SEGMENT])[0]
221
+ : undefined;
215
222
  const buildFeatureKey = (properties) => {
216
223
  if (!properties) {
217
224
  return null;
218
225
  }
219
226
  const locationName = readAttrIdentity(properties["locationName"]);
220
- if (locationName.attrId !== tooltipAttrId) {
227
+ if (locationName.attrId !== tooltipAttrId || !tooltipAttrLocalId) {
221
228
  return null;
222
229
  }
223
- const parts = [buildKeySegment(locationName.attrId, locationName.uri)];
230
+ const parts = [buildKeySegment(tooltipAttrLocalId, locationName.uri)];
224
231
  if (segmentAttrId) {
225
232
  const segment = readAttrIdentity(properties["segment"]);
226
- if (segment.attrId !== segmentAttrId) {
233
+ if (segment.attrId !== segmentAttrId || !segmentAttrLocalId) {
227
234
  return null;
228
235
  }
229
236
  // Pushpin payload writer substitutes EMPTY_SEGMENT_VALUE for null
@@ -231,7 +238,7 @@ function buildPushpinTooltipExecution(layer, context, mainDefinition) {
231
238
  // execution result preserves the original null/empty URI, so
232
239
  // normalize back here or the key never matches.
233
240
  const segmentUri = segment.uri === EMPTY_SEGMENT_VALUE ? "" : segment.uri;
234
- parts.push(buildKeySegment(segment.attrId, segmentUri));
241
+ parts.push(buildKeySegment(segmentAttrLocalId, segmentUri));
235
242
  }
236
243
  return joinKeySegments(parts);
237
244
  };
@@ -1 +1 @@
1
- {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../../../../src/next/layers/pushpin/data/transformation.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,oBAAoB,EAGzB,KAAK,aAAa,EAUrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAM/F,OAAO,EAAE,KAAK,eAAe,EAA6B,MAAM,mCAAmC,CAAC;AAqbpG;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAChC,EAAE,EAAE,cAAc,EAClB,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,GACzB,eAAe,CAmDjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACtC,aAAa,EAAE,cAAc,EAAE,EAC/B,OAAO,EAAE,eAAe,GACzB,iBAAiB,CAenB;AAsCD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CA2B1G;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC1E,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,kBAAkB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACtD,oBAAoB,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC5C,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,eAAe,GACzB,6BAA6B,CAkC/B"}
1
+ {"version":3,"file":"transformation.d.ts","sourceRoot":"","sources":["../../../../../src/next/layers/pushpin/data/transformation.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,oBAAoB,EAGzB,KAAK,aAAa,EAUrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAM/F,OAAO,EAAE,KAAK,eAAe,EAA6B,MAAM,mCAAmC,CAAC;AA0bpG;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAChC,EAAE,EAAE,cAAc,EAClB,iBAAiB,EAAE,MAAM,EACzB,gBAAgB,EAAE,MAAM,GACzB,eAAe,CAmDjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACtC,aAAa,EAAE,cAAc,EAAE,EAC/B,OAAO,EAAE,eAAe,GACzB,iBAAiB,CAenB;AAsCD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CA2B1G;AAED;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC1E,KAAK,EAAE,aAAa,EAAE,CAAC;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,iBAAiB,EAAE,qBAAqB,CAAC;IACzC,kBAAkB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACtD,oBAAoB,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC5C,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,eAAe,GACzB,6BAA6B,CAkC/B"}
@@ -125,6 +125,7 @@ function getBucketItemNameAndDataIndex(dv) {
125
125
  name,
126
126
  displayFormId: attributeDescriptors[index].attributeHeader.identifier ??
127
127
  attributeDescriptors[index].attributeHeader.uri,
128
+ localIdentifier: attributeDescriptors[index].attributeHeader.localIdentifier,
128
129
  };
129
130
  }
130
131
  });
@@ -191,6 +192,7 @@ function processSegmentBucket(ctx) {
191
192
  index: segmentBucket.index,
192
193
  name: segmentBucket.name,
193
194
  displayFormId: segmentBucket.displayFormId,
195
+ localIdentifier: segmentBucket.localIdentifier,
194
196
  data,
195
197
  uris,
196
198
  };
@@ -210,6 +212,7 @@ function processTooltipTextBucket(ctx) {
210
212
  index: tooltipTextBucket.index,
211
213
  name: tooltipTextBucket.name,
212
214
  displayFormId: tooltipTextBucket.displayFormId,
215
+ localIdentifier: tooltipTextBucket.localIdentifier,
213
216
  data,
214
217
  uris,
215
218
  };
@@ -229,6 +232,7 @@ function processGeoIconBucket(ctx) {
229
232
  index: geoIconBucket.index,
230
233
  name: geoIconBucket.name,
231
234
  displayFormId: geoIconBucket.displayFormId,
235
+ localIdentifier: geoIconBucket.localIdentifier,
232
236
  data,
233
237
  };
234
238
  }
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/pushpin/source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAE1F,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAazE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,aAAa,EAAE,cAAc,CAAC;IAC9B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACL;AAED,KAAK,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3F,MAAM,MAAM,0BAA0B,GAAG,yBAAyB,EAAE,CAAC;AA6OrE;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACnC,eAAe,EAAE,uBAAuB,GACzC,0BAA0B,CAoB5B"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/pushpin/source.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAE1F,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAazE;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC,aAAa,EAAE,cAAc,CAAC;IAC9B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACL;AAED,KAAK,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC3F,MAAM,MAAM,0BAA0B,GAAG,yBAAyB,EAAE,CAAC;AAqPrE;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACnC,eAAe,EAAE,uBAAuB,GACzC,0BAA0B,CAoB5B"}
@@ -23,7 +23,7 @@ function buildFallbackLocationLabels(locations) {
23
23
  * Builds GeoJSON properties for a single pushpin feature
24
24
  */
25
25
  function buildPushpinFeatureProperties(ctx, index) {
26
- const { locationNameTitle, locationNameUris, colorTitle, sizeTitle, segmentTitle, sizeFormat, colorFormat, sizeLocalId, colorLocalId, locationNameData, segmentData, segmentUris, sizeData, colorData, geoIconData, pushpinColors, geoPointsConfig, minSizeFromData, maxSizeFromData, hasSize, locationNameAttrId, segmentAttrId, } = ctx;
26
+ const { locationNameTitle, locationNameUris, colorTitle, sizeTitle, segmentTitle, sizeFormat, colorFormat, sizeLocalId, colorLocalId, locationNameData, segmentData, segmentUris, sizeData, colorData, geoIconData, pushpinColors, geoPointsConfig, minSizeFromData, maxSizeFromData, hasSize, locationNameAttrId, locationNameAttrLocalId, segmentAttrId, segmentAttrLocalId, } = ctx;
27
27
  const canCalculateSize = hasSize && minSizeFromData !== undefined && maxSizeFromData !== undefined;
28
28
  const pushpinSize = canCalculateSize
29
29
  ? calculateSizeInPixel(sizeData[index], minSizeFromData, maxSizeFromData, geoPointsConfig)
@@ -37,6 +37,7 @@ function buildPushpinFeatureProperties(ctx, index) {
37
37
  title: locationNameTitle,
38
38
  value: locationNameData[index],
39
39
  attrId: locationNameAttrId,
40
+ attrLocalId: locationNameAttrLocalId,
40
41
  uri: locationNameUris[index],
41
42
  },
42
43
  locationIndex: index,
@@ -58,6 +59,7 @@ function buildPushpinFeatureProperties(ctx, index) {
58
59
  value: segmentData[index],
59
60
  uri: segmentUris[index] ?? EMPTY_SEGMENT_VALUE,
60
61
  attrId: segmentAttrId,
62
+ attrLocalId: segmentAttrLocalId,
61
63
  },
62
64
  };
63
65
  if (ctx.measures.length > 0) {
@@ -120,7 +122,9 @@ function createPushpinFeatures({ config, geoData, colorStrategy, tooltipAttrIds,
120
122
  maxSizeFromData,
121
123
  hasSize: size !== undefined,
122
124
  locationNameAttrId: tooltipText?.displayFormId ?? tooltipAttrIds?.locationName,
125
+ locationNameAttrLocalId: tooltipText?.localIdentifier,
123
126
  segmentAttrId: segment?.displayFormId ?? tooltipAttrIds?.segment,
127
+ segmentAttrLocalId: segment?.localIdentifier,
124
128
  };
125
129
  return location.data.reduce((result, coordinates, index) => {
126
130
  if (!coordinates || !Number.isFinite(coordinates.lat) || !Number.isFinite(coordinates.lng)) {
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipManagement.d.ts","sourceRoot":"","sources":["../../../../../src/next/layers/pushpin/tooltip/tooltipManagement.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,oBAAoB,EAAgC,MAAM,8BAA8B,CAAC;AAGvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAQpF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAY9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAS/F,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAuErC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAe/F;AAQD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC1B,aAAa,EAAE,OAAO,CAAC,iBAAiB,EACxC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,cAAc,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC9C,IAAI,EAAE,SAAS,EACf,UAAU,GAAE,OAAc,EAC1B,YAAY,CAAC,EAAE,oBAAoB,EACnC,aAAa,CAAC,EAAE,qBAAqB,EACrC,aAAa,CAAC,EAAE,sBAAsB,GACvC,MAAM,CA6CR;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,sBAAsB,EAC9B,cAAc,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC9C,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,CAAC,EAAE,qBAAqB,EACrC,aAAa,CAAC,EAAE,sBAAsB,GACvC,iBAAiB,CAuEnB"}
1
+ {"version":3,"file":"tooltipManagement.d.ts","sourceRoot":"","sources":["../../../../../src/next/layers/pushpin/tooltip/tooltipManagement.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,KAAK,oBAAoB,EAAgC,MAAM,8BAA8B,CAAC;AAGvG,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAQpF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAErF,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAY9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAS/F,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAuErC;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,OAAO,CAAC,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAe/F;AAQD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC1B,aAAa,EAAE,OAAO,CAAC,iBAAiB,EACxC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,cAAc,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC9C,IAAI,EAAE,SAAS,EACf,UAAU,GAAE,OAAc,EAC1B,YAAY,CAAC,EAAE,oBAAoB,EACnC,aAAa,CAAC,EAAE,qBAAqB,EACrC,aAAa,CAAC,EAAE,sBAAsB,GACvC,MAAM,CA4CR;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACtC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,sBAAsB,EAC9B,cAAc,EAAE,gBAAgB,EAAE,GAAG,SAAS,EAC9C,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,CAAC,EAAE,qBAAqB,EACrC,aAAa,CAAC,EAAE,sBAAsB,GACvC,iBAAiB,CAuEnB"}
@@ -5,7 +5,7 @@ import { getTooltipContentWidth } from "../../../map/style/tooltipFormatting.js"
5
5
  import { isGeoJsonPoint, isLngLatTuple, isRecord, } from "../../../utils/guards.js";
6
6
  import { buildCustomTooltipPieces, composeTooltipBody } from "../../common/customTooltipSection.js";
7
7
  import { presentTooltip } from "../../common/tooltipPlacement.js";
8
- import { dedupeAttributePayloadsByAttrId, formatAttributeHtml, formatMeasureHtml, getTooltipProperties, isTooltipPayloadValid, parseTooltipPayload, } from "../../common/tooltipUtils.js";
8
+ import { dedupeAttributePayloads, formatAttributeHtml, formatMeasureHtml, getTooltipProperties, isTooltipPayloadValid, parseTooltipPayload, } from "../../common/tooltipUtils.js";
9
9
  import { DEFAULT_PUSHPIN_COLOR_VALUE, NULL_TOOLTIP_VALUE, PUSHPIN_STYLE_FEATURE_PROPERTIES, } from "../constants.js";
10
10
  import { parsePushpinGeoProperties } from "../data/transformation.js";
11
11
  const TOOLTIP_FULLSCREEN_THRESHOLD = 480;
@@ -111,11 +111,7 @@ export function getTooltipHtml(geoProperties, tooltipStroke, maxWidth, separator
111
111
  const measuresPayloads = Array.isArray(rawMeasures) ? rawMeasures.map(parseTooltipPayload) : [];
112
112
  const segmentPayload = parseTooltipPayload(properties["segment"]);
113
113
  const tooltipTextPayload = parseTooltipPayload(properties["tooltipText"]);
114
- const [locationAttribute, segmentAttribute, tooltipTextAttribute] = dedupeAttributePayloadsByAttrId([
115
- locationPayload,
116
- segmentPayload,
117
- tooltipTextPayload,
118
- ]);
114
+ const [locationAttribute, segmentAttribute, tooltipTextAttribute] = dedupeAttributePayloads([locationPayload, segmentPayload, tooltipTextPayload], referenceMaps);
119
115
  const tooltipItems = [
120
116
  formatAttributeHtml(locationAttribute, tooltipFormatConfig),
121
117
  formatMeasureHtml(sizePayload, separators, tooltipFormatConfig),
@@ -101,18 +101,26 @@ export interface ITooltipReferenceMaps {
101
101
  */
102
102
  measures: Record<string, string>;
103
103
  /**
104
- * Display-form identifier → attribute identifier. Lets the resolver register
105
- * `{label/<displayFormId>}` AND `{label/<attributeId>}` against the same value
106
- * so users may reference an attribute by either id, mirroring Highcharts.
107
- */
108
- attributes: Record<string, string>;
109
- /**
110
- * The ids among {@link ITooltipReferenceMaps.attributes} that name a computed attribute rather
111
- * than a label. Their values are published under the `computed_attribute/` key namespace: an
112
- * id is unique only within its object type, so a label and a computed attribute may both be
113
- * called `tier` and must not answer each other's reference.
104
+ * Attribute `localIdentifier` → the reference keys its values are published under.
105
+ *
106
+ * Keyed by localIdentifier, not by display-form id, for the same reason measures are:
107
+ * an LDM identifier is unique only within an object type, so a label and a computed
108
+ * attribute may share one, while a localIdentifier is unique within the execution.
109
+ * The keys themselves carry the object type, which is what a reference names.
114
110
  */
115
- computedAttributeIds: string[];
111
+ attributes: Record<string, ITooltipAttributeKeys>;
112
+ }
113
+ /**
114
+ * The reference keys one attribute's values are published under: its display form, and its
115
+ * parent attribute, so a user may reference it by either id — mirroring Highcharts.
116
+ *
117
+ * @internal
118
+ */
119
+ export interface ITooltipAttributeKeys {
120
+ /** `<type>/<displayFormId>`, where the type is the label or computed attribute namespace. */
121
+ displayFormKey: string;
122
+ /** `<type>/<attributeId>`. Equal to {@link displayFormKey} when the ids coincide. */
123
+ attributeKey: string;
116
124
  }
117
125
  /**
118
126
  * Legend computation result.
@@ -1 +1 @@
1
- {"version":3,"file":"adapterTypes.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/registry/adapterTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapterTypes.d.ts","sourceRoot":"","sources":["../../../../src/next/layers/registry/adapterTypes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"styleEndpoint.d.ts","sourceRoot":"","sources":["../../../../src/next/map/style/styleEndpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,2BAA2B,CAAC;AAE/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAuB3E;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAO7B"}
1
+ {"version":3,"file":"styleEndpoint.d.ts","sourceRoot":"","sources":["../../../../src/next/map/style/styleEndpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAA6B,MAAM,2BAA2B,CAAC;AAE/F,OAAO,KAAK,EAA2B,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAyBpG;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,CAAC,CAO7B"}
@@ -18,6 +18,7 @@ const KNOWN_SOURCE_TYPES = new Set([
18
18
  * Tile-based source types that optionally define data via "tiles" or "url".
19
19
  */
20
20
  const TILE_SOURCE_TYPES = new Set(["vector", "raster", "raster-dem"]);
21
+ const MERCATOR_PROJECTION = { type: "mercator" };
21
22
  /**
22
23
  * Fetches the MapLibre style specification from the backend.
23
24
  *
@@ -39,7 +40,13 @@ export async function fetchMapStyle(backend, basemap, language) {
39
40
  ? await backend.geo().getDefaultStyle({ language })
40
41
  : await fetchMapStyleByIdWithFallback(backend, basemap, language);
41
42
  assertValidStyle(style);
42
- return style;
43
+ return withMercatorProjection(style);
44
+ }
45
+ /**
46
+ * Forces a flat map: the AWS basemap styles declare a globe projection, which MapLibre 6 honours.
47
+ */
48
+ function withMercatorProjection(style) {
49
+ return { ...style, projection: MERCATOR_PROJECTION };
43
50
  }
44
51
  async function fetchMapStyleByIdWithFallback(backend, basemap, language) {
45
52
  try {
@@ -9,6 +9,12 @@ export interface IGeoAreaItem extends IGeoDataItem {
9
9
  * Identifier or URI of the display form used to produce this area data.
10
10
  */
11
11
  displayFormId?: string;
12
+ /**
13
+ * Execution-local identifier of the attribute this data came from. Unique within the
14
+ * execution, unlike {@link displayFormId}, so it is what identifies a row in the custom
15
+ * tooltip lookup - see `buildKeySegment`.
16
+ */
17
+ localIdentifier?: string;
12
18
  /**
13
19
  * Geographic identifiers for areas (e.g., ISO country codes, region IDs)
14
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../../src/next/types/geoData/area.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAC9C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAa,SAAQ,cAAc;IAChD;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB"}
1
+ {"version":3,"file":"area.d.ts","sourceRoot":"","sources":["../../../../src/next/types/geoData/area.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,YAAY;IAC9C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAa,SAAQ,cAAc;IAChD;;OAEG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB"}
@@ -23,6 +23,12 @@ export interface IGeoAttributeItem extends IGeoDataItem {
23
23
  * Identifier or URI of the display form used to produce this attribute data.
24
24
  */
25
25
  displayFormId?: string;
26
+ /**
27
+ * Execution-local identifier of the attribute this data came from. Unique within the
28
+ * execution, unlike {@link displayFormId}, so it is what identifies a row in the custom
29
+ * tooltip lookup - see `buildKeySegment`.
30
+ */
31
+ localIdentifier?: string;
26
32
  /**
27
33
  * Array of string values for the attribute
28
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/next/types/geoData/common.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACnD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACtD;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACjD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/next/types/geoData/common.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACnD;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACtD;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACjD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,iBAAiB,CAAC;CACnC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-geo",
3
- "version": "11.58.0-alpha.1",
3
+ "version": "11.58.0-alpha.3",
4
4
  "description": "GoodData.UI SDK - Geo Charts",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -44,12 +44,12 @@
44
44
  "ts-invariant": "0.10.3",
45
45
  "tslib": "2.8.1",
46
46
  "uuid": "11.1.1",
47
- "@gooddata/sdk-model": "11.58.0-alpha.1",
48
- "@gooddata/sdk-backend-spi": "11.58.0-alpha.1",
49
- "@gooddata/sdk-ui-kit": "11.58.0-alpha.1",
50
- "@gooddata/sdk-ui": "11.58.0-alpha.1",
51
- "@gooddata/sdk-ui-theme-provider": "11.58.0-alpha.1",
52
- "@gooddata/sdk-ui-vis-commons": "11.58.0-alpha.1"
47
+ "@gooddata/sdk-backend-spi": "11.58.0-alpha.3",
48
+ "@gooddata/sdk-model": "11.58.0-alpha.3",
49
+ "@gooddata/sdk-ui": "11.58.0-alpha.3",
50
+ "@gooddata/sdk-ui-theme-provider": "11.58.0-alpha.3",
51
+ "@gooddata/sdk-ui-kit": "11.58.0-alpha.3",
52
+ "@gooddata/sdk-ui-vis-commons": "11.58.0-alpha.3"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@microsoft/api-documenter": "7.30.10",
@@ -86,12 +86,12 @@
86
86
  "sass": "1.104.1",
87
87
  "stylelint": "16.26.1",
88
88
  "typescript": "7.0.2",
89
- "vitest": "4.1.8",
89
+ "vitest": "4.1.11",
90
90
  "vitest-dom": "0.1.1",
91
- "@gooddata/oxlint-config": "11.58.0-alpha.1",
92
- "@gooddata/eslint-config": "11.58.0-alpha.1",
93
- "@gooddata/stylelint-config": "11.58.0-alpha.1",
94
- "@gooddata/sdk-backend-mockingbird": "11.58.0-alpha.1"
91
+ "@gooddata/eslint-config": "11.58.0-alpha.3",
92
+ "@gooddata/oxlint-config": "11.58.0-alpha.3",
93
+ "@gooddata/sdk-backend-mockingbird": "11.58.0-alpha.3",
94
+ "@gooddata/stylelint-config": "11.58.0-alpha.3"
95
95
  },
96
96
  "peerDependencies": {
97
97
  "react": "^18.0.0 || ^19.0.0",