@dynatrace/strato-geo 3.8.0 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # geo
2
2
 
3
+ ## 3.9.0
4
+
5
+ ### Dependency updates
6
+
7
+ - `@dynatrace/strato-components` was updated to version `3.9.0`.
8
+
9
+ ### Updates
10
+
11
+ #### General
12
+
13
+ - Updated the `@vanilla-extract/css` dependency to `1.21.1`, which fixes non-deterministic style composition output. An empty composed style used in a selector (e.g. a `disabled` state combining `readOnly` and `ariaDisabled`) could intermittently drop a class, changing generated class names between builds and, in rare cases, leaving a selector-targeted state unstyled.
14
+
15
+ #### MapView
16
+
17
+ - Fixed a rare crash when rendering maps with large icon datasets. The error is now handled gracefully with automatic retry and fallback UI. (APPDEV-15440)
18
+
19
+ ## 3.8.2
20
+
21
+ ### Dependency updates
22
+
23
+ - `@dynatrace/strato-components` was updated to version `3.8.1`.
24
+
25
+ ## 3.8.1
26
+
27
+ ### Updates
28
+
29
+ #### MapView
30
+
31
+ - `MapViewProvider` add `OTHERS` as a neutral country code option. (APPDEV-18542)
32
+
3
33
  ## 3.8.0
4
34
 
5
35
  ### Dependency updates
@@ -32,13 +32,7 @@ const BubbleLayerTooltip = (props) => {
32
32
  if (isDefaultTooltipHandler(tooltipTemplate)) {
33
33
  return template;
34
34
  }
35
- return /* @__PURE__ */ jsx(
36
- OverlayTooltip,
37
- {
38
- legacyTemplate: template,
39
- symbolAlignment
40
- }
41
- );
35
+ return /* @__PURE__ */ jsx(OverlayTooltip, { template, symbolAlignment });
42
36
  };
43
37
  BubbleLayerTooltip["displayName"] = "BubbleLayerTooltip";
44
38
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/map/components/BubbleLayer/BubbleLayerTooltip.tsx"],
4
- "sourcesContent": ["import { sortBy } from 'lodash-es';\n\nimport { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type { Location } from '../../types/location.js';\nimport type {\n BubbleLayerTooltipData,\n BubbleLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface BubbleTooltipStatePayload {\n __color: string;\n __hoveredColor: string;\n __radius: number;\n __lat: number;\n data: Location;\n}\n\nexport interface BubbleLayerTooltipProps {\n tooltipTemplate?: BubbleLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const BubbleLayerTooltip = (props: BubbleLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<BubbleTooltipStatePayload>('geoBubble');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const sanitizedData: BubbleLayerTooltipData[] = data.map((bubbleProps) => {\n const { __color: color, __radius: radius, data: customData } = bubbleProps;\n\n return {\n color,\n radius,\n data: customData,\n };\n });\n\n const sortedBubbles: BubbleLayerTooltipData[] = [\n ...sortBy(sanitizedData, ({ radius }) => radius),\n ];\n const closestPoint = sortedBubbles[0];\n const remainingPoints = sortedBubbles.slice(1);\n\n const template = closestPoint\n ? tooltipTemplate(closestPoint, remainingPoints)\n : null;\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip\n legacyTemplate={template}\n symbolAlignment={symbolAlignment}\n />\n );\n};\n\nBubbleLayerTooltip['displayName'] = 'BubbleLayerTooltip';\n"],
5
- "mappings": "AAqEI;AArEJ,SAAS,cAAc;AAEvB,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAgBjC,MAAM,qBAAqB,CAAC,UAAmC;AACpE,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAA8C,WAAW;AAE3D,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,gBAA0C,KAAK,IAAI,CAAC,gBAAgB;AACxE,UAAM,EAAE,SAAS,OAAO,UAAU,QAAQ,MAAM,WAAW,IAAI;AAE/D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AAED,QAAM,gBAA0C;AAAA,IAC9C,GAAG,OAAO,eAAe,CAAC,EAAE,OAAO,MAAM,MAAM;AAAA,EACjD;AACA,QAAM,eAAe,cAAc,CAAC;AACpC,QAAM,kBAAkB,cAAc,MAAM,CAAC;AAE7C,QAAM,WAAW,eACb,gBAAgB,cAAc,eAAe,IAC7C;AAEJ,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ;AAEA,mBAAmB,aAAa,IAAI;",
4
+ "sourcesContent": ["import { sortBy } from 'lodash-es';\n\nimport { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type { Location } from '../../types/location.js';\nimport type {\n BubbleLayerTooltipData,\n BubbleLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface BubbleTooltipStatePayload {\n __color: string;\n __hoveredColor: string;\n __radius: number;\n __lat: number;\n data: Location;\n}\n\nexport interface BubbleLayerTooltipProps {\n tooltipTemplate?: BubbleLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const BubbleLayerTooltip = (props: BubbleLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<BubbleTooltipStatePayload>('geoBubble');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const sanitizedData: BubbleLayerTooltipData[] = data.map((bubbleProps) => {\n const { __color: color, __radius: radius, data: customData } = bubbleProps;\n\n return {\n color,\n radius,\n data: customData,\n };\n });\n\n const sortedBubbles: BubbleLayerTooltipData[] = [\n ...sortBy(sanitizedData, ({ radius }) => radius),\n ];\n const closestPoint = sortedBubbles[0];\n const remainingPoints = sortedBubbles.slice(1);\n\n const template = closestPoint\n ? tooltipTemplate(closestPoint, remainingPoints)\n : null;\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip template={template} symbolAlignment={symbolAlignment} />\n );\n};\n\nBubbleLayerTooltip['displayName'] = 'BubbleLayerTooltip';\n"],
5
+ "mappings": "AAqEI;AArEJ,SAAS,cAAc;AAEvB,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAgBjC,MAAM,qBAAqB,CAAC,UAAmC;AACpE,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAA8C,WAAW;AAE3D,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,gBAA0C,KAAK,IAAI,CAAC,gBAAgB;AACxE,UAAM,EAAE,SAAS,OAAO,UAAU,QAAQ,MAAM,WAAW,IAAI;AAE/D,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF,CAAC;AAED,QAAM,gBAA0C;AAAA,IAC9C,GAAG,OAAO,eAAe,CAAC,EAAE,OAAO,MAAM,MAAM;AAAA,EACjD;AACA,QAAM,eAAe,cAAc,CAAC;AACpC,QAAM,kBAAkB,cAAc,MAAM,CAAC;AAE7C,QAAM,WAAW,eACb,gBAAgB,cAAc,eAAe,IAC7C;AAEJ,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,kBAAe,UAAoB,iBAAkC;AAE1E;AAEA,mBAAmB,aAAa,IAAI;",
6
6
  "names": []
