@gooddata/sdk-ui-vis-commons 11.57.0-alpha.5 → 11.57.0-alpha.7

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.
@@ -1,6 +1,6 @@
1
1
  import { type IResolvedReferenceValues, type ITooltipLocalizedStrings } from "./types.js";
2
2
  /**
3
- * Substitutes `{metric/id}` and `{label/id}` references in markdown content
3
+ * Substitutes `{metric/id}`, `{label/id}` and `{computed_attribute/id}` references in markdown content
4
4
  * with resolved values from the lookup table.
5
5
  *
6
6
  * Substituted values come from data and may contain markdown metacharacters
@@ -1 +1 @@
1
- {"version":3,"file":"referenceResolver.d.ts","sourceRoot":"","sources":["../../src/customTooltip/referenceResolver.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAIhC,MAAM,YAAY,CAAC;AAuEpB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,wBAAwB,EAChC,OAAO,EAAE,wBAAwB,GAClC,MAAM,CAWR"}
1
+ {"version":3,"file":"referenceResolver.d.ts","sourceRoot":"","sources":["../../src/customTooltip/referenceResolver.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAKhC,MAAM,YAAY,CAAC;AA+EpB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,wBAAwB,EAChC,OAAO,EAAE,wBAAwB,GAClC,MAAM,CAWR"}
@@ -1,7 +1,7 @@
1
1
  // (C) 2026 GoodData Corporation
2
2
  import { REFERENCE_REGEX_MATCH } from "@gooddata/sdk-ui-kit";
3
3
  import { URL_PATTERN } from "./markdownToHtml.js";
4
- import { labelKey, metricKey, } from "./types.js";
4
+ import { computedAttributeKey, labelKey, metricKey, } from "./types.js";
5
5
  // Markdown metacharacters that, if present in a substituted value, would be
6
6
  // reinterpreted as formatting by `markdownToHtml`. Backslash-escape them so the
7
7
  // parser treats them as literal text. The set covers every char that can start
@@ -29,9 +29,16 @@ function renderReference(ref, strings) {
29
29
  return strings.noFetch;
30
30
  }
31
31
  }
32
- // Prefix is matched case-insensitively (`metric` | `label`); LDM identifiers are case-sensitive.
32
+ // One key namespace per object type, so an id reused across types resolves to the right value.
33
+ // The prefix is matched case-insensitively; LDM identifiers are case-sensitive.
34
+ const KEY_BUILDERS = {
35
+ metric: metricKey,
36
+ label: labelKey,
37
+ computed_attribute: computedAttributeKey,
38
+ };
33
39
  function lookupRef(values, prefix, identifier) {
34
- return values[prefix.toLowerCase() === "metric" ? metricKey(identifier) : labelKey(identifier)];
40
+ const buildKey = KEY_BUILDERS[prefix.toLowerCase()];
41
+ return buildKey ? values[buildKey(identifier)] : undefined;
35
42
  }
36
43
  // In image/link URL targets a no-data reference must collapse to empty rather than
37
44
  // the "(No data)" placeholder, which would break markdown parsing and leak the raw
@@ -50,7 +57,7 @@ function blankNonValueTargets(content, values) {
50
57
  .replace(LINK_CONSTRUCT_REGEX, (_match, text, url = "") => `[${text}](${blankNonValueRefs(url, values)})`);
51
58
  }
52
59
  /**
53
- * Substitutes `{metric/id}` and `{label/id}` references in markdown content
60
+ * Substitutes `{metric/id}`, `{label/id}` and `{computed_attribute/id}` references in markdown content
54
61
  * with resolved values from the lookup table.
55
62
  *
56
63
  * Substituted values come from data and may contain markdown metacharacters
@@ -11,8 +11,12 @@ export interface ITooltipExecutionMeta {
11
11
  labelCountMap: Record<string, string>;
12
12
  /** tooltip metric localId → LDM measure identifier. */
13
13
  measureIdMap: Record<string, string>;
