@gooddata/sdk-ui-geo 11.23.0-alpha.4 → 11.23.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.
Files changed (86) hide show
  1. package/esm/next/components/RenderGeoChart.d.ts.map +1 -1
  2. package/esm/next/components/RenderGeoChart.js +23 -2
  3. package/esm/next/components/RenderGeoChart.js.map +1 -1
  4. package/esm/next/components/multiLayerLegend/GeoChartLegendOverlay.d.ts +4 -1
  5. package/esm/next/components/multiLayerLegend/GeoChartLegendOverlay.d.ts.map +1 -1
  6. package/esm/next/components/multiLayerLegend/GeoChartLegendOverlay.js +3 -2
  7. package/esm/next/components/multiLayerLegend/GeoChartLegendOverlay.js.map +1 -1
  8. package/esm/next/components/multiLayerLegend/LayerToggleSwitch.d.ts.map +1 -1
  9. package/esm/next/components/multiLayerLegend/LayerToggleSwitch.js +2 -8
  10. package/esm/next/components/multiLayerLegend/LayerToggleSwitch.js.map +1 -1
  11. package/esm/next/components/multiLayerLegend/LegendGroupColor.d.ts +4 -10
  12. package/esm/next/components/multiLayerLegend/LegendGroupColor.d.ts.map +1 -1
  13. package/esm/next/components/multiLayerLegend/LegendGroupColor.js +83 -8
  14. package/esm/next/components/multiLayerLegend/LegendGroupColor.js.map +1 -1
  15. package/esm/next/components/multiLayerLegend/LegendGroupColorScale.d.ts +13 -0
  16. package/esm/next/components/multiLayerLegend/LegendGroupColorScale.d.ts.map +1 -1
  17. package/esm/next/components/multiLayerLegend/LegendGroupColorScale.js +13 -5
  18. package/esm/next/components/multiLayerLegend/LegendGroupColorScale.js.map +1 -1
  19. package/esm/next/components/multiLayerLegend/LegendGroupContainer.d.ts +16 -0
  20. package/esm/next/components/multiLayerLegend/LegendGroupContainer.d.ts.map +1 -0
  21. package/esm/next/components/multiLayerLegend/LegendGroupContainer.js +16 -0
  22. package/esm/next/components/multiLayerLegend/LegendGroupContainer.js.map +1 -0
  23. package/esm/next/components/multiLayerLegend/LegendGroupSize.d.ts +8 -0
  24. package/esm/next/components/multiLayerLegend/LegendGroupSize.d.ts.map +1 -1
  25. package/esm/next/components/multiLayerLegend/LegendGroupSize.js +18 -9
  26. package/esm/next/components/multiLayerLegend/LegendGroupSize.js.map +1 -1
  27. package/esm/next/components/multiLayerLegend/MultiLayerLegendPanel.d.ts +13 -0
  28. package/esm/next/components/multiLayerLegend/MultiLayerLegendPanel.d.ts.map +1 -1
  29. package/esm/next/components/multiLayerLegend/MultiLayerLegendPanel.js +76 -11
  30. package/esm/next/components/multiLayerLegend/MultiLayerLegendPanel.js.map +1 -1
  31. package/esm/next/components/multiLayerLegend/MultiLayerLegendSection.d.ts +10 -1
  32. package/esm/next/components/multiLayerLegend/MultiLayerLegendSection.d.ts.map +1 -1
  33. package/esm/next/components/multiLayerLegend/MultiLayerLegendSection.js +38 -15
  34. package/esm/next/components/multiLayerLegend/MultiLayerLegendSection.js.map +1 -1
  35. package/esm/next/components/multiLayerLegend/legendMessages.d.ts +6 -0
  36. package/esm/next/components/multiLayerLegend/legendMessages.d.ts.map +1 -0
  37. package/esm/next/components/multiLayerLegend/legendMessages.js +20 -0
  38. package/esm/next/components/multiLayerLegend/legendMessages.js.map +1 -0
  39. package/esm/next/hooks/map/useMapInitialization.d.ts +5 -2
  40. package/esm/next/hooks/map/useMapInitialization.d.ts.map +1 -1
  41. package/esm/next/hooks/map/useMapInitialization.js +107 -4
  42. package/esm/next/hooks/map/useMapInitialization.js.map +1 -1
  43. package/esm/next/hooks/pushData/useGeoPushData.d.ts +2 -1
  44. package/esm/next/hooks/pushData/useGeoPushData.d.ts.map +1 -1
  45. package/esm/next/hooks/pushData/useGeoPushData.js +29 -3
  46. package/esm/next/hooks/pushData/useGeoPushData.js.map +1 -1
  47. package/esm/next/layers/common/computeLegend.d.ts.map +1 -1
  48. package/esm/next/layers/common/computeLegend.js +3 -3
  49. package/esm/next/layers/common/computeLegend.js.map +1 -1
  50. package/esm/next/layers/common/mapFacade.d.ts +5 -0
  51. package/esm/next/layers/common/mapFacade.d.ts.map +1 -1
  52. package/esm/next/layers/common/mapFacade.js +5 -0
  53. package/esm/next/layers/common/mapFacade.js.map +1 -1
  54. package/esm/next/map/MapController.d.ts +4 -1
  55. package/esm/next/map/MapController.d.ts.map +1 -1
  56. package/esm/next/map/MapController.js +2 -2
  57. package/esm/next/map/MapController.js.map +1 -1
  58. package/esm/next/map/runtime/mapConfig.d.ts +23 -0
  59. package/esm/next/map/runtime/mapConfig.d.ts.map +1 -1
  60. package/esm/next/map/runtime/mapConfig.js +24 -0
  61. package/esm/next/map/runtime/mapConfig.js.map +1 -1
  62. package/esm/next/map/runtime/mapInitialization.d.ts +8 -1
  63. package/esm/next/map/runtime/mapInitialization.d.ts.map +1 -1
  64. package/esm/next/map/runtime/mapInitialization.js +9 -3
  65. package/esm/next/map/runtime/mapInitialization.js.map +1 -1
  66. package/esm/next/types/config/areaChart.d.ts +13 -0
  67. package/esm/next/types/config/areaChart.d.ts.map +1 -1
  68. package/esm/next/types/config/pushpinChart.d.ts +13 -0
  69. package/esm/next/types/config/pushpinChart.d.ts.map +1 -1
  70. package/esm/next/types/config/unified.d.ts +13 -0
  71. package/esm/next/types/config/unified.d.ts.map +1 -1
  72. package/esm/next/utils/alphabeticalSorting.d.ts +13 -0
  73. package/esm/next/utils/alphabeticalSorting.d.ts.map +1 -0
  74. package/esm/next/utils/alphabeticalSorting.js +22 -0
  75. package/esm/next/utils/alphabeticalSorting.js.map +1 -0
  76. package/esm/next/utils/mapCanvasAccessibility.d.ts +31 -0
  77. package/esm/next/utils/mapCanvasAccessibility.d.ts.map +1 -0
  78. package/esm/next/utils/mapCanvasAccessibility.js +60 -0
  79. package/esm/next/utils/mapCanvasAccessibility.js.map +1 -0
  80. package/esm/sdk-ui-geo.d.ts +39 -0
  81. package/package.json +11 -11
  82. package/styles/css/main.css +75 -5
  83. package/styles/css/main.css.map +1 -1
  84. package/styles/scss/_geo-multi-layer-legend.scss +91 -4
  85. package/styles/scss/geo-chart-next.scss +5 -0
  86. package/styles/scss/main.scss +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"RenderGeoChart.d.ts","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChart.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,OAAO,CAAC;AA0BrE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,IAAI,YAAY,CA0E7C"}