7
7
  }
@@ -24,13 +24,7 @@ const ChoroplethLayerTooltip = (props) => {
24
24
  if (isDefaultTooltipHandler(tooltipTemplate)) {
25
25
  return template;
26
26
  }
27
- return /* @__PURE__ */ jsx(
28
- OverlayTooltip,
29
- {
30
- legacyTemplate: template,
31
- symbolAlignment
32
- }
33
- );
27
+ return /* @__PURE__ */ jsx(OverlayTooltip, { template, symbolAlignment });
34
28
  };
35
29
  ChoroplethLayerTooltip["displayName"] = "ChoroplethLayerTooltip";
36
30
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/map/components/ChoroplethLayer/ChoroplethLayerTooltip.tsx"],
4
- "sourcesContent": ["import { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type {\n ChoroplethLayerTooltipData,\n ChoroplethLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface ChoroplethTooltipStatePayload {\n name: string;\n region_type: string;\n __color: string;\n __hoveredColor: string;\n data: Record<string, unknown>;\n}\n\nexport interface ChoroplethLayerTooltipProps {\n tooltipTemplate?: ChoroplethLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const ChoroplethLayerTooltip = (props: ChoroplethLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<ChoroplethTooltipStatePayload>('geoChoropleth');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const { name, __color: color, data: customData } = data[0];\n const regionData: ChoroplethLayerTooltipData = {\n data: customData,\n name,\n color,\n };\n\n const template = tooltipTemplate(regionData);\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip\n legacyTemplate={template}\n symbolAlignment={symbolAlignment}\n />\n );\n};\n\nChoroplethLayerTooltip['displayName'] = 'ChoroplethLayerTooltip';\n"],
5
- "mappings": "AAuDI;AAvDJ,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAKnC,SAAS,+BAA+B;AAgBjC,MAAM,yBAAyB,CAAC,UAAuC;AAC5E,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAAkD,eAAe;AAEnE,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,MAAM,SAAS,OAAO,MAAM,WAAW,IAAI,KAAK,CAAC;AACzD,QAAM,aAAyC;AAAA,IAC7C,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AAEA,QAAM,WAAW,gBAAgB,UAAU;AAE3C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ;AAEA,uBAAuB,aAAa,IAAI;",
4
+ "sourcesContent": ["import { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type {\n ChoroplethLayerTooltipData,\n ChoroplethLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface ChoroplethTooltipStatePayload {\n name: string;\n region_type: string;\n __color: string;\n __hoveredColor: string;\n data: Record<string, unknown>;\n}\n\nexport interface ChoroplethLayerTooltipProps {\n tooltipTemplate?: ChoroplethLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const ChoroplethLayerTooltip = (props: ChoroplethLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<ChoroplethTooltipStatePayload>('geoChoropleth');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const { name, __color: color, data: customData } = data[0];\n const regionData: ChoroplethLayerTooltipData = {\n data: customData,\n name,\n color,\n };\n\n const template = tooltipTemplate(regionData);\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip template={template} symbolAlignment={symbolAlignment} />\n );\n};\n\nChoroplethLayerTooltip['displayName'] = 'ChoroplethLayerTooltip';\n"],
5
+ "mappings": "AAuDI;AAvDJ,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAKnC,SAAS,+BAA+B;AAgBjC,MAAM,yBAAyB,CAAC,UAAuC;AAC5E,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAAkD,eAAe;AAEnE,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,MAAM,SAAS,OAAO,MAAM,WAAW,IAAI,KAAK,CAAC;AACzD,QAAM,aAAyC;AAAA,IAC7C,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AAEA,QAAM,WAAW,gBAAgB,UAAU;AAE3C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,kBAAe,UAAoB,iBAAkC;AAE1E;AAEA,uBAAuB,aAAa,IAAI;",
6
6
  "names": []