14
- /** label value localId → LDM label identifier. */
15
- labelIdMap: Record<string, string>;
14
+ /**
15
+ * Attribute value localId → the lookup key its value is published under. A key rather than a
16
+ * bare id, because a label and a computed attribute may share an identifier and each belongs
17
+ * in its own namespace - see {@link @gooddata/sdk-ui-vis-commons#computedAttributeKey}.
18
+ */
19
+ attributeKeyMap: Record<string, string>;
16
20
  }
17
21
  /**
18
22
  * Prepared tooltip execution paired with the meta needed to interpret its result.
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipExecution.d.ts","sourceRoot":"","sources":["../../src/customTooltip/tooltipExecution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAEH,KAAK,oBAAoB,EAc5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AA+JvD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,IAAI,EAAE,qBAAqB,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,MAAM,EAAE,MAAM,SAAS,uBAAuB,EAAE,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD;AAwCD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,oBAAoB,EACrC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,6BAA6B,GACxC,iBAAiB,GAAG,IAAI,CA6B1B;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC3C,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,oBAAoB,EACrC,aAAa,EAAE,oBAAoB,GAAG,SAAS,EAC/C,OAAO,CAAC,EAAE,6BAA6B,GACxC,iBAAiB,GAAG,SAAS,CAQ/B"}
1
+ {"version":3,"file":"tooltipExecution.d.ts","sourceRoot":"","sources":["../../src/customTooltip/tooltipExecution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAEH,KAAK,oBAAoB,EAe5B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,YAAY,CAAC;AAoLvF;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,IAAI,EAAE,qBAAqB,CAAC;CAC/B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,MAAM,EAAE,MAAM,SAAS,uBAAuB,EAAE,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAChD;AAwCD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,oBAAoB,EACrC,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,6BAA6B,GACxC,iBAAiB,GAAG,IAAI,CAgC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC3C,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,oBAAoB,EACrC,aAAa,EAAE,oBAAoB,GAAG,SAAS,EAC/C,OAAO,CAAC,EAAE,6BAA6B,GACxC,iBAAiB,GAAG,SAAS,CAQ/B"}
@@ -1,24 +1,31 @@
1
1
  // (C) 2026 GoodData Corporation
2
- import { MeasureGroupIdentifier, filterMeasureRef, idRef, isIdentifierRef, isLocalIdRef, isSimpleMeasure, measureItem, measureLocalId, newAttribute, newMeasure, newTwoDimensional, } from "@gooddata/sdk-model";
2
+ import { MeasureGroupIdentifier, filterMeasureRef, idRef, isComputedAttributeRef, isIdentifierRef, isLocalIdRef, isSimpleMeasure, measureItem, measureLocalId, newAttribute, newMeasure, newTwoDimensional, } from "@gooddata/sdk-model";
3
3
  import { REFERENCE_REGEX_MATCH } from "@gooddata/sdk-ui-kit";
4
+ import { computedAttributeKey, labelKey } from "./types.js";
5
+ // Keyed by the prefix lowercased, as the regex matches it case-insensitively.
6
+ const CANONICAL_TYPE = {
7
+ metric: "metric",
8
+ label: "label",
9
+ computed_attribute: "computed_attribute",
10
+ };
4
11
  function parseReferences(content) {
5
12
  const refs = [];
6
13
  const seen = new Set();
7
14
  // REFERENCE_REGEX_MATCH lives in sdk-ui-kit; match[3] is the kind
8
- // ("label" | "metric"), match[4] is the id.
15
+ // ("label" | "metric" | "computed_attribute"), match[4] is the id.
9
16
  for (const match of content.matchAll(REFERENCE_REGEX_MATCH)) {
10
- const rawType = match[3].toLowerCase();
17
+ const type = CANONICAL_TYPE[match[3].toLowerCase()];
11
18
  // Synonyms like `measure` / `displayForm` aren't canonical here; let
12
19
  // them fall through so the rest of the pipeline doesn't silently treat
13
20
  // a `measure` ref as a metric.
14
- if (rawType !== "metric" && rawType !== "label") {
21
+ if (!type) {
15
22
  continue;
16
23
  }
17
24
  const id = match[4];
18
- const key = `${rawType}/${id}`;
25
+ const key = `${type}/${id}`;
19
26
  if (!seen.has(key)) {
20
27
  seen.add(key);
21
- refs.push({ type: rawType, id });
28
+ refs.push({ type, id });
22
29
  }
23
30
  }
24
31
  return refs;
@@ -35,18 +42,26 @@ function getChartMetricIds(definition) {
35
42
  }
36
43
  return ids;
37
44
  }
38
- function getChartLabelIds(definition) {
39
- // Only display-form identifier refs match. Refs in user content using a
40
- // URI ref or a parent attribute id miss the set, fall into the secondary
41
- // execution, and fail backend-side (one bad ref drops the whole call).
42
- const ids = new Set();
45
+ /**
46
+ * The chart's attribute-shaped ids, kept apart by object type. A computed attribute's own ref is
47
+ * what sits on the display form slot, so without the split a label and a computed attribute of the
48
+ * same id would be indistinguishable here - and a reference to one would be answered by the other.
49
+ *
50
+ * Only identifier refs match. Refs in user content using a URI ref or a parent attribute id miss
51
+ * the set, fall into the secondary execution, and fail backend-side (one bad ref drops the whole
52
+ * call).
53
+ */
54
+ function getChartAttributeIds(definition) {
55
+ const labelIds = new Set();
56
+ const computedAttributeIds = new Set();
43
57
  for (const attr of definition.attributes) {
44
58
  const ref = attr.attribute.displayForm;
45
- if (isIdentifierRef(ref)) {
46
- ids.add(ref.identifier);
59
+ if (!isIdentifierRef(ref)) {
60
+ continue;
47
61
  }
62
+ (isComputedAttributeRef(ref) ? computedAttributeIds : labelIds).add(ref.identifier);
48
63
  }
49
- return ids;
64
+ return { labelIds, computedAttributeIds };
50
65
  }
51
66
  /**
52
67
  * Chart measures that MVF/ranking filters depend on. Must be included in the
@@ -68,8 +83,8 @@ function getFilterDependencyMeasures(filters, chartMeasures) {
68
83
  }
69
84
  /**
70
85
  * Build tooltip-only measures for the given references (already filtered to
71
- * those not in the chart). Labels get a max+count pair (mirrors the RichText
72
- * widget pattern) so the lookup can render "(Multiple items)" when a label
86
+ * those not in the chart). Labels and computed attributes get a max+count pair
87
+ * (mirrors the RichText widget pattern) so the lookup can render "(Multiple items)" when a label
73
88
  * resolves to >1 value per row.
74
89
  *
75
90
  * LocalId prefixes `tt_m_`, `tt_lv_`, `tt_lc_` are reserved — collision with
@@ -78,7 +93,7 @@ function getFilterDependencyMeasures(filters, chartMeasures) {
78
93
  function buildTooltipItems(refs) {
79
94
  const measures = [];
80
95
  const labelCountMap = {};
81
- const labelIdMap = {};
96
+ const attributeKeyMap = {};
82
97
  const measureIdMap = {};
83
98
  let idx = 0;
84
99
  for (const ref of refs) {
@@ -91,13 +106,19 @@ function buildTooltipItems(refs) {
91
106
  const valueLocalId = `tt_lv_${idx}`;
92
107
  const countLocalId = `tt_lc_${idx}`;
93
108
  idx++;
94
- measures.push(newMeasure(idRef(ref.id, "displayForm"), (m) => m.localId(valueLocalId).aggregation("max")));
95
- measures.push(newMeasure(idRef(ref.id, "displayForm"), (m) => m.localId(countLocalId).aggregation("count")));
109
+ // A computed attribute has no labels on the backend and is referenced by its own type;
110
+ // both aggregations below are supported over it.
111
+ const isComputedAttribute = ref.type === "computed_attribute";
112
+ const attributeRef = idRef(ref.id, isComputedAttribute ? "computedAttribute" : "displayForm");
113
+ measures.push(newMeasure(attributeRef, (m) => m.localId(valueLocalId).aggregation("max")));
114
+ measures.push(newMeasure(attributeRef, (m) => m.localId(countLocalId).aggregation("count")));
96
115
  labelCountMap[valueLocalId] = countLocalId;
97
- labelIdMap[valueLocalId] = ref.id;
116
+ attributeKeyMap[valueLocalId] = isComputedAttribute
117
+ ? computedAttributeKey(ref.id)
118
+ : labelKey(ref.id);
98
119
  }
99
120
  }
100
- return { measures, labelCountMap, labelIdMap, measureIdMap };
121
+ return { measures, labelCountMap, attributeKeyMap, measureIdMap };
101
122
  }
102
123
  /**
103
124
  * Slicing attributes for the tooltip execution's row dimension. When
@@ -125,7 +146,7 @@ function getSlicingAttributes(definition, slicingAttributeLocalIds) {
125
146
  * when there are no measures to fetch.
126
147
  */
127
148
  function buildBundle(executionFactory, chartDefinition, externalRefs, options) {
128
- const { measures, labelCountMap, labelIdMap, measureIdMap } = buildTooltipItems(externalRefs);
149
+ const { measures, labelCountMap, attributeKeyMap, measureIdMap } = buildTooltipItems(externalRefs);
129
150
  if (measures.length === 0) {
130
151
  return null;
131
152
  }
@@ -141,7 +162,7 @@ function buildBundle(executionFactory, chartDefinition, externalRefs, options) {
141
162
  }
142
163
  return {
143
164
  execution,
144
- meta: { labelCountMap, measureIdMap, labelIdMap },
165
+ meta: { labelCountMap, measureIdMap, attributeKeyMap },
145
166
  };
146
167
  }
147
168
  /**
@@ -158,10 +179,16 @@ export function buildTooltipExecution(executionFactory, chartDefinition, tooltip
158
179
  return null;
159
180
  }
160
181
  const chartMetricIds = getChartMetricIds(chartDefinition);
161
- const chartLabelIds = getChartLabelIds(chartDefinition);
162
- // References not already resolvable from the chart's own drill data.
163
- const externalRefs = refs.filter((ref) => (ref.type === "metric" && !chartMetricIds.has(ref.id)) ||
164
- (ref.type === "label" && !chartLabelIds.has(ref.id)));
182
+ const { labelIds, computedAttributeIds } = getChartAttributeIds(chartDefinition);
183
+ // References not already resolvable from the chart's own drill data. Each type is matched
184
+ // against the ids of its own type only: an id may name a label and a computed attribute at
185
+ // once, and answering one from the other would show a value belonging to a different object.
186
+ const inChartIds = {
187
+ metric: chartMetricIds,
188
+ label: labelIds,
189
+ computed_attribute: computedAttributeIds,
190
+ };
191
+ const externalRefs = refs.filter((ref) => !inChartIds[ref.type].has(ref.id));
165
192
  const batch = buildBundle(executionFactory, chartDefinition, externalRefs, options);
166
193
  if (!batch) {
167
194
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"tooltipLookup.d.ts","sourceRoot":"","sources":["../../src/customTooltip/tooltipLookup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,qBAAqB,CAAC;AAIhF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,KAAK,wBAAwB,EAAuB,MAAM,YAAY,CAAC;AAEhF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,qBAAqB,EAC3B,UAAU,CAAC,EAAE,WAAW,GACzB,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAqEvC"}
1
+ {"version":3,"file":"tooltipLookup.d.ts","sourceRoot":"","sources":["../../src/customTooltip/tooltipLookup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,qBAAqB,CAAC;AAIhF,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE,OAAO,EAAE,KAAK,wBAAwB,EAAa,MAAM,YAAY,CAAC;AAEtE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC5B,QAAQ,EAAE,SAAS,EACnB,IAAI,EAAE,qBAAqB,EAC3B,UAAU,CAAC,EAAE,WAAW,GACzB,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAqEvC"}
@@ -3,7 +3,7 @@ import { isResultAttributeHeader } from "@gooddata/sdk-model";
3
3
  import { DataViewFacade } from "@gooddata/sdk-ui";
4
4
  import { labelReference, measureReference } from "./referenceStatus.js";
5
5
  import { buildKeySegment, joinKeySegments } from "./tooltipKey.js";
6
- import { labelKey, metricKey } from "./types.js";
6
+ import { metricKey } from "./types.js";
7
7
  /**
8
8
  * Build a per-data-point lookup keyed by `${displayFormId}:${uri}` segments
9
9
  * (joined by `|`, sorted). Iteration is orientation-agnostic via slices/series.
@@ -43,15 +43,15 @@ export function buildLookupTable(dataView, meta, separators) {
43
43
  if (countLocalIds.has(localId)) {
44
44
  continue;
45
45
  }
46
- const labelId = meta.labelIdMap[localId];
47
- if (labelId) {
46
+ const attributeKey = meta.attributeKeyMap[localId];
47
+ if (attributeKey) {
48
48
  const countLocalId = meta.labelCountMap[localId];
49
49
  const countSeries = countLocalId ? seriesByLocalId.get(countLocalId) : undefined;
50
50
  const countValue = countSeries
51
51
  ? Number(countSeries.dataPoints()[sliceIdx]?.rawValue ?? 0)
52
52
  : 1;
53
53
  // count > 1 → "(Multiple items)"; else empty/value via the shared helper.
54
- values[labelKey(labelId)] = countValue > 1 ? { kind: "multiple" } : labelReference(rawValue);
54
+ values[attributeKey] = countValue > 1 ? { kind: "multiple" } : labelReference(rawValue);
55
55
  continue;
56
56
  }
57
57
  const metricId = meta.measureIdMap[localId];
@@ -37,13 +37,14 @@ export interface ICustomTooltipConfig {
37
37
  *
38
38
  * Not supported: tables, code blocks, blockquotes, nested lists, raw HTML.
39
39
  *
40
- * Also accepts metric/attribute references (\{metric/id\}, \{label/id\})
41
- * that resolve dynamically per hovered data point. Resolved values are
40
+ * Also accepts metric/attribute references (\{metric/id\}, \{label/id\},
41
+ * \{computed_attribute/id\}) that resolve dynamically per hovered data point. Resolved values are
42
42
  * automatically backslash-escaped, so data containing markdown metacharacters
43
43
  * renders as literal text — no manual escaping is required.
44
44
  *
45
45
  * Use display-form identifiers (NOT parent attribute identifiers) inside
46
- * `{label/id}`. An attribute id renders correctly for attributes that are
46
+ * `{label/id}`; a computed attribute has no labels and is named by its own
47
+ * identifier inside `{computed_attribute/id}`. An attribute id renders correctly for attributes that are
47
48
  * already in the chart, but it cannot be fetched as a label for external
48
49
  * attributes — and a single such ref causes the secondary tooltip fetch
49
50
  * to fail backend-side, dropping every other external ref alongside it.
@@ -77,7 +78,9 @@ export type ResolvedReference = {
77
78
  readonly kind: "multiple";
78
79
  };
79
80
  /**
80
- * Lookup of resolved reference statuses keyed by `metric/id` or `label/id`.
81
+ * Lookup of resolved reference statuses, keyed by `<prefix>/<id>` - one namespace per object type,
82
+ * so ids reused across types cannot collide. The key is exactly the text between the braces of the
83
+ * reference it answers, lowercased prefix aside.
81
84
  *
82
85
  * @internal
83
86
  */
@@ -100,6 +103,17 @@ export declare const metricKey: (id: string) => string;
100
103
  * @internal
101
104
  */
102
105
  export declare const labelKey: (id: string) => string;
106
+ /**
107
+ * Builds the `computed_attribute/<id>` lookup key for a computed attribute reference.
108
+ *
109
+ * A computed attribute gets a namespace of its own rather than sharing the label one: ids are
110
+ * unique per object type, so a label and a computed attribute may both be called `tier` and would
111
+ * otherwise overwrite each other in the lookup - silently showing one's value for the other.
112
+ * See {@link metricKey}.
113
+ *
114
+ * @internal
115
+ */
116
+ export declare const computedAttributeKey: (id: string) => string;
103
117
  /**
104
118
  * Localized placeholder strings for the non-value reference states. Built once
105
119
  * at the render site (where `intl` is available) and threaded into
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/customTooltip/types.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpC;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,OAAQ,MAAM,KAAG,MAAwB,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,OAAQ,MAAM,KAAG,MAAuB,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/customTooltip/types.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,iBAAiB,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACrC,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,OAAQ,MAAM,KAAG,MAAwB,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,OAAQ,MAAM,KAAG,MAAuB,CAAC;AAE9D;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,OAAQ,MAAM,KAAG,MAAoC,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B"}
@@ -15,3 +15,14 @@ export const metricKey = (id) => `metric/${id}`;
15
15
  * @internal
16
16
  */
17
17
  export const labelKey = (id) => `label/${id}`;
18
+ /**
19
+ * Builds the `computed_attribute/<id>` lookup key for a computed attribute reference.
20
+ *
21
+ * A computed attribute gets a namespace of its own rather than sharing the label one: ids are
22
+ * unique per object type, so a label and a computed attribute may both be called `tier` and would
23
+ * otherwise overwrite each other in the lookup - silently showing one's value for the other.
24
+ * See {@link metricKey}.
25
+ *
26
+ * @internal
27
+ */
28
+ export const computedAttributeKey = (id) => `computed_attribute/${id}`;
package/esm/index.d.ts CHANGED
@@ -29,7 +29,7 @@ export { getHeadlineResponsiveClassName } from "./utils/headlineResponsiveClassN
29
29
  export { getLegendDetails, type ILegendDetails, type ILegendDetailOptions, } from "./legend/PopUpLegend/helpers.js";
30
30
  export { PATTERN_FILLS, getPatternFillByIndex, getPatternFillByName, getPatternFill, type IPatternFill, type PatternFillName, type IChartFillConfig, } from "./coloring/patternFills.js";
31
31
  export { PatternFill, type IPatternFillProps } from "./coloring/PatternFill.js";
32
- export { type ICustomTooltipConfig, type CustomTooltipPlacement, type IResolvedReferenceValues, type ResolvedReference, type ITooltipLocalizedStrings, metricKey, labelKey, } from "./customTooltip/types.js";
32
+ export { type ICustomTooltipConfig, type CustomTooltipPlacement, type IResolvedReferenceValues, type ResolvedReference, type ITooltipLocalizedStrings, metricKey, labelKey, computedAttributeKey, } from "./customTooltip/types.js";
33
33
  export { markdownToHtml } from "./customTooltip/markdownToHtml.js";
34
34
  export { resolveReferences } from "./customTooltip/referenceResolver.js";
35
35
  export { measureReference, labelReference } from "./customTooltip/referenceStatus.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/esm/index.js CHANGED
@@ -30,7 +30,7 @@ export { getHeadlineResponsiveClassName } from "./utils/headlineResponsiveClassN
30
30
  export { getLegendDetails, } from "./legend/PopUpLegend/helpers.js";
31
31
  export { PATTERN_FILLS, getPatternFillByIndex, getPatternFillByName, getPatternFill, } from "./coloring/patternFills.js";
32
32
  export { PatternFill } from "./coloring/PatternFill.js";
33
- export { metricKey, labelKey, } from "./customTooltip/types.js";
33
+ export { metricKey, labelKey, computedAttributeKey, } from "./customTooltip/types.js";
34
34
  export { markdownToHtml } from "./customTooltip/markdownToHtml.js";
35
35
  export { resolveReferences } from "./customTooltip/referenceResolver.js";
36
36
  export { measureReference, labelReference } from "./customTooltip/referenceStatus.js";
@@ -157,6 +157,18 @@ export declare const ColorUtils: {
157
157
  */
158
158
  export declare function composeCustomTooltipSectionHtml(content: string, inChartValues: IResolvedReferenceValues, externalValues: IResolvedReferenceValues, localizedStrings: ITooltipLocalizedStrings): string;
159
159
 
160
+ /**
161
+ * Builds the `computed_attribute/<id>` lookup key for a computed attribute reference.
162
+ *
163
+ * A computed attribute gets a namespace of its own rather than sharing the label one: ids are
164
+ * unique per object type, so a label and a computed attribute may both be called `tier` and would
165
+ * otherwise overwrite each other in the lookup - silently showing one's value for the other.
166
+ * See {@link metricKey}.
167
+ *
168
+ * @internal
169
+ */
170
+ export declare const computedAttributeKey: (id: string) => string;
171
+
160
172
  /**
161
173
  * Names of the custom (non built-in) point-shape symbols to register on the Highcharts renderer.
162
174
  *
@@ -484,13 +496,14 @@ export declare interface ICustomTooltipConfig {
484
496
  *
485
497
  * Not supported: tables, code blocks, blockquotes, nested lists, raw HTML.
486
498
  *
487
- * Also accepts metric/attribute references (\{metric/id\}, \{label/id\})
488
- * that resolve dynamically per hovered data point. Resolved values are
499
+ * Also accepts metric/attribute references (\{metric/id\}, \{label/id\},
500
+ * \{computed_attribute/id\}) that resolve dynamically per hovered data point. Resolved values are
489
501
  * automatically backslash-escaped, so data containing markdown metacharacters
490
502
  * renders as literal text — no manual escaping is required.
491
503
  *
492
504
  * Use display-form identifiers (NOT parent attribute identifiers) inside
493
- * `{label/id}`. An attribute id renders correctly for attributes that are
505
+ * `{label/id}`; a computed attribute has no labels and is named by its own
506
+ * identifier inside `{computed_attribute/id}`. An attribute id renders correctly for attributes that are
494
507
  * already in the chart, but it cannot be fetched as a label for external
495
508
  * attributes — and a single such ref causes the secondary tooltip fetch
496
509
  * to fail backend-side, dropping every other external ref alongside it.
@@ -729,7 +742,9 @@ export declare interface IRange {
729
742
  }
730
743
 
731
744
  /**
732
- * Lookup of resolved reference statuses keyed by `metric/id` or `label/id`.
745
+ * Lookup of resolved reference statuses, keyed by `<prefix>/<id>` - one namespace per object type,
746
+ * so ids reused across types cannot collide. The key is exactly the text between the braces of the
747
+ * reference it answers, lowercased prefix aside.
733
748
  *
734
749
  * @internal
735
750
  */
@@ -871,8 +886,12 @@ export declare interface ITooltipExecutionMeta {
871
886
  labelCountMap: Record<string, string>;
872
887
  /** tooltip metric localId → LDM measure identifier. */
873
888
  measureIdMap: Record<string, string>;
874
- /** label value localId → LDM label identifier. */
875
- labelIdMap: Record<string, string>;
889
+ /**
890
+ * Attribute value localId → the lookup key its value is published under. A key rather than a
891
+ * bare id, because a label and a computed attribute may share an identifier and each belongs
892
+ * in its own namespace - see {@link @gooddata/sdk-ui-vis-commons#computedAttributeKey}.
893
+ */
894
+ attributeKeyMap: Record<string, string>;
876
895
  }
877
896
 
878
897
  /**
@@ -1102,7 +1121,7 @@ export declare type ResolvedReference = {
1102
1121
  export declare function resolveMeasureLdmIdentifier(measure: IMeasure, allMeasures: IMeasure[]): string | undefined;
1103
1122
 
1104
1123
  /**
1105
- * Substitutes `{metric/id}` and `{label/id}` references in markdown content
1124
+ * Substitutes `{metric/id}`, `{label/id}` and `{computed_attribute/id}` references in markdown content
1106
1125
  * with resolved values from the lookup table.
1107
1126
  *
1108
1127
  * Substituted values come from data and may contain markdown metacharacters
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-vis-commons",
3
- "version": "11.57.0-alpha.5",
3
+ "version": "11.57.0-alpha.7",
4
4
  "description": "GoodData.UI SDK - common functionality for different types of visualizations",
5
5
  "license": "MIT",
6
6
  "author": "GoodData Corporation",
@@ -36,11 +36,11 @@
36
36
  "react-intl": "10.1.25",
37
37
  "react-measure": "^2.5.2",
38
38
  "tslib": "2.8.1",
39
- "@gooddata/sdk-backend-spi": "11.57.0-alpha.5",
40
- "@gooddata/sdk-model": "11.57.0-alpha.5",
41
- "@gooddata/sdk-ui": "11.57.0-alpha.5",
42
- "@gooddata/sdk-ui-kit": "11.57.0-alpha.5",
43
- "@gooddata/sdk-ui-theme-provider": "11.57.0-alpha.5"
39
+ "@gooddata/sdk-backend-spi": "11.57.0-alpha.7",
40
+ "@gooddata/sdk-model": "11.57.0-alpha.7",
41
+ "@gooddata/sdk-ui": "11.57.0-alpha.7",
42
+ "@gooddata/sdk-ui-kit": "11.57.0-alpha.7",
43
+ "@gooddata/sdk-ui-theme-provider": "11.57.0-alpha.7"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@microsoft/api-documenter": "7.30.10",
@@ -65,23 +65,23 @@
65
65
  "eslint-plugin-sonarjs": "3.0.6",
66
66
  "happy-dom": "20.12.0",
67
67
  "npm-run-all": "4.1.5",
68
- "oxfmt": "0.66.0",
69
- "oxlint": "1.82.0",
68
+ "oxfmt": "0.68.0",
69
+ "oxlint": "1.83.0",
70
70
  "oxlint-plugin-eslint": "1.82.0",
71
71
  "oxlint-tsgolint": "7.0.2001",
72
72
  "raf": "3.4.1",
73
73
  "react": "19.1.1",
74
74
  "react-dom": "19.1.1",
75
- "sass": "1.104.0",
75
+ "sass": "1.104.1",
76
76
  "stylelint": "16.26.1",
77
77
  "typescript": "7.0.2",
78
78
  "vitest": "4.1.8",
79
79
  "vitest-dom": "0.1.1",
80
- "@gooddata/eslint-config": "11.57.0-alpha.5",
81
- "@gooddata/oxlint-config": "11.57.0-alpha.5",
82
- "@gooddata/sdk-backend-mockingbird": "11.57.0-alpha.5",
83
- "@gooddata/stylelint-config": "11.57.0-alpha.5",
84
- "@gooddata/reference-workspace": "11.57.0-alpha.5"
80
+ "@gooddata/eslint-config": "11.57.0-alpha.7",
81
+ "@gooddata/oxlint-config": "11.57.0-alpha.7",
82
+ "@gooddata/reference-workspace": "11.57.0-alpha.7",
83
+ "@gooddata/sdk-backend-mockingbird": "11.57.0-alpha.7",
84
+ "@gooddata/stylelint-config": "11.57.0-alpha.7"
85
85
  },
86
86
  "peerDependencies": {
87
87
  "react": "^18.0.0 || ^19.0.0",