1
+ {"version":3,"file":"RenderGeoChart.d.ts","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChart.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAA0C,MAAM,OAAO,CAAC;AAiClF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAiH7C"}
@@ -1,18 +1,21 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2025-2026 GoodData Corporation
3
- import { useMemo, useRef, useState } from "react";
3
+ import { useCallback, useMemo, useRef, useState } from "react";
4
4
  import cx from "classnames";
5
5
  import { defaultImport } from "default-import";
6
+ import { useIntl } from "react-intl";
6
7
  import ReactMeasure from "react-measure";
7
8
  import { v4 } from "uuid";
8
9
  import { IntlTranslationsProvider, convertDrillableItemsToPredicates, } from "@gooddata/sdk-ui";
9
10
  import { GeoChartLegendOverlay } from "./multiLayerLegend/GeoChartLegendOverlay.js";
11
+ import { legendMessagesById } from "./multiLayerLegend/legendMessages.js";
10
12
  import { useGeoChartProps } from "../context/GeoChartContext.js";
11
13
  import { useGeoLayers } from "../context/GeoLayersContext.js";
12
14
  import { MapController } from "../map/MapController.js";
13
15
  import { computeViewportFromConfig } from "../map/viewport/viewportResolution.js";
14
16
  import { computeCombinedViewport } from "../map/viewport.js";
15
17
  import { PushDataSync } from "../pushData/PushDataSync.js";
18
+ import { getMapCanvasInstructionMessageId, getMapCanvasRuntimeCapabilities, mapCanvasInstructionMessagesById, } from "../utils/mapCanvasAccessibility.js";
16
19
  // There are known compatibility issues between CommonJS (CJS) and ECMAScript modules (ESM).
17
20
  const Measure = defaultImport(ReactMeasure);
18
21
  const containerBaseId = "geo-chart-next";
@@ -33,9 +36,25 @@ const containerBaseId = "geo-chart-next";
33
36
  */
34
37
  export function RenderGeoChart() {
35
38
  const props = useGeoChartProps();
39
+ const intl = useIntl();
36
40
  const { layers, layerExecutions, primaryLayer } = useGeoLayers();
37
41
  const mapContainerRef = useRef(null);
42
+ const legendPanelRef = useRef(null);
38
43
  const containerId = useMemo(() => `${containerBaseId}-${v4()}`, []);
44
+ const isGeoChartA11yImprovementsEnabled = props.config?.enableGeoChartA11yImprovements ?? false;
45
+ const mapInstructionsId = useMemo(() => (isGeoChartA11yImprovementsEnabled ? `${containerBaseId}-instructions-${v4()}` : undefined), [isGeoChartA11yImprovementsEnabled]);
46
+ const mapCanvasCapabilities = useMemo(() => (isGeoChartA11yImprovementsEnabled ? getMapCanvasRuntimeCapabilities(props.config) : undefined), [isGeoChartA11yImprovementsEnabled, props.config]);
47
+ const instructionMessage = useMemo(() => {
48
+ if (!mapCanvasCapabilities) {
49
+ return "";
50
+ }
51
+ const instructionMessageId = getMapCanvasInstructionMessageId(mapCanvasCapabilities);
52
+ return intl.formatMessage(mapCanvasInstructionMessagesById[instructionMessageId]);
53
+ }, [mapCanvasCapabilities, intl]);
54
+ const mapCanvasTitle = isGeoChartA11yImprovementsEnabled ? props.config?.a11yTitle : undefined;
55
+ const legendMessageFormatter = useCallback((id, values) => {
56
+ return intl.formatMessage(legendMessagesById[id], values);
57
+ }, [intl]);
39
58
  const [chartContainerRect, setChartContainerRect] = useState(null);
40
59
  const availableLegends = primaryLayer?.availableLegends;
41
60
  const dataViewport = useMemo(() => computeCombinedViewport(layers), [layers]);
@@ -46,7 +65,9 @@ export function RenderGeoChart() {
46
65
  isExportMode,
47
66
  });
48
67
  return (_jsx(Measure, { client: true, onResize: setChartContainerRect, children: ({ measureRef }) => (_jsxs("div", { id: containerId, "data-testid": isExportMode ? "geo-chart-next-export-mode" : containerBaseId, className: containerClass, ref: measureRef, children: [
49
- _jsx("div", { ref: mapContainerRef, className: "gd-geo-chart-next__map", children: _jsx(IntlTranslationsProvider, { children: (translationProps) => (_jsx(GeoChartLegendOverlay, { config: props.config, chartContainerRect: chartContainerRect, layers: layers, layerExecutions: layerExecutions, primaryLayer: primaryLayer, numericSymbols: translationProps.numericSymbols })) }) }), _jsx(MapController, { mapContainerRef: mapContainerRef, chartContainerRect: chartContainerRect, initialViewport: initialViewport, dataViewport: dataViewport, layerExecutions: layerExecutions, drillablePredicates: drillablePredicates, onCenterPositionChanged: props.onCenterPositionChanged, onZoomChanged: props.onZoomChanged, onDrill: props.onDrill, afterRender: props.afterRender, config: props.config, backend: props.backend }), _jsx(PushDataSync, { availableLegends: availableLegends, geoLayerType: props.type })
68
+ _jsx("div", { ref: mapContainerRef, className: "gd-geo-chart-next__map", children: _jsx(IntlTranslationsProvider, { children: (translationProps) => (_jsx(GeoChartLegendOverlay, { config: props.config, chartContainerRect: chartContainerRect, layers: layers, layerExecutions: layerExecutions, primaryLayer: primaryLayer, numericSymbols: translationProps.numericSymbols, formatMessage: legendMessageFormatter, setLegendPanelElementRef: (element) => {
69
+ legendPanelRef.current = element;
70
+ } })) }) }), isGeoChartA11yImprovementsEnabled && mapInstructionsId ? (_jsx("p", { id: mapInstructionsId, className: "sr-only", children: instructionMessage })) : null, _jsx(MapController, { mapContainerRef: mapContainerRef, chartContainerRect: chartContainerRect, initialViewport: initialViewport, dataViewport: dataViewport, layerExecutions: layerExecutions, drillablePredicates: drillablePredicates, onCenterPositionChanged: props.onCenterPositionChanged, onZoomChanged: props.onZoomChanged, onDrill: props.onDrill, afterRender: props.afterRender, config: props.config, backend: props.backend, mapInstructionsId: mapInstructionsId, mapCanvasTitle: mapCanvasTitle, legendPanelRef: legendPanelRef }), _jsx(PushDataSync, { availableLegends: availableLegends, geoLayerType: props.type })
50
71
  ] })) }));
51
72
  }