7
7
  }
@@ -28,13 +28,7 @@ const ConnectionLayerTooltip = (props) => {
28
28
  if (isDefaultTooltipHandler(tooltipTemplate)) {
29
29
  return template;
30
30
  }
31
- return /* @__PURE__ */ jsx(
32
- OverlayTooltip,
33
- {
34
- legacyTemplate: template,
35
- symbolAlignment
36
- }
37
- );
31
+ return /* @__PURE__ */ jsx(OverlayTooltip, { template, symbolAlignment });
38
32
  };
39
33
  ConnectionLayerTooltip["displayName"] = "ConnectionLayerTooltip";
40
34
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/map/components/ConnectionLayer/ConnectionLayerTooltip.tsx"],
4
- "sourcesContent": ["import { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type { Connection } from '../../types/connection-layer.js';\nimport type {\n ConnectionLayerTooltipData,\n ConnectionLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface ConnectionTooltipPayload {\n id: string;\n __lineColor: string;\n __lineHoveredColor: string;\n __lineWidth: number;\n curve?: string;\n data: Connection;\n}\n\nexport interface ConnectionLayerTooltipProps {\n tooltipTemplate?: ConnectionLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const ConnectionLayerTooltip = (props: ConnectionLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<ConnectionTooltipPayload>('geoConnection');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const {\n __lineColor: color,\n __lineWidth: thickness,\n data: customData,\n } = data[0];\n const connectionData: ConnectionLayerTooltipData<Connection> = {\n color,\n thickness,\n data: customData,\n };\n\n const template = tooltipTemplate(connectionData);\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip\n legacyTemplate={template}\n symbolAlignment={symbolAlignment}\n />\n );\n};\n\nConnectionLayerTooltip['displayName'] = 'ConnectionLayerTooltip';\n"],
5
- "mappings": "AA6DI;AA7DJ,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAiBjC,MAAM,yBAAyB,CAAC,UAAuC;AAC5E,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAA6C,eAAe;AAE9D,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,EACR,IAAI,KAAK,CAAC;AACV,QAAM,iBAAyD;AAAA,IAC7D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,QAAM,WAAW,gBAAgB,cAAc;AAE/C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ;AAEA,uBAAuB,aAAa,IAAI;",
4
+ "sourcesContent": ["import { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type { Connection } from '../../types/connection-layer.js';\nimport type {\n ConnectionLayerTooltipData,\n ConnectionLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface ConnectionTooltipPayload {\n id: string;\n __lineColor: string;\n __lineHoveredColor: string;\n __lineWidth: number;\n curve?: string;\n data: Connection;\n}\n\nexport interface ConnectionLayerTooltipProps {\n tooltipTemplate?: ConnectionLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const ConnectionLayerTooltip = (props: ConnectionLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<ConnectionTooltipPayload>('geoConnection');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const {\n __lineColor: color,\n __lineWidth: thickness,\n data: customData,\n } = data[0];\n const connectionData: ConnectionLayerTooltipData<Connection> = {\n color,\n thickness,\n data: customData,\n };\n\n const template = tooltipTemplate(connectionData);\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip template={template} symbolAlignment={symbolAlignment} />\n );\n};\n\nConnectionLayerTooltip['displayName'] = 'ConnectionLayerTooltip';\n"],
5
+ "mappings": "AA6DI;AA7DJ,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAiBjC,MAAM,yBAAyB,CAAC,UAAuC;AAC5E,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAA6C,eAAe;AAE9D,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,MAAM;AAAA,EACR,IAAI,KAAK,CAAC;AACV,QAAM,iBAAyD;AAAA,IAC7D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,QAAM,WAAW,gBAAgB,cAAc;AAE/C,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,kBAAe,UAAoB,iBAAkC;AAE1E;AAEA,uBAAuB,aAAa,IAAI;",
6
6
  "names": []
7
7
  }
@@ -24,13 +24,7 @@ const DotLayerTooltip = (props) => {
24
24
  if (isDefaultTooltipHandler(tooltipTemplate)) {
25
25
  return template;
26
26
  }
27
- return /* @__PURE__ */ jsx(
28
- OverlayTooltip,
29
- {
30
- legacyTemplate: template,
31
- symbolAlignment
32
- }
33
- );
27
+ return /* @__PURE__ */ jsx(OverlayTooltip, { template, symbolAlignment });
34
28
  };
35
29
  DotLayerTooltip["displayName"] = "DotLayerTooltip";
