@evergis/react 3.1.39 → 3.1.41

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.
@@ -8,5 +8,7 @@ export type ChartDataProps = {
8
8
  items: FilterItem[] | PieChartData[] | BarChartData[];
9
9
  layerInfo: LayerInfo | null;
10
10
  attributeName: string | null;
11
+ attributeUnits: string | null;
12
+ dataSourceName: string | null;
11
13
  color: string | null;
12
14
  };
@@ -1,4 +1,4 @@
1
- export declare const useExportPdf: (ids: string[]) => {
1
+ export declare const useExportPdf: (id: string, margin?: number) => {
2
2
  loading: boolean;
3
3
  onExport: () => Promise<void>;
4
4
  };
@@ -19,6 +19,7 @@ export interface ConfigRelatedDataSource {
19
19
  dataSourceName: string;
20
20
  attributeName: string;
21
21
  attributeTitle: string;
22
+ attributeUnits?: string;
22
23
  attributeColor?: string;
23
24
  alias?: string;
24
25
  chartAxis?: string;
@@ -46,6 +47,7 @@ export interface ConfigOptions {
46
47
  label?: string;
47
48
  withPadding?: boolean;
48
49
  withDivider?: boolean;
50
+ dotSnapping?: boolean;
49
51
  tagView?: boolean;
50
52
  simple?: boolean;
51
53
  separator?: string;
@@ -0,0 +1,2 @@
1
+ import { WidgetType } from '../types';
2
+ export declare const getRootElementId: (type?: WidgetType) => string;
@@ -14,6 +14,7 @@ export * from './formatElementValue';
14
14
  export * from './getAttributeByName';
15
15
  export * from './getAttributesConfiguration';
16
16
  export * from './getAttributeValue';
17
+ export * from './getChartAxes';
17
18
  export * from './getChartFilterName';
18
19
  export * from './getChartMarkers';
19
20
  export * from './getConfigFilter';
@@ -44,6 +45,7 @@ export * from './getSlideshowImages';
44
45
  export * from './getSvgUrl';
45
46
  export * from './getTotalFromAttributes';
46
47
  export * from './getTotalFromRelatedFeatures';
48
+ export * from './getRootElementId';
47
49
  export * from './isEmptyElementValue';
48
50
  export * from './isEmptyValue';
49
51
  export * from './isHiddenEmptyValue';
package/dist/index.js CHANGED
@@ -14,10 +14,10 @@ var enUS = require('date-fns/locale/en-US');
14
14
  var lodash = require('lodash');
15
15
  var signalr = require('@microsoft/signalr');
16
16
  var findAnd = require('find-and');
17
- var MapboxDraw = require('@mapbox/mapbox-gl-draw');
18
- var turf = require('@turf/turf');
19
17
  var jspdf = require('jspdf');
20
18
  var html2canvas = require('html2canvas');
19
+ var MapboxDraw = require('@mapbox/mapbox-gl-draw');
20
+ var turf = require('@turf/turf');
21
21
  var MapGL = require('react-map-gl/mapbox');
22
22
  require('@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css');
23
23
  require('mapbox-gl/dist/mapbox-gl.css');
@@ -5414,6 +5414,8 @@ const getAttributeValue = (element, attributes) => {
5414
5414
  return maxLength && maxLength < value.length ? (jsxRuntime.jsx(TextTrim, { maxLength: maxLength, expandable: expandable, lineBreak: lineBreak, children: value })) : (value);
5415
5415
  };
5416
5416
 
5417
+ const getChartAxes = (chartElement) => chartElement?.options?.relatedDataSources?.filter(({ chartAxis }) => chartAxis === "y");
5418
+
5417
5419
  const getChartFilterName = (relatedDataSources) => {
5418
5420
  const relatedAttributes = relatedDataSources || [];
5419
5421
  const axes = relatedAttributes.filter(({ chartAxis }) => chartAxis === "y");
@@ -6007,7 +6009,7 @@ const PagesContainer = React.memo(({ type = exports.WidgetType.Dashboard, noBord
6007
6009
  setSelectedTabId,
6008
6010
  type,
6009
6011
  ]);
6010
- return (jsxRuntime.jsxs("div", { id: "dashboard-root", style: { width }, children: [jsxRuntime.jsx(ExpandableTitle, { elementConfig: config, type: type, renderElement: renderElement }), jsxRuntime.jsx(Container, { isColumn: isColumn, isMain: true, noBorders: noBorders, children: jsxRuntime.jsx(ContainerChildren, { items: filteredChildren, isMain: true, renderElement: renderElement }) })] }));
6012
+ return (jsxRuntime.jsx(Container, { id: getRootElementId(type), style: { width }, isMain: true, isColumn: isColumn, noBorders: noBorders, children: jsxRuntime.jsx(ContainerChildren, { items: filteredChildren, isMain: true, renderElement: renderElement }) }));
6011
6013
  });
6012
6014
 
6013
6015
  const TwoColumnsInnerContainer = React.memo(({ renderElement }) => {
@@ -6575,10 +6577,12 @@ const LayersContainer = React.memo(({ type, elementConfig, renderElement }) => {
6575
6577
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsxRuntime.jsx(LayersContainerWrapper, { style: style, children: jsxRuntime.jsx(LayerTree, { layers: layers, onlyMainTools: true }) }))] }));
6576
6578
  });