52
73
  //# sourceMappingURL=RenderGeoChart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RenderGeoChart.js","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChart.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderGeoChart.js","sourceRoot":"","sources":["../../../src/next/components/RenderGeoChart.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAElF,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,YAA+D,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B,OAAO,EAEH,wBAAwB,EACxB,iCAAiC,GACpC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAA+B,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EACH,gCAAgC,EAChC,+BAA+B,EAC/B,gCAAgC,GACnC,MAAM,oCAAoC,CAAC;AAE5C,4FAA4F;AAC5F,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;AAE5C,MAAM,eAAe,GAAG,gBAAgB,CAAC;AAEzC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,GAAiB;IAC3C,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;IACjE,MAAM,eAAe,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,eAAe,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,iCAAiC,GAAG,KAAK,CAAC,MAAM,EAAE,8BAA8B,IAAI,KAAK,CAAC;IAChG,MAAM,iBAAiB,GAAG,OAAO,CAC7B,GAAG,EAAE,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,GAAG,eAAe,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EACjG,CAAC,iCAAiC,CAAC,CACtC,CAAC;IAEF,MAAM,qBAAqB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EACrG,CAAC,iCAAiC,EAAE,KAAK,CAAC,MAAM,CAAC,CACpD,CAAC;IACF,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACrC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,oBAAoB,GAAG,gCAAgC,CAAC,qBAAqB,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,aAAa,CAAC,gCAAgC,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAAA,CACrF,EAAE,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,iCAAiC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,MAAM,sBAAsB,GAAG,WAAW,CACtC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAAA,CAC7D,EACD,CAAC,IAAI,CAAC,CACT,CAAC;IAEF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAEvF,MAAM,gBAAgB,GAAG,YAAY,EAAE,gBAAgB,CAAC;IAExD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,EAC3D,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAC/B,CAAC;IAEF,MAAM,mBAAmB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,iCAAiC,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,EACnE,CAAC,KAAK,CAAC,cAAc,CAAC,CACzB,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,YAAY,IAAI,KAAK,CAAC;IACzD,MAAM,cAAc,GAAG,EAAE,CACrB,8BAA8B,EAC9B,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX;QACI,YAAY;KACf,CACJ,CAAC;IAEF,OAAO,CACH,KAAC,OAAO,IAAC,MAAM,QAAC,QAAQ,EAAE,qBAAqB,YAC1C,CAAC,EAAE,UAAU,EAA0B,EAAE,EAAE,CAAC,CACzC,eACI,EAAE,EAAE,WAAW,iBACF,YAAY,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,eAAe,EAC1E,SAAS,EAAE,cAAc,EACzB,GAAG,EAAE,UAAU;gBAEf,cAAK,GAAG,EAAE,eAAe,EAAE,SAAS,EAAC,wBAAwB,YACzD,KAAC,wBAAwB,cACpB,CAAC,gBAA6C,EAAE,EAAE,CAAC,CAChD,KAAC,qBAAqB,IAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,gBAAgB,CAAC,cAAc,EAC/C,aAAa,EAAE,sBAAsB,EACrC,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;gCACnC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;4BAAA,CACpC,GACH,CACL,GACsB,GACzB,EACL,iCAAiC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CACtD,YAAG,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAC,SAAS,YACxC,kBAAkB,GACnB,CACP,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,aAAa,IACV,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,uBAAuB,EAAE,KAAK,CAAC,uBAAuB,EACtD,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAChC,EACF,KAAC,YAAY,IAAC,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,GAAI;gBAC5E,CACT,GACK,CACb,CAAC;AAAA,CACL"}
@@ -1,5 +1,6 @@
1
1
  import { type ReactElement } from "react";
2
2
  import { type ContentRect } from "react-measure";
3
+ import { type LegendMessageFormatter } from "./legendMessages.js";
3
4
  import type { IGeoLayerData } from "../../context/GeoLayersContext.js";
4
5
  import type { IGeoChartConfig } from "../../types/config/unified.js";
5
6
  import type { ILayerExecutionRecord } from "../../types/props/geoChart/internal.js";
@@ -19,11 +20,13 @@ export interface IGeoChartLegendOverlayProps {
19
20
  layerExecutions: ILayerExecutionRecord[];
20
21
  primaryLayer: IGeoLayerData | null;
21
22
  numericSymbols?: string[];
23
+ formatMessage?: LegendMessageFormatter;
24
+ setLegendPanelElementRef?: (element: HTMLDivElement | null) => void;
22
25
  }
23
26
  /**
24
27
  * Renders the multi-layer legend panel as a map overlay.
25
28
  *
26
29
  * @internal
27
30
  */
28
- export declare function GeoChartLegendOverlay({ config, chartContainerRect, layers, layerExecutions, primaryLayer, numericSymbols }: IGeoChartLegendOverlayProps): ReactElement | null;
31
+ export declare function GeoChartLegendOverlay({ config, chartContainerRect, layers, layerExecutions, primaryLayer, numericSymbols, formatMessage, setLegendPanelElementRef }: IGeoChartLegendOverlayProps): ReactElement | null;
29
32
  //# sourceMappingURL=GeoChartLegendOverlay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeoChartLegendOverlay.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/GeoChartLegendOverlay.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAKvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,kBAAkB,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACzC,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,YAAY,EACZ,cAAc,EACjB,EAAE,2BAA2B,GAAG,YAAY,GAAG,IAAI,CA8CnD"}
1
+ {"version":3,"file":"GeoChartLegendOverlay.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/GeoChartLegendOverlay.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,OAAO,CAAC;AAEhE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAKvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAEpF;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;IACpC,kBAAkB,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,eAAe,EAAE,qBAAqB,EAAE,CAAC;IACzC,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;CACvE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,EAClC,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,YAAY,EACZ,cAAc,EACd,aAAa,EACb,wBAAwB,EAC3B,EAAE,2BAA2B,GAAG,YAAY,GAAG,IAAI,CAkDnD"}
@@ -11,7 +11,7 @@ import { useMultiLayerLegend } from "../../hooks/legend/useMultiLayerLegend.js";
11
11
  *
12
12
  * @internal
13
13
  */