36
30
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/map/components/DotLayer/DotLayerTooltip.tsx"],
4
- "sourcesContent": ["import { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type { Location } from '../../types/location.js';\nimport type {\n DotLayerTooltipData,\n DotLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface DotTooltipStatePayload {\n __color: string;\n __hoveredColor: string;\n __bearing: number;\n __backgroundColor: string;\n __hoveredBackgroundColor: string;\n data: Location;\n}\n\nexport interface DotLayerTooltipProps {\n tooltipTemplate?: DotLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const DotLayerTooltip = (props: DotLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<DotTooltipStatePayload>('geoDot');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const { __color: color, __bearing: bearing, data: customData } = data[0];\n const dotData: DotLayerTooltipData = {\n color,\n bearing,\n data: customData,\n };\n\n const template = tooltipTemplate(dotData);\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip\n legacyTemplate={template}\n symbolAlignment={symbolAlignment}\n />\n );\n};\n\nDotLayerTooltip['displayName'] = 'DotLayerTooltip';\n"],
5
- "mappings": "AAyDI;AAzDJ,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAiBjC,MAAM,kBAAkB,CAAC,UAAgC;AAC9D,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAA2C,QAAQ;AAErD,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,OAAO,WAAW,SAAS,MAAM,WAAW,IAAI,KAAK,CAAC;AACvE,QAAM,UAA+B;AAAA,IACnC;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,QAAM,WAAW,gBAAgB,OAAO;AAExC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB;AAAA,MAChB;AAAA;AAAA,EACF;AAEJ;AAEA,gBAAgB,aAAa,IAAI;",
4
+ "sourcesContent": ["import { _OverlayTooltip as OverlayTooltip } from '@dynatrace/strato-components/charts';\n\nimport { useGeoLayerTooltip } from '../../hooks/use-geo-layer-tooltip.js';\nimport type { Location } from '../../types/location.js';\nimport type {\n DotLayerTooltipData,\n DotLayerTooltipHandler,\n} from '../../types/tooltip.js';\nimport { isDefaultTooltipHandler } from '../../utils/tooltip-type-guards.js';\n\ninterface DotTooltipStatePayload {\n __color: string;\n __hoveredColor: string;\n __bearing: number;\n __backgroundColor: string;\n __hoveredBackgroundColor: string;\n data: Location;\n}\n\nexport interface DotLayerTooltipProps {\n tooltipTemplate?: DotLayerTooltipHandler;\n hidden?: boolean;\n symbolAlignment?: 'left' | 'right';\n}\n\nexport const DotLayerTooltip = (props: DotLayerTooltipProps) => {\n const { tooltipTemplate, hidden, symbolAlignment } = props;\n\n const { data, inBounds, position } =\n useGeoLayerTooltip<DotTooltipStatePayload>('geoDot');\n\n if (hidden || !tooltipTemplate || !inBounds || !position) {\n return null;\n }\n\n if (!data || !data[0]) {\n return null;\n }\n\n const { __color: color, __bearing: bearing, data: customData } = data[0];\n const dotData: DotLayerTooltipData = {\n color,\n bearing,\n data: customData,\n };\n\n const template = tooltipTemplate(dotData);\n\n if (!template) {\n return null;\n }\n\n if (isDefaultTooltipHandler(tooltipTemplate)) {\n return template;\n }\n\n return (\n <OverlayTooltip template={template} symbolAlignment={symbolAlignment} />\n );\n};\n\nDotLayerTooltip['displayName'] = 'DotLayerTooltip';\n"],
5
+ "mappings": "AAyDI;AAzDJ,SAAS,mBAAmB,sBAAsB;AAElD,SAAS,0BAA0B;AAMnC,SAAS,+BAA+B;AAiBjC,MAAM,kBAAkB,CAAC,UAAgC;AAC9D,QAAM,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI;AAErD,QAAM,EAAE,MAAM,UAAU,SAAS,IAC/B,mBAA2C,QAAQ;AAErD,MAAI,UAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC,UAAU;AACxD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,OAAO,WAAW,SAAS,MAAM,WAAW,IAAI,KAAK,CAAC;AACvE,QAAM,UAA+B;AAAA,IACnC;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AAEA,QAAM,WAAW,gBAAgB,OAAO;AAExC,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,MAAI,wBAAwB,eAAe,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,kBAAe,UAAoB,iBAAkC;AAE1E;AAEA,gBAAgB,aAAa,IAAI;",
6
6
  "names": []
7
7
  }
@@ -8,7 +8,8 @@ const MAPLIBRE_RUNTIME_ERROR_PATTERNS = [
8
8
  "Could not compile vertex shader",
9
9
  "Program failed to link",
10
10
  "feature index out of bounds",
11
- "Out of bounds. Index requested"
11
+ "Out of bounds. Index requested",
12
+ "bucket.icon.opacityVertexArray"
12
13
  ];
13
14
  const isMaplibreRuntimeError = (message) => MAPLIBRE_RUNTIME_ERROR_PATTERNS.some((pattern) => message.includes(pattern));