6577
6579
 
6578
- const ExportPdfContainer = React.memo(({ elementConfig }) => {
6579
- const { loading, onExport } = useExportPdf(["dashboard-root"]);
6580
- const { style } = elementConfig || {};
6581
- return (jsxRuntime.jsx(Container, { style: style, children: jsxRuntime.jsx(uilibGl.IconButton, { kind: "tools_print", primary: true, disabled: loading, onClick: onExport, children: "\u042D\u043A\u0441\u043F\u043E\u0440\u0442 \u0432 PDF" }) }));
6580
+ const ExportPdfContainer = React.memo(({ type, elementConfig }) => {
6581
+ const { t } = useGlobalContext();
6582
+ const { loading, onExport } = useExportPdf(getRootElementId(type));
6583
+ const { style, options } = elementConfig || {};
6584
+ const { icon, title } = options || {};
6585
+ return (jsxRuntime.jsx(Container, { children: jsxRuntime.jsx(uilibGl.IconButton, { kind: icon || "download", primary: true, disabled: loading, style: style, onClick: onExport, children: title ?? t("downloadPdf", { ns: "dashboard", defaultValue: "Скачать PDF" }) }) }));
6582
6586
  });
6583
6587
 
6584
6588
  const containerComponents = {
@@ -7430,8 +7434,6 @@ const ElementImage = React.memo(({ type, elementConfig }) => {
7430
7434
  return firstImage ? jsxRuntime.jsx("img", { src: firstImage, alt: firstImage, width: width }) : null;
7431
7435
  });
7432
7436
 
7433
- const getChartAxes = (chartElement) => chartElement?.options?.relatedDataSources?.filter(({ chartAxis }) => chartAxis === "y");
7434
-
7435
7437
  const ElementLegend = React.memo(({ type, element, elementConfig, expandedContainers }) => {
7436
7438
  const { attributes, dataSources } = useWidgetContext(type);
7437
7439
  const { options } = elementConfig || {};
@@ -8642,6 +8644,8 @@ const getTotalFromRelatedFeatures = (data) => {
8642
8644
  return data?.reduce((result, { value }) => result + Number(value), 0)?.toFixed(0) || "";
8643
8645
  };
8644
8646
 
8647
+ const getRootElementId = (type = exports.WidgetType.Dashboard) => `${type}-root`;
8648
+
8645
8649
  const pieChartTooltipFromAttributes = (t, data, attributes) => {
8646
8650
  const attribute = attributes?.find(({ name }) => name === data[0].name);
8647
8651
  const renderValue = attribute
@@ -8831,7 +8835,7 @@ const useChartData = ({ element, type }) => {
8831
8835
  return [];
8832
8836
  return filteredAttributes
8833
8837
  .map(relatedAxis => {
8834
- const { dataSourceName, axisColor, attributeName } = relatedAxis;
8838
+ const { dataSourceName, axisColor, attributeName, attributeUnits } = relatedAxis;
8835
8839
  const dataSource = configDataSources.find(({ name }) => name === dataSourceName);
8836
8840
  const layerInfo = layerInfos?.find(item => item?.name === dataSource?.layerName);
8837
8841
  const featureDataSource = getDataSource(dataSourceName, dataSources);
@@ -8849,8 +8853,10 @@ const useChartData = ({ element, type }) => {
8849
8853
  })
8850
8854
  : null,
8851
8855
  color: axisColor,
8856
+ attributeName,
8857
+ attributeUnits,
8858
+ dataSourceName,
8852
8859
  layerInfo,
8853
- attributeName
8854
8860
  };
8855
8861
  })
8856
8862
  .filter(({ items }) => items === null || (items?.length && !items.every(({ value }) => value === null)));
@@ -8860,6 +8866,8 @@ const useChartData = ({ element, type }) => {
8860
8866
  items: getDataFromAttributes(t, element, attributes),
8861
8867
  layerInfo: null,
8862
8868
  attributeName: null,
8869
+ attributeUnits: null,
8870
+ dataSourceName: null,
8863
8871
  color: null
8864
8872
  }
8865
8873
  ];
@@ -9096,125 +9104,99 @@ const useExpandableContainers = () => {
9096
9104
  return [expandedContainers, expandContainer];
9097
9105
  };
9098
9106
 
9099
- const useExportPdf = (ids) => {
9107
+ const useExportPdf = (id, margin = 20) => {
9100
9108
  const [loading, setLoading] = React.useState(false);
9101
9109
  const onExport = React.useCallback(async () => {
9102
- if (ids.length === 0) {
9110
+ if (!id) {
9103
9111
  return;
9104
9112
  }
9105
9113
  setLoading(true);
9106
- const pdf = new jspdf.jsPDF("landscape", "pt", "a4", false);
9107
- for (let i = 0; i < ids.length; i++) {
9108
- const pageItemContents = document.querySelector(`#${ids[i]}`);
9109
- const data = await html2canvas(pageItemContents, {
9110
- scale: 2,
9111
- windowWidth: 800,
9112
- onclone: (clonedDocument, clonedElement) => {
9113
- clonedDocument.body.style.width = "1920px";
9114
- clonedDocument.body.style.height = "1080px";
9115
- /* if (!isCoverPage) {
9116
- clonedDocument.body.style.background = "#f4f7f9";
9117
- }
9118
-
9119
- const pageContainers = clonedElement.querySelectorAll(".export-page-container");
9120
- const inputWrappers = clonedElement.querySelectorAll(".page-title-input");
9121
- const textareas = clonedElement.querySelectorAll(".report-page-item-textarea");
9122
- const datePickerWrappers = clonedElement.querySelectorAll(".report-page-item-datepicker");
9123
- const pageBlockContainers = clonedElement.querySelectorAll(".report-page-block-container");
9124
- const pageItemTitles = clonedDocument.querySelectorAll(".report-page-item-title");
9125
-
9126
- pageContainers.forEach((element) => {
9127
- (element as HTMLDivElement).style.background = isCoverPage ? "transparent" : "#f4f7f9";
9128
- (element as HTMLDivElement).style.border = "none";
9129
- (element as HTMLDivElement).style.padding = isCoverPage ? "0px" : "3rem 3rem 30rem";
9130
- (element as HTMLDivElement).style.margin = isCoverPage ? "0px" : "initial";
9131
- });
9132
-
9133
- inputWrappers.forEach((inputWrapper) => {
9134
- const input = inputWrapper.querySelector("input");
9135
- const div = document.createElement("div");
9136
-
9137
- div.innerText = (input as HTMLInputElement).value;
9138
-
9139
- inputWrapper.replaceWith(div);
9140
- });
9141
-
9142
- textareas.forEach((textarea) => {
9143
- const div = document.createElement("div");
9144
-
9145
- if ((textarea as HTMLTextAreaElement).classList.contains("report-page-item-comment")) {
9146
- if (isCoverPage) {
9147
- (div as HTMLDivElement).style.display = "none";
9148
- } else {
9149
- (div as HTMLDivElement).style.fontSize = "24px";
9150
- (div as HTMLDivElement).style.fontWeight = "400";
9151
- (div as HTMLDivElement).style.opacity = "0.54";
9152
- (div as HTMLDivElement).style.marginTop = "2rem";
9153
- }
9154
- }
9155
-
9156
- if (isCoverPage) {
9157
- if ((textarea as HTMLTextAreaElement).classList.contains("report-page-front-cover-title")) {
9158
- (div as HTMLDivElement).style.fontSize = "32px";
9159
- (div as HTMLDivElement).style.fontWeight = "300";
9160
- (div as HTMLDivElement).style.lineHeight = "normal";
9161
- }
9162
-
9163
- if ((textarea as HTMLTextAreaElement).classList.contains("report-page-front-cover-comment")) {
9164
- (div as HTMLDivElement).style.fontSize = "16px";
9165
- (div as HTMLDivElement).style.fontWeight = "400";
9166
- (div as HTMLDivElement).style.opacity = "0.54";
9167
- (div as HTMLDivElement).style.lineHeight = "normal";
9168
- }
9169
- }
9170
-
9171
- div.innerText = (textarea as HTMLTextAreaElement).value;
9172
-
9173
- textarea.replaceWith(div);
9174
- });
9175
-
9176
- datePickerWrappers.forEach((inputWrapper) => {
9177
- const input = inputWrapper.querySelector("input");
9178
- const div = document.createElement("div");
9179
-
9180
- if (isCoverPage) {
9181
- (div as HTMLDivElement).style.fontSize = "12px";
9182
- (div as HTMLDivElement).style.fontWeight = "400";
9183
- (div as HTMLDivElement).style.opacity = "0.54";
9184
- }
9185
-
9186
- div.innerText = (input as HTMLInputElement).value;
9187
-
9188
- inputWrapper.replaceWith(div);
9189
- });
9190
-
9191
- pageBlockContainers.forEach((element) => {
9192
- (element as HTMLDivElement).style.background = "#ffffff";
9193
- });
9194
-
9195
- pageItemTitles.forEach((item) => {
9196
- if (isCoverPage) {
9197
- (item as HTMLDivElement).style.display = "none";
9198
- } else {
9199
- (item as HTMLDivElement).style.fontSize = "40px";
9200
- (item as HTMLDivElement).style.fontWeight = "300";
9201
- (item as HTMLDivElement).style.marginBottom = "2rem";
9202
- }
9203
- });*/
9204
- },
9114
+ const container = document.querySelector(`#${id}`);
9115
+ if (!container) {
9116
+ setLoading(false);
9117
+ return;
9118
+ }
9119
+ // Сохраняем оригинальные стили для восстановления
9120
+ const originalStyles = {
9121
+ overflow: container.style.overflow,
9122
+ position: container.style.position,
9123
+ };
9124
+ // Временные стили для точного измерения
9125
+ container.style.overflow = 'visible';
9126
+ container.style.position = 'relative';
9127
+ const pdf = new jspdf.jsPDF("p", "px", "a4", false);
9128
+ const pageWidth = pdf.internal.pageSize.getWidth();
9129
+ const pageHeight = pdf.internal.pageSize.getHeight();
9130
+ const availableHeight = pageHeight - (2 * margin);
9131
+ // Получаем все дочерние элементы
9132
+ const children = Array.from(container.children);
9133
+ let currentPageHeight = 0;
9134
+ let currentPageElements = [];
9135
+ const pages = [];
9136
+ // Распределяем элементы по страницам
9137
+ for (const child of children) {
9138
+ const childHeight = child.offsetHeight;
9139
+ // Если элемент не помещается на текущей странице, начинаем новую
9140
+ if (currentPageHeight + childHeight > availableHeight && currentPageElements.length > 0) {
9141
+ pages.push([...currentPageElements]);
9142
+ currentPageElements = [];
9143
+ currentPageHeight = 0;
9144
+ }
9145
+ currentPageElements.push(child);
9146
+ currentPageHeight += childHeight;
9147
+ }
9148
+ // Добавляем последнюю страницу
9149
+ if (currentPageElements.length > 0) {
9150
+ pages.push(currentPageElements);
9151
+ }
9152
+ // Генерируем PDF для каждой страницы
9153
+ for (let pageIndex = 0; pageIndex < pages.length; pageIndex++) {
9154
+ if (pageIndex > 0) {
9155
+ pdf.addPage();
9156
+ }
9157
+ const pageElements = pages[pageIndex];
9158
+ // Создаем временный контейнер для текущей страницы
9159
+ const tempContainer = document.createElement('div');
9160
+ tempContainer.style.position = 'absolute';
9161
+ tempContainer.style.left = '-9999px';
9162
+ tempContainer.style.top = '0';
9163
+ tempContainer.style.width = container.offsetWidth + 'px';
9164
+ tempContainer.style.overflow = 'visible';
9165
+ // Клонируем элементы для текущей страницы
9166
+ pageElements.forEach(element => {
9167
+ const clone = element.cloneNode(true);
9168
+ tempContainer.appendChild(clone);
9205
9169
  });
9206
- const img = data.toDataURL("image/png");
9207
- const imgProperties = pdf.getImageProperties(img);
9208
- const pdfWidth = pdf.internal.pageSize.getWidth();
9209
- const pdfHeight = (imgProperties.height * pdfWidth) / imgProperties.width;
9210
- if (i > 0) {
9211
- pdf.addPage("a4", "landscape");
9170
+ document.body.appendChild(tempContainer);
9171
+ try {
9172
+ const canvas = await html2canvas(tempContainer, {
9173
+ scale: 2,
9174
+ useCORS: true,
9175
+ logging: false,
9176
+ backgroundColor: '#ffffff',
9177
+ width: container.offsetWidth,
9178
+ height: tempContainer.offsetHeight,
9179
+ });
9180
+ const imgData = canvas.toDataURL('image/png', 1.0);
9181
+ const imgWidth = pageWidth - (2 * margin);
9182
+ const imgHeight = (canvas.height * imgWidth) / canvas.width;
9183
+ // Центрируем по горизонтали и добавляем с верхним отступом
9184
+ pdf.addImage(imgData, 'PNG', margin, margin, imgWidth, imgHeight);
9185
+ }
9186
+ catch (error) {
9187
+ console.error('Error generating page:', error);
9188
+ }
9189
+ finally {
9190
+ // Удаляем временный контейнер
9191
+ document.body.removeChild(tempContainer);
9212
9192
  }
9213
- pdf.addImage(img, "PNG", 0, 0, pdfWidth, pdfHeight);
9214
9193
  }
9215
- pdf.save(`report_${dateFns.format(new Date(), "yyyy-MM-dd_HH:mm:ss")}.pdf`);
9194
+ // Восстанавливаем оригинальные стили
9195
+ container.style.overflow = originalStyles.overflow;
9196
+ container.style.position = originalStyles.position;
9197
+ pdf.save(`${dateFns.format(new Date(), "yyyy-MM-dd_HH:mm:ss")}.pdf`);
9216
9198
  setLoading(false);
9217
- }, [ids]);
9199
+ }, [id, margin]);
9218
9200
  return { loading, onExport };
9219
9201
  };
9220
9202
 
@@ -9417,7 +9399,7 @@ const Chart = React.memo(({ config, element, elementConfig, type, renderElement
9417
9399
  const { t } = useGlobalContext();
9418
9400
  const { expandedContainers, layerInfos, attributes, dataSources } = useWidgetContext(type);
9419
9401
  const { id, options, children } = element || {};
9420
- const { column, markers: configMarkers, showLabels, showMarkers, showTotal, totalWord: configTotalWord, totalAttribute, expandable, expanded, chartType, relatedDataSources, defaultColor } = options || {};
9402
+ const { column, markers: configMarkers, showLabels, showMarkers, showTotal, totalWord: configTotalWord, totalAttribute, expandable, expanded, chartType, relatedDataSources, defaultColor, dotSnapping, } = options || {};
9421
9403
  const isLineChart = chartType === "line";
9422
9404
  const isPieChart = chartType === "pie";
9423
9405
  const isStackBar = chartType === "stack";
@@ -9472,14 +9454,23 @@ const Chart = React.memo(({ config, element, elementConfig, type, renderElement
9472
9454
  const renderLineChartTooltip = React.useCallback((items, { indexX }) => {
9473
9455
  return (jsxRuntime.jsxs(Tooltip, { children: [jsxRuntime.jsx(ChartTooltipLabel, { children: labels[indexX] }), items
9474
9456
  .filter(({ value }) => !isEmptyValue(value))
9475
- ?.map(({ layerName, attributeName, value, stroke }, index) => {
9476
- const layerInfo = layerInfos?.find(({ name }) => name === layerName);
9477
- const attribute = layerInfo?.layerDefinition.attributes[attributeName];
9478
- return (jsxRuntime.jsxs(ChartTooltipRow, { children: [jsxRuntime.jsx(ChartLegendColor$1, { "$color": stroke }), jsxRuntime.jsx(ChartLegendValue, { children: attribute
9479
- ? formatAttributeValue({ t, type: attribute.type, value, stringFormat: attribute.stringFormat })
9480
- : value })] }, index));
9457
+ ?.map(({ layerName, attributeName, attributeUnits, dataSourceName, value, stroke }, index) => {
9458
+ const layerInfo = !attributeUnits
9459
+ ? layerInfos?.find(({ name }) => name === layerName)
9460
+ : null;
9461
+ const attribute = !attributeUnits
9462
+ ? layerInfo?.layerDefinition.attributes[attributeName]
9463
+ : null;
9464
+ const dataSource = dataSourceName ? getDataSource(dataSourceName, dataSources) : null;
9465
+ const dataSourceUnits = !dataSource || !attributeUnits
9466
+ ? null
9467
+ : dataSource.features?.[0]?.attributes?.[attributeUnits];
9468
+ const legendValue = attribute
9469
+ ? formatAttributeValue({ t, type: attribute.type, value, stringFormat: attribute.stringFormat })
9470
+ : [value, dataSourceUnits].filter(Boolean).join(" ");
9471
+ return (jsxRuntime.jsxs(ChartTooltipRow, { children: [jsxRuntime.jsx(ChartLegendColor$1, { "$color": stroke }), jsxRuntime.jsx(ChartLegendValue, { children: legendValue })] }, index));
9481
9472
  })] }));
9482
- }, [labels, layerInfos]);
9473
+ }, [labels, layerInfos, dataSources, dotSnapping]);
9483
9474
  const markers = React.useMemo(() => getChartMarkers(data[0]?.items, configMarkers, dataSources), [data, dataSources, configMarkers]);
9484
9475
  const margin = React.useMemo(() => {
9485
9476
  const markersMargin = showMarkers ? 10 : 0;
@@ -9513,6 +9504,8 @@ const Chart = React.memo(({ config, element, elementConfig, type, renderElement
9513
9504
  const lineChartData = data.map(item => ({
9514
9505
  layerName: item.layerInfo?.name,
9515
9506
  attributeName: item.attributeName,
9507
+ attributeUnits: item.attributeUnits,
9508
+ dataSourceName: item.dataSourceName,
9516
9509
  stroke: item.color || primaryColor,
9517
9510
  values: item.items
9518
9511
  ?.filter(({ value }) => !isEmptyValue(value))
@@ -9527,7 +9520,7 @@ const Chart = React.memo(({ config, element, elementConfig, type, renderElement
9527
9520
  if (isHidedY) {
9528
9521
  yAxis.remove();
9529
9522
  }
9530
- }, customYAxis: yAxis => yAxis.ticks(4), renderTooltip: renderLineChartTooltip, customize: customize, dynamicTooltipEnable: true, stackedTooltip: true, tooltipClassName: "dashboardLineChartTooltip", drawGridX: !isHidedY, margin: margin })] }));
9523
+ }, customYAxis: yAxis => yAxis.ticks(4), renderTooltip: renderLineChartTooltip, customize: customize, dotSnapping: dotSnapping, dynamicTooltipEnable: true, stackedTooltip: true, tooltipClassName: "dashboardLineChartTooltip", drawGridX: !isHidedY, margin: margin })] }));
9531
9524
  }
9532
9525
  if (isStackBar) {
9533
9526
  return (jsxRuntime.jsx(AnyChartWrapper, { height: height, children: jsxRuntime.jsx(StackBar, { data: data, filterName: filterName, type: type, alias: elementConfig?.children?.find(child => child.id === "alias"), options: options, renderTooltip: renderPieChartTooltip, renderElement: renderElement }) }));
@@ -10274,6 +10267,7 @@ exports.getActualExtrusionHeight = getActualExtrusionHeight;
10274
10267
  exports.getAttributeByName = getAttributeByName;
10275
10268
  exports.getAttributeValue = getAttributeValue;
10276
10269
  exports.getAttributesConfiguration = getAttributesConfiguration;
10270
+ exports.getChartAxes = getChartAxes;
10277
10271
  exports.getChartFilterName = getChartFilterName;
10278
10272
  exports.getChartMarkers = getChartMarkers;
10279
10273
  exports.getConfigFilter = getConfigFilter;
@@ -10302,6 +10296,7 @@ exports.getProxyService = getProxyService;
10302
10296
  exports.getRelatedAttribute = getRelatedAttribute;
10303
10297
  exports.getRenderElement = getRenderElement;
10304
10298
  exports.getResourceUrl = getResourceUrl;
10299
+ exports.getRootElementId = getRootElementId;
10305
10300
  exports.getSelectedFilterValue = getSelectedFilterValue;
10306
10301
  exports.getSlideshowImages = getSlideshowImages;
10307
10302
  exports.getSvgUrl = getSvgUrl;