14
- export function GeoChartLegendOverlay({ config, chartContainerRect, layers, layerExecutions, primaryLayer, numericSymbols, }) {
14
+ export function GeoChartLegendOverlay({ config, chartContainerRect, layers, layerExecutions, primaryLayer, numericSymbols, formatMessage, setLegendPanelElementRef, }) {
15
15
  const { toggleLegendItem, toggleLayerVisibility, hiddenLayers } = useGeoLegend();
16
16
  const model = useMultiLayerLegend(layerExecutions, layers, { numericSymbols });
17
17
  const legendConfig = useLegendConfig(config);
@@ -26,10 +26,11 @@ export function GeoChartLegendOverlay({ config, chartContainerRect, layers, laye
26
26
  toggleLayerVisibility(layerId);
27
27
  }, [toggleLayerVisibility]);
28
28
  const enabled = useMemo(() => legendConfig.enabled, [legendConfig.enabled]);
29
+ const enableGeoChartA11yImprovements = config?.enableGeoChartA11yImprovements ?? false;
29
30
  // Don't render until container is measured (needed for height calculations)
30
31
  if (!chartContainerRect?.client?.height) {
31
32
  return null;
32
33
  }
33
- return (_jsx(MultiLayerLegendPanel, { enabled: enabled, model: model, position: position, hiddenLayers: hiddenLayers, onLayerVisibilityChange: handleLayerVisibilityChange, onItemClick: handleLegendItemClick }));
34
+ return (_jsx(MultiLayerLegendPanel, { enabled: enabled, model: model, position: position, hiddenLayers: hiddenLayers, onLayerVisibilityChange: handleLayerVisibilityChange, onItemClick: handleLegendItemClick, enableGeoChartA11yImprovements: enableGeoChartA11yImprovements, formatMessage: formatMessage, setPanelElementRef: setLegendPanelElementRef }));
34
35
  }
35
36
  //# sourceMappingURL=GeoChartLegendOverlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeoChartLegendOverlay.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/GeoChartLegendOverlay.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAsBhF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAClC,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,YAAY,EACZ,cAAc,GACY,EAAuB;IACjD,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;IAEjF,MAAM,KAAK,GAAG,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IAE/E,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,CAClC,MAAM,EACN,YAAY,EAAE,OAAO,IAAI,IAAI,EAC7B,kBAAkB,IAAI,SAAS,CAClC,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC;IAElE,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,OAAe,EAAE,GAAW,EAAE,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACjF,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IAAA,CACnD,EACD,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAC7B,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAC3C,CAAC,OAAe,EAAE,EAAE,CAAC;QACjB,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAAA,CAClC,EACD,CAAC,qBAAqB,CAAC,CAC1B,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5E,4EAA4E;IAC5E,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,qBAAqB,IAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,uBAAuB,EAAE,2BAA2B,EACpD,WAAW,EAAE,qBAAqB,GACpC,CACL,CAAC;AAAA,CACL"}
1
+ {"version":3,"file":"GeoChartLegendOverlay.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/GeoChartLegendOverlay.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAwBhF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAClC,MAAM,EACN,kBAAkB,EAClB,MAAM,EACN,eAAe,EACf,YAAY,EACZ,cAAc,EACd,aAAa,EACb,wBAAwB,GACE,EAAuB;IACjD,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;IAEjF,MAAM,KAAK,GAAG,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IAE/E,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,gBAAgB,CAClC,MAAM,EACN,YAAY,EAAE,OAAO,IAAI,IAAI,EAC7B,kBAAkB,IAAI,SAAS,CAClC,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,EAAE,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC;IAElE,MAAM,qBAAqB,GAAG,WAAW,CACrC,CAAC,OAAe,EAAE,GAAW,EAAE,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACjF,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;IAAA,CACnD,EACD,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAC7B,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAC3C,CAAC,OAAe,EAAE,EAAE,CAAC;QACjB,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAAA,CAClC,EACD,CAAC,qBAAqB,CAAC,CAC1B,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,MAAM,8BAA8B,GAAG,MAAM,EAAE,8BAA8B,IAAI,KAAK,CAAC;IAEvF,4EAA4E;IAC5E,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,qBAAqB,IAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,uBAAuB,EAAE,2BAA2B,EACpD,WAAW,EAAE,qBAAqB,EAClC,8BAA8B,EAAE,8BAA8B,EAC9D,aAAa,EAAE,aAAa,EAC5B,kBAAkB,EAAE,wBAAwB,GAC9C,CACL,CAAC;AAAA,CACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"LayerToggleSwitch.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LayerToggleSwitch.tsx"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,+DA0C5B,CAAC"}
1
+ {"version":3,"file":"LayerToggleSwitch.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LayerToggleSwitch.tsx"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACpC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAErC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,+DAkC5B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2025 GoodData Corporation
2
+ // (C) 2025-2026 GoodData Corporation
3
3
  import { memo } from "react";
4
4
  import cx from "classnames";
5
5
  /**
@@ -17,17 +17,11 @@ export const LayerToggleSwitch = memo(function LayerToggleSwitch({ id, checked,
17
17
  onChange(!checked);
18
18
  }
19
19
  };
20
- const handleKeyDown = (event) => {
21
- if (!disabled && (event.key === "Enter" || event.key === " ")) {
22
- event.preventDefault();
23
- onChange(!checked);
24
- }
25
- };
26
20
  const toggleClassName = cx("gd-geo-legend-toggle", {
27
21
  "gd-geo-legend-toggle--checked": checked,
28
22
  "gd-geo-legend-toggle--disabled": disabled,
29
23
  });
30
- return (_jsxs("button", { type: "button", id: id, className: toggleClassName, role: "switch", "aria-checked": checked, "aria-label": ariaLabel, disabled: disabled, onClick: handleChange, onKeyDown: handleKeyDown, "data-testid": `gd-geo-legend-toggle-${id}`, children: [
24
+ return (_jsxs("button", { type: "button", id: id, className: toggleClassName, role: "switch", "aria-checked": checked, "aria-label": ariaLabel, disabled: disabled, onClick: handleChange, "data-testid": `gd-geo-legend-toggle-${id}`, children: [
31
25
  _jsx("span", { className: "gd-geo-legend-toggle__track" }), _jsx("span", { className: "gd-geo-legend-toggle__thumb" })
32
26
  ] }));
33
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"LayerToggleSwitch.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LayerToggleSwitch.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAEhC,OAAO,EAAyC,IAAI,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,MAAM,YAAY,CAAC;AAkC5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,EAC7D,EAAE,EACF,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,KAAK,GACM,EAAgB;IACtC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IAAA,CACJ,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;YAC5D,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IAAA,CACJ,CAAC;IAEF,MAAM,eAAe,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC/C,+BAA+B,EAAE,OAAO;QACxC,gCAAgC,EAAE,QAAQ;KAC7C,CAAC,CAAC;IAEH,OAAO,CACH,kBACI,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAC,QAAQ,kBACC,OAAO,gBACT,SAAS,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,aAAa,iBACX,wBAAwB,EAAE,EAAE;YAEzC,eAAM,SAAS,EAAC,6BAA6B,GAAG,EAChD,eAAM,SAAS,EAAC,6BAA6B,GAAG;YAC3C,CACZ,CAAC;AAAA,CACL,CAAC,CAAC"}
1
+ {"version":3,"file":"LayerToggleSwitch.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LayerToggleSwitch.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,IAAI,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAE,MAAM,YAAY,CAAC;AAkC5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,EAC7D,EAAE,EACF,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,KAAK,GACM,EAAgB;IACtC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IAAA,CACJ,CAAC;IAEF,MAAM,eAAe,GAAG,EAAE,CAAC,sBAAsB,EAAE;QAC/C,+BAA+B,EAAE,OAAO;QACxC,gCAAgC,EAAE,QAAQ;KAC7C,CAAC,CAAC;IAEH,OAAO,CACH,kBACI,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAC,QAAQ,kBACC,OAAO,gBACT,SAAS,EACrB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,YAAY,iBACR,wBAAwB,EAAE,EAAE;YAEzC,eAAM,SAAS,EAAC,6BAA6B,GAAG,EAChD,eAAM,SAAS,EAAC,6BAA6B,GAAG;YAC3C,CACZ,CAAC;AAAA,CACL,CAAC,CAAC"}
@@ -14,16 +14,10 @@ export interface ILegendGroupColorProps {
14
14
  * Enables toggle behavior for segment filtering.
15
15
  */
16
16
  onItemClick?: (uri: string) => void;
17
+ /**
18
+ * Enables enhanced keyboard semantics for interactive color list.
19
+ */
20
+ enableGeoChartA11yImprovements?: boolean;
17
21
  }
18
- /**
19
- * Legend group displaying categorical color items.
20
- *
21
- * @remarks
22
- * Renders a list of color category items with colored swatches and labels.
23
- * Used for segment/category-based coloring in both pushpin and area layers.
24
- * Supports click-to-toggle for segment filtering.
25
- *
26
- * @internal
27
- */
28
22
  export declare const LegendGroupColor: import("react").NamedExoticComponent<ILegendGroupColorProps>;
29
23
  //# sourceMappingURL=LegendGroupColor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegendGroupColor.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColor.tsx"],"names":[],"mappings":"AAMA,OAAO,EAEH,KAAK,YAAY,EAEpB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;IAEpB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAyDD;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,8DAoB3B,CAAC"}
1
+ {"version":3,"file":"LegendGroupColor.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColor.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAEH,KAAK,YAAY,EAEpB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;IAEpB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC;;OAEG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC5C;AAkPD,eAAO,MAAM,gBAAgB,8DAU3B,CAAC"}
@@ -1,13 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2025-2026 GoodData Corporation
3
- import { memo } from "react";
3
+ import { memo, useCallback, useEffect, useId, useMemo, useRef, useState, } from "react";
4
4
  import cx from "classnames";
5
+ import { useAutoupdateRef } from "@gooddata/sdk-ui";
6
+ import { makeLinearKeyboardNavigation, useIdPrefixed } from "@gooddata/sdk-ui-kit";
5
7
  import { isLegendColorCategoryItem, } from "../../types/legend/model.js";
6
- /**
7
- * Renders a single color category item with swatch and label.
8
- * Supports click to toggle and visual disabled state.
9
- */
10
- function ColorCategoryItem({ item, onClick }) {
8
+ function EnhancedColorCategoryItem({ item, id, isActive, isInteractive, onClick, }) {
9
+ const itemClassName = cx("gd-geo-multi-layer-legend__color-item", {
10
+ "gd-geo-multi-layer-legend__color-item--clickable": isInteractive,
11
+ "gd-geo-multi-layer-legend__color-item--disabled": !item.isVisible,
12
+ "gd-geo-multi-layer-legend__color-item--active": isActive,
13
+ });
14
+ return (_jsxs("div", { id: id, className: itemClassName, role: "option", "aria-selected": isInteractive ? item.isVisible : undefined, "aria-label": item.label, onClick: isInteractive ? onClick : undefined, "data-testid": `gd-geo-legend-color-item-${item.uri}`, children: [
15
+ _jsx("span", { className: "gd-geo-multi-layer-legend__color-swatch", style: { backgroundColor: item.color } }), _jsx("span", { className: "gd-geo-multi-layer-legend__color-label", children: item.label }), item.count !== undefined && (_jsxs("span", { className: "gd-geo-multi-layer-legend__color-count", children: ["(", item.count, ")"] }))] }));
16
+ }
17
+ function LegacyColorCategoryItem({ item, onClick }) {
11
18
  const handleClick = () => {
12
19
  onClick?.(item.uri);
13
20
  };
@@ -25,6 +32,9 @@ function ColorCategoryItem({ item, onClick }) {
25
32
  return (_jsxs("div", { className: itemClassName, role: isClickable ? "button" : undefined, tabIndex: isClickable ? 0 : undefined, onClick: isClickable ? handleClick : undefined, onKeyDown: isClickable ? handleKeyDown : undefined, "aria-pressed": isClickable ? item.isVisible : undefined, "aria-label": `Category: ${item.label}, Color: ${item.color}${item.isVisible ? "" : " (hidden)"}`, "data-testid": `gd-geo-legend-color-item-${item.uri}`, children: [
26
33
  _jsx("span", { className: "gd-geo-multi-layer-legend__color-swatch", style: { backgroundColor: item.color } }), _jsx("span", { className: "gd-geo-multi-layer-legend__color-label", title: item.label, children: item.label }), item.count !== undefined && (_jsxs("span", { className: "gd-geo-multi-layer-legend__color-count", children: ["(", item.count, ")"] }))] }));
27
34
  }
35
+ function makeItemId(prefix, index) {
36
+ return `${prefix}-item-${index}`;
37
+ }
28
38
  /**
29
39
  * Legend group displaying categorical color items.
30
40
  *
@@ -35,9 +45,74 @@ function ColorCategoryItem({ item, onClick }) {
35
45
  *
36
46
  * @internal
37
47
  */
38
- export const LegendGroupColor = memo(function LegendGroupColor({ group, onItemClick, }) {
48
+ function LegacyLegendGroupColor({ group, onItemClick, }) {
39
49
  const colorItems = group.items.filter(isLegendColorCategoryItem);
40
- return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--color", children: [group.title ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-title", title: group.title, children: group.title })) : null, _jsx("div", { className: "gd-geo-multi-layer-legend__color-list", children: colorItems.map((item) => (_jsx(ColorCategoryItem, { item: item, onClick: onItemClick }, item.uri))) })
50
+ return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--color", children: [group.title ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-title", title: group.title, children: group.title })) : null, _jsx("div", { className: "gd-geo-multi-layer-legend__color-list", children: colorItems.map((item) => (_jsx(LegacyColorCategoryItem, { item: item, onClick: onItemClick }, item.uri))) })
41
51
  ] }));