14
15
  const useMapRuntimeError = ({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/map/hooks/use-map-runtime-error.ts"],
4
- "sourcesContent": ["import { useMap } from '@vis.gl/react-maplibre';\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useWebGLContextError } from './use-webgl-context-error.js';\n\nconst MAX_RETRIES = 3;\n\n/** Prevents a burst of identical errors from exhausting the retry budget in one frame. */\nconst ERROR_DEBOUNCE_MS = 500;\n\n/**\n * Patterns that identify errors thrown from the maplibre-gl internal render\n * pipeline (shader compilation, program linking, vector-tile feature decoding).\n * These originate from rAF callbacks or from maplibre's own error event and\n * are not caused by consumer code.\n *\n * APPDEV-17938\n */\nconst MAPLIBRE_RUNTIME_ERROR_PATTERNS: readonly string[] = [\n 'Could not compile fragment shader',\n 'Could not compile vertex shader',\n 'Program failed to link',\n 'feature index out of bounds',\n 'Out of bounds. Index requested',\n];\n\nconst isMaplibreRuntimeError = (message: string): boolean =>\n MAPLIBRE_RUNTIME_ERROR_PATTERNS.some((pattern) => message.includes(pattern));\n\nexport interface UseMapRuntimeErrorOptions {\n /**\n * Called when the retry budget (3 attempts) is exhausted and the map cannot\n * recover. Throwing inside this callback will propagate to the nearest React\n * ErrorBoundary, showing the fallback UI.\n */\n onError: () => void;\n /**\n * Optional callback invoked on each recoverable error attempt before the\n * budget is exhausted. The `attempt` argument is 1-indexed.\n */\n onRetry?: (attempt: number) => void;\n}\n\n/**\n * Unified hook that guards MapView against maplibre-gl runtime errors from\n * three distinct sources:\n *\n * 1. **WebGL context loss** (`webglcontextlost` on the canvas) \u2014 composed via\n * `useWebGLContextError`.\n * 2. **maplibre's own error events** (`map.on('error', ...)`), covering tile\n * load failures and other internally dispatched errors.\n * 3. **Synchronous throws from the rAF render loop** that escape to\n * `window.onerror` \u2014 shader compilation, program link, and feature-index\n * out-of-bounds errors that maplibre does not catch internally.\n *\n * A shared retry counter (max 3) is maintained across all sources. Error\n * counting is debounced at 500 ms so that a burst of errors within a single\n * render frame counts as one occurrence. The counter resets whenever the map\n * fires an `idle` event (indicating a successful render). Once the budget is\n * exhausted, `onError` is invoked.\n *\n * APPDEV-17938\n */\nexport const useMapRuntimeError = ({\n onError,\n onRetry,\n}: UseMapRuntimeErrorOptions) => {\n const { current: mapRef } = useMap();\n const retryCountRef = useRef(0);\n const lastErrorTimeRef = useRef(0);\n // Tracks whether this map instance is actively rendering. Without this guard,\n // all mounted <MapView> instances would increment on a single window error\n // event. Initialised to true so early errors (before first idle) are caught.\n const isMapActiveRef = useRef(true);\n\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n const onRetryRef = useRef(onRetry);\n onRetryRef.current = onRetry;\n\n const handleError = useCallback(() => {\n const now = Date.now();\n\n if (now - lastErrorTimeRef.current < ERROR_DEBOUNCE_MS) {\n return;\n }\n\n lastErrorTimeRef.current = now;\n retryCountRef.current += 1;\n\n if (retryCountRef.current >= MAX_RETRIES) {\n onErrorRef.current();\n } else {\n onRetryRef.current?.(retryCountRef.current);\n }\n }, []);\n\n useWebGLContextError(handleError);\n\n useEffect(() => {\n const map = mapRef?.getMap();\n if (!map) {\n return;\n }\n\n const handleMapError = ({ error }: { error: Error }) => {\n if (isMaplibreRuntimeError(error.message)) {\n handleError();\n }\n };\n\n map.on('error', handleMapError);\n return () => {\n map.off('error', handleMapError);\n };\n }, [mapRef, handleError]);\n\n // rAF render-loop throws escape to window because they run outside React's\n // render cycle and are not caught by component-level error boundaries.\n useEffect(() => {\n const handleWindowError = (event: ErrorEvent) => {\n if (!isMapActiveRef.current) {\n return;\n }\n if (isMaplibreRuntimeError(event.message)) {\n // Stops the red console overlay in dev and top-level error boundaries.\n event.preventDefault();\n handleError();\n }\n };\n\n window.addEventListener('error', handleWindowError);\n return () => {\n window.removeEventListener('error', handleWindowError);\n };\n }, [handleError]);\n\n useEffect(() => {\n const map = mapRef?.getMap();\n if (!map) {\n return;\n }\n\n const handleRender = () => {\n isMapActiveRef.current = true;\n };\n\n const handleIdle = () => {\n isMapActiveRef.current = false;\n retryCountRef.current = 0;\n };\n\n map.on('render', handleRender);\n map.on('idle', handleIdle);\n return () => {\n map.off('render', handleRender);\n map.off('idle', handleIdle);\n };\n }, [mapRef]);\n};\n"],
5
- "mappings": "AAAA,SAAS,cAAc;AACvB,SAAS,aAAa,WAAW,cAAc;AAE/C,SAAS,4BAA4B;AAErC,MAAM,cAAc;AAGpB,MAAM,oBAAoB;AAU1B,MAAM,kCAAqD;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,yBAAyB,CAAC,YAC9B,gCAAgC,KAAK,CAAC,YAAY,QAAQ,SAAS,OAAO,CAAC;AAoCtE,MAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AACF,MAAiC;AAC/B,QAAM,EAAE,SAAS,OAAO,IAAI,OAAO;AACnC,QAAM,gBAAgB,OAAO,CAAC;AAC9B,QAAM,mBAAmB,OAAO,CAAC;AAIjC,QAAM,iBAAiB,OAAO,IAAI;AAElC,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AACrB,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AAErB,QAAM,cAAc,YAAY,MAAM;AACpC,UAAM,MAAM,KAAK,IAAI;AAErB,QAAI,MAAM,iBAAiB,UAAU,mBAAmB;AACtD;AAAA,IACF;AAEA,qBAAiB,UAAU;AAC3B,kBAAc,WAAW;AAEzB,QAAI,cAAc,WAAW,aAAa;AACxC,iBAAW,QAAQ;AAAA,IACrB,OAAO;AACL,iBAAW,UAAU,cAAc,OAAO;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,uBAAqB,WAAW;AAEhC,YAAU,MAAM;AACd,UAAM,MAAM,QAAQ,OAAO;AAC3B,QAAI,CAAC,KAAK;AACR;AAAA,IACF;AAEA,UAAM,iBAAiB,CAAC,EAAE,MAAM,MAAwB;AACtD,UAAI,uBAAuB,MAAM,OAAO,GAAG;AACzC,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,GAAG,SAAS,cAAc;AAC9B,WAAO,MAAM;AACX,UAAI,IAAI,SAAS,cAAc;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,CAAC;AAIxB,YAAU,MAAM;AACd,UAAM,oBAAoB,CAAC,UAAsB;AAC/C,UAAI,CAAC,eAAe,SAAS;AAC3B;AAAA,MACF;AACA,UAAI,uBAAuB,MAAM,OAAO,GAAG;AAEzC,cAAM,eAAe;AACrB,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO,iBAAiB,SAAS,iBAAiB;AAClD,WAAO,MAAM;AACX,aAAO,oBAAoB,SAAS,iBAAiB;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,YAAU,MAAM;AACd,UAAM,MAAM,QAAQ,OAAO;AAC3B,QAAI,CAAC,KAAK;AACR;AAAA,IACF;AAEA,UAAM,eAAe,MAAM;AACzB,qBAAe,UAAU;AAAA,IAC3B;AAEA,UAAM,aAAa,MAAM;AACvB,qBAAe,UAAU;AACzB,oBAAc,UAAU;AAAA,IAC1B;AAEA,QAAI,GAAG,UAAU,YAAY;AAC7B,QAAI,GAAG,QAAQ,UAAU;AACzB,WAAO,MAAM;AACX,UAAI,IAAI,UAAU,YAAY;AAC9B,UAAI,IAAI,QAAQ,UAAU;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AACb;",
4
+ "sourcesContent": ["import { useMap } from '@vis.gl/react-maplibre';\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useWebGLContextError } from './use-webgl-context-error.js';\n\nconst MAX_RETRIES = 3;\n\n/** Prevents a burst of identical errors from exhausting the retry budget in one frame. */\nconst ERROR_DEBOUNCE_MS = 500;\n\n/**\n * Patterns that identify errors thrown from the maplibre-gl internal render\n * pipeline (shader compilation, program linking, vector-tile feature decoding).\n * These originate from rAF callbacks or from maplibre's own error event and\n * are not caused by consumer code.\n *\n * APPDEV-17938\n */\nconst MAPLIBRE_RUNTIME_ERROR_PATTERNS: readonly string[] = [\n 'Could not compile fragment shader',\n 'Could not compile vertex shader',\n 'Program failed to link',\n 'feature index out of bounds',\n 'Out of bounds. Index requested',\n 'bucket.icon.opacityVertexArray',\n];\n\nconst isMaplibreRuntimeError = (message: string): boolean =>\n MAPLIBRE_RUNTIME_ERROR_PATTERNS.some((pattern) => message.includes(pattern));\n\nexport interface UseMapRuntimeErrorOptions {\n /**\n * Called when the retry budget (3 attempts) is exhausted and the map cannot\n * recover. Throwing inside this callback will propagate to the nearest React\n * ErrorBoundary, showing the fallback UI.\n */\n onError: () => void;\n /**\n * Optional callback invoked on each recoverable error attempt before the\n * budget is exhausted. The `attempt` argument is 1-indexed.\n */\n onRetry?: (attempt: number) => void;\n}\n\n/**\n * Unified hook that guards MapView against maplibre-gl runtime errors from\n * three distinct sources:\n *\n * 1. **WebGL context loss** (`webglcontextlost` on the canvas) \u2014 composed via\n * `useWebGLContextError`.\n * 2. **maplibre's own error events** (`map.on('error', ...)`), covering tile\n * load failures and other internally dispatched errors.\n * 3. **Synchronous throws from the rAF render loop** that escape to\n * `window.onerror` \u2014 shader compilation, program link, and feature-index\n * out-of-bounds errors that maplibre does not catch internally.\n *\n * A shared retry counter (max 3) is maintained across all sources. Error\n * counting is debounced at 500 ms so that a burst of errors within a single\n * render frame counts as one occurrence. The counter resets whenever the map\n * fires an `idle` event (indicating a successful render). Once the budget is\n * exhausted, `onError` is invoked.\n *\n * APPDEV-17938\n */\nexport const useMapRuntimeError = ({\n onError,\n onRetry,\n}: UseMapRuntimeErrorOptions) => {\n const { current: mapRef } = useMap();\n const retryCountRef = useRef(0);\n const lastErrorTimeRef = useRef(0);\n // Tracks whether this map instance is actively rendering. Without this guard,\n // all mounted <MapView> instances would increment on a single window error\n // event. Initialised to true so early errors (before first idle) are caught.\n const isMapActiveRef = useRef(true);\n\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n const onRetryRef = useRef(onRetry);\n onRetryRef.current = onRetry;\n\n const handleError = useCallback(() => {\n const now = Date.now();\n\n if (now - lastErrorTimeRef.current < ERROR_DEBOUNCE_MS) {\n return;\n }\n\n lastErrorTimeRef.current = now;\n retryCountRef.current += 1;\n\n if (retryCountRef.current >= MAX_RETRIES) {\n onErrorRef.current();\n } else {\n onRetryRef.current?.(retryCountRef.current);\n }\n }, []);\n\n useWebGLContextError(handleError);\n\n useEffect(() => {\n const map = mapRef?.getMap();\n if (!map) {\n return;\n }\n\n const handleMapError = ({ error }: { error: Error }) => {\n if (isMaplibreRuntimeError(error.message)) {\n handleError();\n }\n };\n\n map.on('error', handleMapError);\n return () => {\n map.off('error', handleMapError);\n };\n }, [mapRef, handleError]);\n\n // rAF render-loop throws escape to window because they run outside React's\n // render cycle and are not caught by component-level error boundaries.\n useEffect(() => {\n const handleWindowError = (event: ErrorEvent) => {\n if (!isMapActiveRef.current) {\n return;\n }\n if (isMaplibreRuntimeError(event.message)) {\n // Stops the red console overlay in dev and top-level error boundaries.\n event.preventDefault();\n handleError();\n }\n };\n\n window.addEventListener('error', handleWindowError);\n return () => {\n window.removeEventListener('error', handleWindowError);\n };\n }, [handleError]);\n\n useEffect(() => {\n const map = mapRef?.getMap();\n if (!map) {\n return;\n }\n\n const handleRender = () => {\n isMapActiveRef.current = true;\n };\n\n const handleIdle = () => {\n isMapActiveRef.current = false;\n retryCountRef.current = 0;\n };\n\n map.on('render', handleRender);\n map.on('idle', handleIdle);\n return () => {\n map.off('render', handleRender);\n map.off('idle', handleIdle);\n };\n }, [mapRef]);\n};\n"],
5
+ "mappings": "AAAA,SAAS,cAAc;AACvB,SAAS,aAAa,WAAW,cAAc;AAE/C,SAAS,4BAA4B;AAErC,MAAM,cAAc;AAGpB,MAAM,oBAAoB;AAU1B,MAAM,kCAAqD;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,yBAAyB,CAAC,YAC9B,gCAAgC,KAAK,CAAC,YAAY,QAAQ,SAAS,OAAO,CAAC;AAoCtE,MAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AACF,MAAiC;AAC/B,QAAM,EAAE,SAAS,OAAO,IAAI,OAAO;AACnC,QAAM,gBAAgB,OAAO,CAAC;AAC9B,QAAM,mBAAmB,OAAO,CAAC;AAIjC,QAAM,iBAAiB,OAAO,IAAI;AAElC,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AACrB,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AAErB,QAAM,cAAc,YAAY,MAAM;AACpC,UAAM,MAAM,KAAK,IAAI;AAErB,QAAI,MAAM,iBAAiB,UAAU,mBAAmB;AACtD;AAAA,IACF;AAEA,qBAAiB,UAAU;AAC3B,kBAAc,WAAW;AAEzB,QAAI,cAAc,WAAW,aAAa;AACxC,iBAAW,QAAQ;AAAA,IACrB,OAAO;AACL,iBAAW,UAAU,cAAc,OAAO;AAAA,IAC5C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,uBAAqB,WAAW;AAEhC,YAAU,MAAM;AACd,UAAM,MAAM,QAAQ,OAAO;AAC3B,QAAI,CAAC,KAAK;AACR;AAAA,IACF;AAEA,UAAM,iBAAiB,CAAC,EAAE,MAAM,MAAwB;AACtD,UAAI,uBAAuB,MAAM,OAAO,GAAG;AACzC,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,QAAI,GAAG,SAAS,cAAc;AAC9B,WAAO,MAAM;AACX,UAAI,IAAI,SAAS,cAAc;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,WAAW,CAAC;AAIxB,YAAU,MAAM;AACd,UAAM,oBAAoB,CAAC,UAAsB;AAC/C,UAAI,CAAC,eAAe,SAAS;AAC3B;AAAA,MACF;AACA,UAAI,uBAAuB,MAAM,OAAO,GAAG;AAEzC,cAAM,eAAe;AACrB,oBAAY;AAAA,MACd;AAAA,IACF;AAEA,WAAO,iBAAiB,SAAS,iBAAiB;AAClD,WAAO,MAAM;AACX,aAAO,oBAAoB,SAAS,iBAAiB;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,YAAU,MAAM;AACd,UAAM,MAAM,QAAQ,OAAO;AAC3B,QAAI,CAAC,KAAK;AACR;AAAA,IACF;AAEA,UAAM,eAAe,MAAM;AACzB,qBAAe,UAAU;AAAA,IAC3B;AAEA,UAAM,aAAa,MAAM;AACvB,qBAAe,UAAU;AACzB,oBAAc,UAAU;AAAA,IAC1B;AAEA,QAAI,GAAG,UAAU,YAAY;AAC7B,QAAI,GAAG,QAAQ,UAAU;AACzB,WAAO,MAAM;AACX,UAAI,IAAI,UAAU,YAAY;AAC9B,UAAI,IAAI,QAAQ,UAAU;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AACb;",
6
6
  "names": []
7
7
  }
@@ -55,12 +55,6 @@ const BubbleLayerTooltip = (props) => {
55
55
  if ((0, import_tooltip_type_guards.isDefaultTooltipHandler)(tooltipTemplate)) {
56
56
  return template;
57
57
  }
58
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
59
- import_charts._OverlayTooltip,
60
- {
61
- legacyTemplate: template,
62
- symbolAlignment
63
- }
64
- );
58
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_charts._OverlayTooltip, { template, symbolAlignment });
65
59
  };