52
+ }
53
+ function EnhancedLegendGroupColor({ group, onItemClick, }) {
54
+ const colorItems = group.items.filter(isLegendColorCategoryItem);
55
+ const isInteractive = Boolean(onItemClick);
56
+ const titleId = useId();
57
+ const idPrefix = useIdPrefixed("geo-color-list");
58
+ const [activeIndex, setActiveIndex] = useState(0);
59
+ const listRef = useRef(null);
60
+ const depsRef = useAutoupdateRef({
61
+ activeIndex,
62
+ onItemClick,
63
+ colorItems,
64
+ });
65
+ // Clamp activeIndex if items shrink
66
+ const clampedIndex = Math.min(activeIndex, Math.max(colorItems.length - 1, 0));
67
+ const ensureActiveItemVisible = useCallback(() => {
68
+ if (!isInteractive) {
69
+ return;
70
+ }
71
+ const listElement = listRef.current;
72
+ if (!listElement) {
73
+ return;
74
+ }
75
+ if (document.activeElement !== listElement) {
76
+ return;
77
+ }
78
+ const activeItemId = makeItemId(idPrefix, clampedIndex);
79
+ const activeItemElement = listElement.querySelector(`#${CSS.escape(activeItemId)}`);
80
+ activeItemElement?.scrollIntoView?.({ block: "nearest" });
81
+ }, [clampedIndex, idPrefix, isInteractive]);
82
+ const handleKeyDown = useMemo(() => makeLinearKeyboardNavigation({
83
+ onFocusNext: () => {
84
+ setActiveIndex((prev) => (prev + 1 < depsRef.current.colorItems.length ? prev + 1 : 0));
85
+ },
86
+ onFocusPrevious: () => {
87
+ setActiveIndex((prev) => prev - 1 >= 0 ? prev - 1 : depsRef.current.colorItems.length - 1);
88
+ },
89
+ onFocusFirst: () => {
90
+ setActiveIndex(0);
91
+ },
92
+ onFocusLast: () => {
93
+ setActiveIndex(depsRef.current.colorItems.length - 1);
94
+ },
95
+ onSelect: () => {
96
+ const { onItemClick, colorItems, activeIndex } = depsRef.current;
97
+ const activeItem = colorItems[activeIndex];
98
+ if (activeItem) {
99
+ onItemClick?.(activeItem.uri);
100
+ }
101
+ },
102
+ }), [depsRef]);
103
+ useEffect(() => {
104
+ ensureActiveItemVisible();
105
+ }, [ensureActiveItemVisible]);
106
+ const handleListFocus = useCallback(() => {
107
+ ensureActiveItemVisible();
108
+ }, [ensureActiveItemVisible]);
109
+ return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--color", role: "group", "aria-labelledby": group.title ? titleId : undefined, children: [group.title ? (_jsx("div", { id: titleId, className: "gd-geo-multi-layer-legend__group-title", children: group.title })) : null, _jsx("div", { ref: listRef, className: "gd-geo-multi-layer-legend__color-list", role: isInteractive ? "listbox" : "list", "aria-label": group.title, "aria-multiselectable": isInteractive ? true : undefined, "aria-activedescendant": isInteractive && colorItems.length > 0 ? makeItemId(idPrefix, clampedIndex) : undefined, tabIndex: isInteractive ? 0 : undefined, onKeyDown: isInteractive ? handleKeyDown : undefined, onFocus: isInteractive ? handleListFocus : undefined, children: colorItems.map((item, index) => (_jsx(EnhancedColorCategoryItem, { item: item, id: makeItemId(idPrefix, index), isActive: isInteractive ? index === clampedIndex : false, isInteractive: isInteractive, onClick: () => onItemClick?.(item.uri) }, item.uri))) })
110
+ ] }));
111
+ }
112
+ export const LegendGroupColor = memo(function LegendGroupColor({ group, onItemClick, enableGeoChartA11yImprovements = false, }) {
113
+ if (!enableGeoChartA11yImprovements) {
114
+ return _jsx(LegacyLegendGroupColor, { group: group, onItemClick: onItemClick });
115
+ }
116
+ return _jsx(EnhancedLegendGroupColor, { group: group, onItemClick: onItemClick });
42
117
  });
43
118
  //# sourceMappingURL=LegendGroupColor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegendGroupColor.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColor.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAyC,IAAI,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAGH,yBAAyB,GAC5B,MAAM,6BAA6B,CAAC;AA4BrC;;;GAGG;AACH,SAAS,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAA2B,EAAgB;IACjF,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAAA,CACvB,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAE,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IAAA,CACJ,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,EAAE,CAAC,uCAAuC,EAAE;QAC9D,kDAAkD,EAAE,WAAW;QAC/D,iDAAiD,EAAE,CAAC,IAAI,CAAC,SAAS;KACrE,CAAC,CAAC;IAEH,OAAO,CACH,eACI,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACxC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACrC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAC9C,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,kBACpC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,gBAC1C,aAAa,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,iBAClF,4BAA4B,IAAI,CAAC,GAAG,EAAE;YAEnD,eACI,SAAS,EAAC,yCAAyC,EACnD,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,GACxC,EACF,eAAM,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,YACrE,IAAI,CAAC,KAAK,GACR,EACN,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CACzB,gBAAM,SAAS,EAAC,wCAAwC,kBAAG,IAAI,CAAC,KAAK,SAAS,CACjF,IACC,CACT,CAAC;AAAA,CACL;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,gBAAgB,CAAC,EAC3D,KAAK,EACL,WAAW,GACU,EAAgB;IACrC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAEjE,OAAO,CACH,eAAK,SAAS,EAAC,0EAA0E,aACpF,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,YACrE,KAAK,CAAC,KAAK,GACV,CACT,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,uCAAuC,YACjD,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACtB,KAAC,iBAAiB,IAAgB,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,IAA1C,IAAI,CAAC,GAAG,CAAsC,CACzE,CAAC,GACA;YACJ,CACT,CAAC;AAAA,CACL,CAAC,CAAC"}
1
+ {"version":3,"file":"LegendGroupColor.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColor.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type LegendMessageFormatter } from "./legendMessages.js";
1
2
  import { type ILegendGroup } from "../../types/legend/model.js";
2
3
  /**
3
4
  * Props for LegendGroupColorScale component.
@@ -9,6 +10,18 @@ export interface ILegendGroupColorScaleProps {
9
10
  * Legend group with color scale item.
10
11
  */
11
12
  group: ILegendGroup;
13
+ /**
14
+ * Enables enhanced a11y semantics for the color scale group.
15
+ */
16
+ enableGeoChartA11yImprovements?: boolean;
17
+ /**
18
+ * Optional formatter for accessibility labels/messages.
19
+ */
20
+ formatMessage?: LegendMessageFormatter;
21
+ /**
22
+ * Whether the color scale can be reached via keyboard.
23
+ */
24
+ isFocusable?: boolean;
12
25
  }
13
26
  /**
14
27
  * Legend group displaying a numeric color scale (gradient).
@@ -1 +1 @@
1
- {"version":3,"file":"LegendGroupColorScale.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColorScale.tsx"],"names":[],"mappings":"AAIA,OAAO,EAEH,KAAK,YAAY,EAEpB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;CACvB;AA4BD;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,mEAehC,CAAC"}
1
+ {"version":3,"file":"LegendGroupColorScale.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColorScale.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAEH,KAAK,YAAY,EAEpB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,2BAA2B;IACxC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;IAEpB;;OAEG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAEzC;;OAEG;IACH,aAAa,CAAC,EAAE,sBAAsB,CAAC;IAEvC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAqDD;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,mEA2ChC,CAAC"}
@@ -1,20 +1,25 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2025-2026 GoodData Corporation
3
3
  import { memo } from "react";
4
+ import { LegendGroupContainer } from "./LegendGroupContainer.js";
4
5
  import { isLegendColorScaleItem, } from "../../types/legend/model.js";
5
6
  /**
6
7
  * Renders the min-max color scale with gradient.
7
8
  */
8
- function ColorScaleItem({ item }) {
9
+ function ColorScaleItem({ item, enableGeoChartA11yImprovements, formatMessage, }) {
9
10
  const hasCustomColors = Boolean(item.minColor) && Boolean(item.maxColor);
10
11
  const barStyle = hasCustomColors
11
12
  ? {
12
13
  background: `linear-gradient(to right, ${item.minColor}, ${item.maxColor})`,
13
14
  }
14
15
  : undefined;
16
+ const scaleLabel = formatMessage?.("geochart.legend.colorScale.label", {
17
+ min: item.minLabel,
18
+ max: item.maxLabel,
19
+ }) ?? `Color scale from ${item.minLabel} to ${item.maxLabel}`;
15
20
  return (_jsxs("div", { className: "gd-geo-multi-layer-legend__color-scale", children: [
16
- _jsx("div", { className: "gd-geo-multi-layer-legend__color-scale-bar", style: barStyle }), _jsxs("div", { className: "gd-geo-multi-layer-legend__color-scale-labels", children: [
17
- _jsx("span", { className: "gd-geo-multi-layer-legend__color-scale-min", title: item.minLabel, children: item.minLabel }), _jsx("span", { className: "gd-geo-multi-layer-legend__color-scale-max", title: item.maxLabel, children: item.maxLabel })
21
+ _jsx("div", { className: "gd-geo-multi-layer-legend__color-scale-bar", style: barStyle, role: enableGeoChartA11yImprovements ? "img" : undefined, "aria-label": enableGeoChartA11yImprovements ? scaleLabel : undefined }), _jsxs("div", { className: "gd-geo-multi-layer-legend__color-scale-labels", children: [
22
+ _jsx("span", { className: "gd-geo-multi-layer-legend__color-scale-min", title: enableGeoChartA11yImprovements ? undefined : item.minLabel, children: item.minLabel }), _jsx("span", { className: "gd-geo-multi-layer-legend__color-scale-max", title: enableGeoChartA11yImprovements ? undefined : item.maxLabel, children: item.maxLabel })
18
23
  ] })
19
24
  ] }));
20
25
  }
@@ -28,8 +33,11 @@ function ColorScaleItem({ item }) {
28
33
  *
29
34
  * @internal
30
35
  */
31
- export const LegendGroupColorScale = memo(function LegendGroupColorScale({ group, }) {
36
+ export const LegendGroupColorScale = memo(function LegendGroupColorScale({ group, enableGeoChartA11yImprovements = false, formatMessage, isFocusable = false, }) {
32
37
  const scaleItem = group.items.find(isLegendColorScaleItem);
33
- return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--color-scale", children: [group.title ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-title", title: group.title, children: group.title })) : null, scaleItem ? _jsx(ColorScaleItem, { item: scaleItem }) : null] }));
38
+ if (!enableGeoChartA11yImprovements) {
39
+ return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--color-scale", children: [group.title ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-title", title: group.title, children: group.title })) : null, scaleItem ? (_jsx(ColorScaleItem, { item: scaleItem, enableGeoChartA11yImprovements: enableGeoChartA11yImprovements, formatMessage: formatMessage })) : null] }));
40
+ }
41
+ return (_jsx(LegendGroupContainer, { variantClassName: "gd-geo-multi-layer-legend__group--color-scale", title: group.title, isFocusable: isFocusable, useFocusTarget: true, children: scaleItem ? (_jsx(ColorScaleItem, { item: scaleItem, enableGeoChartA11yImprovements: enableGeoChartA11yImprovements, formatMessage: formatMessage })) : null }));
34
42
  });