66
60
  BubbleLayerTooltip["displayName"] = "BubbleLayerTooltip";
@@ -47,12 +47,6 @@ const ChoroplethLayerTooltip = (props) => {
47
47
  if ((0, import_tooltip_type_guards.isDefaultTooltipHandler)(tooltipTemplate)) {
48
48
  return template;
49
49
  }
50
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
51
- import_charts._OverlayTooltip,
52
- {
53
- legacyTemplate: template,
54
- symbolAlignment
55
- }
56
- );
50
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_charts._OverlayTooltip, { template, symbolAlignment });
57
51
  };
58
52
  ChoroplethLayerTooltip["displayName"] = "ChoroplethLayerTooltip";
@@ -51,12 +51,6 @@ const ConnectionLayerTooltip = (props) => {
51
51
  if ((0, import_tooltip_type_guards.isDefaultTooltipHandler)(tooltipTemplate)) {
52
52
  return template;
53
53
  }
54
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
55
- import_charts._OverlayTooltip,
56
- {
57
- legacyTemplate: template,
58
- symbolAlignment
59
- }
60
- );
54
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_charts._OverlayTooltip, { template, symbolAlignment });
61
55
  };
62
56
  ConnectionLayerTooltip["displayName"] = "ConnectionLayerTooltip";