35
43
  //# sourceMappingURL=LegendGroupColorScale.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegendGroupColorScale.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColorScale.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,IAAI,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,EAGH,sBAAsB,GACzB,MAAM,6BAA6B,CAAC;AAcrC;;GAEG;AACH,SAAS,cAAc,CAAC,EAAE,IAAI,EAAmC,EAAgB;IAC7E,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,eAAe;QAC5B,CAAC,CAAC;YACI,UAAU,EAAE,6BAA6B,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,GAAG;SAC9E;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,CACH,eAAK,SAAS,EAAC,wCAAwC;YACnD,cAAK,SAAS,EAAC,4CAA4C,EAAC,KAAK,EAAE,QAAQ,GAAI,EAC/E,eAAK,SAAS,EAAC,+CAA+C;oBAC1D,eAAM,SAAS,EAAC,4CAA4C,EAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,YAC5E,IAAI,CAAC,QAAQ,GACX,EACP,eAAM,SAAS,EAAC,4CAA4C,EAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,YAC5E,IAAI,CAAC,QAAQ,GACX;oBACL;YACJ,CACT,CAAC;AAAA,CACL;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,qBAAqB,CAAC,EACrE,KAAK,GACqB,EAAgB;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAE3D,OAAO,CACH,eAAK,SAAS,EAAC,gFAAgF,aAC1F,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,YACrE,KAAK,CAAC,KAAK,GACV,CACT,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,KAAC,cAAc,IAAC,IAAI,EAAE,SAAS,GAAI,CAAC,CAAC,CAAC,IAAI,IACrD,CACT,CAAC;AAAA,CACL,CAAC,CAAC"}
1
+ {"version":3,"file":"LegendGroupColorScale.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupColorScale.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ReactNode } from "react";
2
+ interface ILegendGroupContainerProps {
3
+ variantClassName: string;
4
+ title?: string;
5
+ isFocusable?: boolean;
6
+ useFocusTarget?: boolean;
7
+ children: ReactNode;
8
+ }
9
+ /**
10
+ * Shared semantic wrapper for enhanced legend groups.
11
+ *
12
+ * Keeps role/label/focusability behavior consistent across group variants.
13
+ */
14
+ export declare const LegendGroupContainer: import("react").NamedExoticComponent<ILegendGroupContainerProps>;
15
+ export {};
16
+ //# sourceMappingURL=LegendGroupContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendGroupContainer.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupContainer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAqB,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AAIvE,UAAU,0BAA0B;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACvB;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,kEAuC/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // (C) 2025-2026 GoodData Corporation
3
+ import { memo, useId } from "react";
4
+ import cx from "classnames";
5
+ /**
6
+ * Shared semantic wrapper for enhanced legend groups.
7
+ *
8
+ * Keeps role/label/focusability behavior consistent across group variants.
9
+ */
10
+ export const LegendGroupContainer = memo(function LegendGroupContainer({ variantClassName, title, isFocusable = false, useFocusTarget = false, children, }) {
11
+ const titleId = useId();
12
+ const groupClassName = cx("gd-geo-multi-layer-legend__group", variantClassName, isFocusable && "gd-geo-multi-layer-legend__group--focusable");
13
+ const content = (_jsxs(_Fragment, { children: [title ? (_jsx("div", { id: titleId, className: "gd-geo-multi-layer-legend__group-title", children: title })) : null, children] }));
14
+ return (_jsx("div", { className: groupClassName, role: "group", "aria-labelledby": title ? titleId : undefined, tabIndex: isFocusable ? 0 : undefined, children: useFocusTarget ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-focus-target", children: content })) : (content) }));
15
+ });
16
+ //# sourceMappingURL=LegendGroupContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegendGroupContainer.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupContainer.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqC,IAAI,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEvE,OAAO,EAAE,MAAM,YAAY,CAAC;AAU5B;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,oBAAoB,CAAC,EACnE,gBAAgB,EAChB,KAAK,EACL,WAAW,GAAG,KAAK,EACnB,cAAc,GAAG,KAAK,EACtB,QAAQ,GACiB,EAAgB;IACzC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;IACxB,MAAM,cAAc,GAAG,EAAE,CACrB,kCAAkC,EAClC,gBAAgB,EAChB,WAAW,IAAI,6CAA6C,CAC/D,CAAC;IAEF,MAAM,OAAO,GAAG,CACZ,8BACK,KAAK,CAAC,CAAC,CAAC,CACL,cAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,wCAAwC,YAC/D,KAAK,GACJ,CACT,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,IACV,CACN,CAAC;IAEF,OAAO,CACH,cACI,SAAS,EAAE,cAAc,EACzB,IAAI,EAAC,OAAO,qBACK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC5C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,YAEpC,cAAc,CAAC,CAAC,CAAC,CACd,cAAK,SAAS,EAAC,+CAA+C,YAAE,OAAO,GAAO,CACjF,CAAC,CAAC,CAAC,CACA,OAAO,CACV,GACC,CACT,CAAC;AAAA,CACL,CAAC,CAAC"}
@@ -9,6 +9,14 @@ export interface ILegendGroupSizeProps {
9
9
  * Legend group with size anchor items.
10
10
  */
11
11
  group: ILegendGroup;
12
+ /**
13
+ * Enables enhanced a11y semantics for the size list.
14
+ */
15
+ enableGeoChartA11yImprovements?: boolean;
16
+ /**
17
+ * Whether the size list can be reached via keyboard.
18
+ */
19
+ isFocusable?: boolean;
12
20
  }
13
21
  /**
14
22
  * Legend group displaying size anchors for pushpin layers.
@@ -1 +1 @@
1
- {"version":3,"file":"LegendGroupSize.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupSize.tsx"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,YAAY,EAGpB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;CACvB;AAoBD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,6DAiB1B,CAAC"}
1
+ {"version":3,"file":"LegendGroupSize.d.ts","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupSize.tsx"],"names":[],"mappings":"AAKA,OAAO,EACH,KAAK,YAAY,EAGpB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IAClC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;IAEpB;;OAEG;IACH,8BAA8B,CAAC,EAAE,OAAO,CAAC;IAEzC;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAsBD;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,6DAmD1B,CAAC"}
@@ -1,17 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  // (C) 2025-2026 GoodData Corporation
3
3
  import { memo } from "react";
4
+ import { LegendGroupContainer } from "./LegendGroupContainer.js";
4
5
  import { isLegendSizeAnchorItem, } from "../../types/legend/model.js";
5
6
  /**
6
7
  * Renders a single size anchor (circle) with its label.
7
8
  */
8
9
  function SizeAnchorItem({ item }) {
9
- return (_jsxs("div", { className: "gd-geo-multi-layer-legend__size-anchor", "aria-label": `Size: ${item.label}`, children: [
10
- _jsx("span", { className: "gd-geo-multi-layer-legend__size-circle", style: {
11
- width: item.sizePx,
12
- height: item.sizePx,
13
- } }), _jsx("span", { className: "gd-geo-multi-layer-legend__size-label", children: item.label })
14
- ] }));
10
+ return (_jsx("div", { className: "gd-geo-multi-layer-legend__size-anchor-wrapper", role: "listitem", children: _jsxs("div", { className: "gd-geo-multi-layer-legend__size-anchor", children: [
11
+ _jsx("span", { className: "gd-geo-multi-layer-legend__size-circle", style: {
12
+ width: item.sizePx,
13
+ height: item.sizePx,
14
+ } }), _jsx("span", { className: "gd-geo-multi-layer-legend__size-label", children: item.label })
15
+ ] }) }));
15
16
  }
16
17
  /**
17
18
  * Legend group displaying size anchors for pushpin layers.
@@ -23,9 +24,17 @@ function SizeAnchorItem({ item }) {
23
24
  *
24
25
  * @internal
25
26
  */
26
- export const LegendGroupSize = memo(function LegendGroupSize({ group }) {
27
+ export const LegendGroupSize = memo(function LegendGroupSize({ group, enableGeoChartA11yImprovements = false, isFocusable = false, }) {
27
28
  const sizeItems = group.items.filter(isLegendSizeAnchorItem);
28
- return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--size", children: [group.title ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-title", title: group.title, children: group.title })) : null, _jsx("div", { className: "gd-geo-multi-layer-legend__size-list", children: sizeItems.map((item, index) => (_jsx(SizeAnchorItem, { item: item }, index))) })
29
- ] }));
29
+ if (!enableGeoChartA11yImprovements) {
30
+ return (_jsxs("div", { className: "gd-geo-multi-layer-legend__group gd-geo-multi-layer-legend__group--size", children: [group.title ? (_jsx("div", { className: "gd-geo-multi-layer-legend__group-title", title: group.title, children: group.title })) : null, _jsx("div", { className: "gd-geo-multi-layer-legend__size-list", children: sizeItems.map((item, index) => (_jsxs("div", { className: "gd-geo-multi-layer-legend__size-anchor", "aria-label": `Size: ${item.label}`, children: [
31
+ _jsx("span", { className: "gd-geo-multi-layer-legend__size-circle", style: {
32
+ width: item.sizePx,
33
+ height: item.sizePx,
34
+ } }), _jsx("span", { className: "gd-geo-multi-layer-legend__size-label", children: item.label })
35
+ ] }, index))) })
36
+ ] }));
37
+ }
38
+ return (_jsx(LegendGroupContainer, { variantClassName: "gd-geo-multi-layer-legend__group--size", title: group.title, isFocusable: isFocusable, useFocusTarget: true, children: _jsx("div", { className: "gd-geo-multi-layer-legend__size-list", role: "list", "aria-label": group.title, children: sizeItems.map((item, index) => (_jsx(SizeAnchorItem, { item: item }, index))) }) }));
30
39
  });
31
40
  //# sourceMappingURL=LegendGroupSize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LegendGroupSize.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupSize.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,IAAI,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,EAGH,sBAAsB,GACzB,MAAM,6BAA6B,CAAC;AAcrC;;GAEG;AACH,SAAS,cAAc,CAAC,EAAE,IAAI,EAAmC,EAAgB;IAC7E,OAAO,CACH,eAAK,SAAS,EAAC,wCAAwC,gBAAa,SAAS,IAAI,CAAC,KAAK,EAAE;YACrF,eACI,SAAS,EAAC,wCAAwC,EAClD,KAAK,EAAE;oBACH,KAAK,EAAE,IAAI,CAAC,MAAM;oBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACtB,GACH,EACF,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,CAAC,KAAK,GAAQ;YACzE,CACT,CAAC;AAAA,CACL;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,eAAe,CAAC,EAAE,KAAK,EAAyB,EAAgB;IACzG,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE7D,OAAO,CACH,eAAK,SAAS,EAAC,yEAAyE,aACnF,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,YACrE,KAAK,CAAC,KAAK,GACV,CACT,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,sCAAsC,YAChD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,cAAc,IAAa,IAAI,EAAE,IAAI,IAAjB,KAAK,CAAgB,CAC7C,CAAC,GACA;YACJ,CACT,CAAC;AAAA,CACL,CAAC,CAAC"}
1
+ {"version":3,"file":"LegendGroupSize.js","sourceRoot":"","sources":["../../../../src/next/components/multiLayerLegend/LegendGroupSize.tsx"],"names":[],"mappings":";AAAA,qCAAqC;AAErC,OAAO,EAAqB,IAAI,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAGH,sBAAsB,GACzB,MAAM,6BAA6B,CAAC;AAwBrC;;GAEG;AACH,SAAS,cAAc,CAAC,EAAE,IAAI,EAAmC,EAAgB;IAC7E,OAAO,CACH,cAAK,SAAS,EAAC,gDAAgD,EAAC,IAAI,EAAC,UAAU,YAC3E,eAAK,SAAS,EAAC,wCAAwC;gBACnD,eACI,SAAS,EAAC,wCAAwC,EAClD,KAAK,EAAE;wBACH,KAAK,EAAE,IAAI,CAAC,MAAM;wBAClB,MAAM,EAAE,IAAI,CAAC,MAAM;qBACtB,GACH,EACF,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,CAAC,KAAK,GAAQ;gBACzE,GACJ,CACT,CAAC;AAAA,CACL;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,eAAe,CAAC,EACzD,KAAK,EACL,8BAA8B,GAAG,KAAK,EACtC,WAAW,GAAG,KAAK,GACC,EAAgB;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAE7D,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAClC,OAAO,CACH,eAAK,SAAS,EAAC,yEAAyE,aACnF,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,wCAAwC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,YACrE,KAAK,CAAC,KAAK,GACV,CACT,CAAC,CAAC,CAAC,IAAI,EACR,cAAK,SAAS,EAAC,sCAAsC,YAChD,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,eAEI,SAAS,EAAC,wCAAwC,gBACtC,SAAS,IAAI,CAAC,KAAK,EAAE;4BAEjC,eACI,SAAS,EAAC,wCAAwC,EAClD,KAAK,EAAE;oCACH,KAAK,EAAE,IAAI,CAAC,MAAM;oCAClB,MAAM,EAAE,IAAI,CAAC,MAAM;iCACtB,GACH,EACF,eAAM,SAAS,EAAC,uCAAuC,YAAE,IAAI,CAAC,KAAK,GAAQ;6BAXtE,KAAK,CAYR,CACT,CAAC,GACA;gBACJ,CACT,CAAC;IACN,CAAC;IAED,OAAO,CACH,KAAC,oBAAoB,IACjB,gBAAgB,EAAC,wCAAwC,EACzD,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,WAAW,EACxB,cAAc,kBAEd,cAAK,SAAS,EAAC,sCAAsC,EAAC,IAAI,EAAC,MAAM,gBAAa,KAAK,CAAC,KAAK,YACpF,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,cAAc,IAAa,IAAI,EAAE,IAAI,IAAjB,KAAK,CAAgB,CAC7C,CAAC,GACA,GACa,CAC1B,CAAC;AAAA,CACL,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { PositionType } from "@gooddata/sdk-ui-vis-commons";
2
+ import { type LegendMessageFormatter } from "./legendMessages.js";
2
3
  import { type ILegendModel } from "../../types/legend/model.js";
3
4
  /**
4
5
  * Props for MultiLayerLegendPanel component.
@@ -41,6 +42,18 @@ export interface IMultiLayerLegendPanelProps {
41
42
  * @param uri - The URI of the clicked item
42
43
  */
43
44
  onItemClick?: (layerId: string, uri: string) => void;
45
+ /**
46
+ * Enables enhanced a11y semantics and live announcements for legend interactions.
47
+ */
48
+ enableGeoChartA11yImprovements?: boolean;
49
+ /**
50
+ * Optional formatter for accessibility messages.
51
+ */
52
+ formatMessage?: LegendMessageFormatter;
53
+ /**
54
+ * Optional ref callback to expose panel root DOM element.
55
+ */
56
+ setPanelElementRef?: (element: HTMLDivElement | null) => void;
44
57
  }
45
58
  export declare const MultiLayerLegendPanel: import("react").NamedExoticComponent<IMultiLayerLegendPanelProps>;
46
59
  //# sourceMappingURL=MultiLayerLegendPanel.d.ts.map