@@ -47,12 +47,6 @@ const DotLayerTooltip = (props) => {
47
47
  if ((0, import_tooltip_type_guards.isDefaultTooltipHandler)(tooltipTemplate)) {
48
48
  return template;
49
49
  }
50
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
51
- import_charts._OverlayTooltip,
52
- {
53
- legacyTemplate: template,
54
- symbolAlignment
55
- }
56
- );
50
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_charts._OverlayTooltip, { template, symbolAlignment });
57
51
  };
58
52
  DotLayerTooltip["displayName"] = "DotLayerTooltip";
@@ -31,7 +31,8 @@ const MAPLIBRE_RUNTIME_ERROR_PATTERNS = [
31
31
  "Could not compile vertex shader",
32
32
  "Program failed to link",
33
33
  "feature index out of bounds",
34
- "Out of bounds. Index requested"
34
+ "Out of bounds. Index requested",
35
+ "bucket.icon.opacityVertexArray"
35
36
  ];
36
37
  const isMaplibreRuntimeError = (message) => MAPLIBRE_RUNTIME_ERROR_PATTERNS.some((pattern) => message.includes(pattern));
37
38
  const useMapRuntimeError = ({
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export type MapViewProviderProps = {
6
6
  /** Country code for regions with disputed borders */
7
- countryCode?: 'CN' | 'IN' | 'IL' | 'MA';
7
+ countryCode?: 'CN' | 'IN' | 'IL' | 'MA' | 'OTHERS';
8
8
  /** Whether the world map is displayed */
9
9
  displayWorldMap?: boolean;
10
10
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynatrace/strato-geo",
3
- "version": "3.8.0",
3
+ "version": "3.9.0",
4
4
  "private": false,
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
@@ -42,7 +42,7 @@
42
42
  "@turf/midpoint": "^6.5.0",
43
43
  "@turf/projection": "^6.5.0",
44
44
  "@turf/rhumb-bearing": "^6.5.0",
45
- "@vanilla-extract/css": "^1.18.0",
45
+ "@vanilla-extract/css": "^1.21.1",
46
46
  "@vanilla-extract/recipes": "^0.5.7",
47
47
  "@vis.gl/react-maplibre": "^8.0.0",
48
48
  "d3-array": "^3.2.4",
@@ -54,7 +54,7 @@
54
54
  "@dynatrace-sdk/client-classic-environment-v2": "^5.1.0",
55
55
  "@dynatrace-sdk/client-platform-management-service": "^1.7.0",
56
56
  "@dynatrace-sdk/units": "^1.5.0",
57
- "@dynatrace/strato-components": "^3.8.0",
57
+ "@dynatrace/strato-components": "^3.9.0",
58
58
  "@dynatrace/strato-design-tokens": "^1.5.1",
59
59
  "@dynatrace/strato-icons": "^2.3.1",
60
60
  "react": "^18.0.0",