@evergis/react 4.0.115 → 4.0.116

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/dist/react.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
2
- import { IconButton, Flex, transition, Chip, shadows, Description, Divider, Icon, LegendToggler, Tooltip as Tooltip$1, DropdownField, MultiSelectContainer, IconButtonButton, FlexSpan, FlatButton, IconToggle, DraggableTreeContainer, DraggableTree, UploaderItemArea, UploaderTitleWrapper, Dialog, DialogTitle, ThemeProvider, darkTheme, DialogContent, CircularProgress, Switch, AutoComplete, Input, Slider, Dropdown, Checkbox, DatePicker, getLocale, IconToggleButton, LinearProgress, Popup, Menu, ActionsGroup, DialogActions, RaisedButton, Preview, H2, Blank, Popover, Uploader, NumberRangeSlider, useAsyncAutocomplete, RangeNumberInput, TreeDropdown, defaultTheme, dateFormat } from '@evergis/uilib-gl';
2
+ import { IconButton, Flex, transition, Chip, shadows, Description, Divider, Icon, LegendToggler, Tooltip as Tooltip$1, DropdownField, MultiSelectContainer, IconButtonButton, FlatButton, FlexSpan, IconToggle, DraggableTreeContainer, DraggableTree, UploaderItemArea, UploaderTitleWrapper, Dialog, DialogTitle, ThemeProvider, darkTheme, DialogContent, CircularProgress, Switch, AutoComplete, Input, Slider, Dropdown, Checkbox, DatePicker, getLocale, IconToggleButton, LinearProgress, Popup, Menu, ActionsGroup, DialogActions, RaisedButton, Preview, H2, Blank, Popover, Uploader, NumberRangeSlider, useAsyncAutocomplete, RangeNumberInput, TreeDropdown, defaultTheme, dateFormat } from '@evergis/uilib-gl';
3
3
  import { isValidElement, Fragment, createContext, memo, useRef, useState, useCallback, useEffect, useContext, useMemo, createElement, forwardRef } from 'react';
4
4
  import styled, { createGlobalStyle, css, useTheme } from 'styled-components';
5
5
  import { lineChartClassNames, BarChart as BarChart$1, barChartClassNames, LineChart, PieChart } from '@evergis/charts';
@@ -3532,6 +3532,24 @@ const DEFAULT_FILTER_PADDING = 12;
3532
3532
  const BASE_CONTAINER_STYLE = {
3533
3533
  marginBottom: "1rem",
3534
3534
  };
3535
+ /**
3536
+ * Маркер тела контейнера внутри `ContainerRoot` — содержимое без заголовка.
3537
+ *
3538
+ * Нужен, чтобы находить тело по DOM снаружи: `#<id контейнера>` теперь указывает на корень,
3539
+ * то есть на пару «заголовок + тело».
3540
+ */
3541
+ const CONTAINER_BODY_ATTRIBUTE = "data-container-body";
3542
+ /**
3543
+ * Заданная высота контейнера достаётся телу — за вычетом заголовка.
3544
+ *
3545
+ * Сама высота остаётся на корне, поэтому тело забирает остаток ячейки, а заголовок сохраняет
3546
+ * `flex-shrink: 0` и не сжимается.
3547
+ */
3548
+ const CONTAINER_BODY_FILL_STYLE = {
3549
+ flex: "1 1 auto",
3550
+ minHeight: 0,
3551
+ minWidth: 0,
3552
+ };
3535
3553
 
3536
3554
  const StackBarContainer = styled(Flex).withConfig({ displayName: "StackBarContainer", componentId: "sc-stc97k" }) `
3537
3555
  flex-wrap: nowrap;
@@ -4589,7 +4607,24 @@ const ElementValueWrapper = styled.div.withConfig({ displayName: "ElementValueWr
4589
4607
  }
4590
4608
  `};
4591
4609
  `;
4592
- const Container = styled(Flex).withConfig({ displayName: "Container", componentId: "sc-1gpmkbq" }) `
4610
+ /**
4611
+ * Единственный корневой узел контейнера: внутри — заголовок (`ExpandableTitle`) и тело.
4612
+ *
4613
+ * Два корня (фрагмент из заголовка и тела) ломают раскладку родителя: в строке
4614
+ * (`options.column: false`) они становятся ДВУМЯ ячейками flex-row и делят её ширину между собой,
4615
+ * а доля из `options.width` достаётся только телу. Поэтому `id`, `data-templatename`, авторский
4616
+ * `style` и `$sizeCss` живут здесь, а не на теле — см. `useContainerRoot`.
4617
+ *
4618
+ * Всегда flex-колонка: заголовок и тело раньше были flex-элементами родительского `Container`,
4619
+ * и блочная обёртка вернула бы схлопывание вертикальных отступов между ними.
4620
+ */
4621
+ const ContainerRoot = styled(Flex).withConfig({ displayName: "ContainerRoot", componentId: "sc-2j6lbd" }) `
4622
+ flex-direction: column;
4623
+ min-width: 0;
4624
+
4625
+ ${sizeCssMixin};
4626
+ `;
4627
+ const Container = styled(Flex).withConfig({ displayName: "Container", componentId: "sc-1o8dsu2" }) `
4593
4628
  flex-direction: column;
4594
4629
  width: 100%;
4595
4630
 
@@ -4643,7 +4678,7 @@ const Container = styled(Flex).withConfig({ displayName: "Container", componentI
4643
4678
 
4644
4679
  ${sizeCssMixin};
4645
4680
  `;
4646
- const ContainerWrapper = styled(Flex).withConfig({ displayName: "ContainerWrapper", componentId: "sc-4nlisz" }) `
4681
+ const ContainerWrapper = styled(Flex).withConfig({ displayName: "ContainerWrapper", componentId: "sc-16tb6s0" }) `
4647
4682
  position: relative;
4648
4683
  box-sizing: border-box;
4649
4684
  width: 100%;
@@ -4664,7 +4699,7 @@ const ContainerWrapper = styled(Flex).withConfig({ displayName: "ContainerWrappe
4664
4699
  }
4665
4700
  `}
4666
4701
  `;
4667
- const DashboardChip = styled(Chip).withConfig({ displayName: "DashboardChip", componentId: "sc-8os072" }) `
4702
+ const DashboardChip = styled(Chip).withConfig({ displayName: "DashboardChip", componentId: "sc-19j7obx" }) `
4668
4703
  margin: 0 0.25rem 0.25rem 0;
4669
4704
  background: ${({ $isDefault, $bgColor, theme: { palette } }) => $isDefault ? palette.element : $bgColor || palette.primary};
4670
4705
  border-radius: ${({ $radius, theme: { borderRadius } }) => $radius || borderRadius.medium};
@@ -4680,7 +4715,7 @@ const DashboardChip = styled(Chip).withConfig({ displayName: "DashboardChip", co
4680
4715
  color: ${({ $isDefault, $fontColor, theme: { palette } }) => $isDefault ? palette.icon : $fontColor || "#fff"};
4681
4716
  }
4682
4717
  `;
4683
- const DashboardPlaceholderWrap = styled(Flex).withConfig({ displayName: "DashboardPlaceholderWrap", componentId: "sc-1qpd82p" }) `
4718
+ const DashboardPlaceholderWrap = styled(Flex).withConfig({ displayName: "DashboardPlaceholderWrap", componentId: "sc-anwihw" }) `
4684
4719
  flex-grow: 1;
4685
4720
  flex-direction: column;
4686
4721
  justify-content: center;
@@ -4688,7 +4723,7 @@ const DashboardPlaceholderWrap = styled(Flex).withConfig({ displayName: "Dashboa
4688
4723
  width: 100%;
4689
4724
  margin-bottom: 2rem;
4690
4725
  `;
4691
- const DashboardPlaceholder = styled(Flex).withConfig({ displayName: "DashboardPlaceholder", componentId: "sc-1ls3oxv" }) `
4726
+ const DashboardPlaceholder = styled(Flex).withConfig({ displayName: "DashboardPlaceholder", componentId: "sc-jry8vp" }) `
4692
4727
  flex-direction: column;
4693
4728
  justify-content: center;
4694
4729
  align-items: center;
@@ -4721,7 +4756,7 @@ const DashboardPlaceholder = styled(Flex).withConfig({ displayName: "DashboardPl
4721
4756
  }
4722
4757
  }
4723
4758
  `;
4724
- const DashboardWrapper = styled(Flex).withConfig({ displayName: "DashboardWrapper", componentId: "sc-bx93vz" }) `
4759
+ const DashboardWrapper = styled(Flex).withConfig({ displayName: "DashboardWrapper", componentId: "sc-100ipup" }) `
4725
4760
  flex-direction: column;
4726
4761
  flex-wrap: nowrap;
4727
4762
  flex-grow: 1;
@@ -4734,7 +4769,7 @@ const DashboardWrapper = styled(Flex).withConfig({ displayName: "DashboardWrappe
4734
4769
  margin-top: -0.35rem;
4735
4770
  `}
4736
4771
  `;
4737
- const DashboardContent = styled(Flex).withConfig({ displayName: "DashboardContent", componentId: "sc-mslago" }) `
4772
+ const DashboardContent = styled(Flex).withConfig({ displayName: "DashboardContent", componentId: "sc-77il9k" }) `
4738
4773
  flex-grow: 1;
4739
4774
  width: 100%;
4740
4775
  padding: 1.5rem 1.5rem 2rem;
@@ -4749,16 +4784,16 @@ const PresentationWrapperCss = css `
4749
4784
  border-radius: ${({ theme: { borderRadius } }) => borderRadius.medium};
4750
4785
  box-shadow: ${shadows.raised};
4751
4786
  `;
4752
- const PresentationWrapper = styled.div.withConfig({ displayName: "PresentationWrapper", componentId: "sc-1aajdp8" }) `
4787
+ const PresentationWrapper = styled.div.withConfig({ displayName: "PresentationWrapper", componentId: "sc-891z9z" }) `
4753
4788
  ${PresentationWrapperCss};
4754
4789
  position: relative;
4755
4790
  z-index: 1;
4756
4791
  `;
4757
- const PresentationPanelWrapper = styled(PresentationWrapper).withConfig({ displayName: "PresentationPanelWrapper", componentId: "sc-9w36pj" }) `
4792
+ const PresentationPanelWrapper = styled(PresentationWrapper).withConfig({ displayName: "PresentationPanelWrapper", componentId: "sc-1ptpbt9" }) `
4758
4793
  margin-top: 0.75rem;
4759
4794
  transition: background-color ${transition.toggle};
4760
4795
  `;
4761
- const PresentationHeader = styled.div.withConfig({ displayName: "PresentationHeader", componentId: "sc-xe6ev3" }) `
4796
+ const PresentationHeader = styled.div.withConfig({ displayName: "PresentationHeader", componentId: "sc-182b7wg" }) `
4762
4797
  margin: -1.5rem -1.5rem 0 -1.5rem;
4763
4798
  padding: 1.5rem;
4764
4799
  // background: url(images.presentationHeader) 0 0 no-repeat;
@@ -4770,7 +4805,7 @@ const PresentationHeader = styled.div.withConfig({ displayName: "PresentationHea
4770
4805
  padding-top: 7rem;
4771
4806
  `};
4772
4807
  `;
4773
- const PresentationHeaderTools = styled(Flex).withConfig({ displayName: "PresentationHeaderTools", componentId: "sc-13dyz78" }) `
4808
+ const PresentationHeaderTools = styled(Flex).withConfig({ displayName: "PresentationHeaderTools", componentId: "sc-dms7fm" }) `
4774
4809
  justify-content: space-between;
4775
4810
  align-items: center;
4776
4811
  margin-bottom: -0.5rem;
@@ -4788,7 +4823,7 @@ const PresentationHeaderTools = styled(Flex).withConfig({ displayName: "Presenta
4788
4823
  }
4789
4824
  }
4790
4825
  `;
4791
- const LayerGroupList = styled(Flex).withConfig({ displayName: "LayerGroupList", componentId: "sc-110h1r0" }) `
4826
+ const LayerGroupList = styled(Flex).withConfig({ displayName: "LayerGroupList", componentId: "sc-19uothl" }) `
4792
4827
  flex-direction: column;
4793
4828
  height: 100%;
4794
4829
  flex-wrap: nowrap;
@@ -4801,8 +4836,8 @@ const LayerGroupList = styled(Flex).withConfig({ displayName: "LayerGroupList",
4801
4836
  flex-grow: 1;
4802
4837
  }
4803
4838
  `;
4804
- const PresentationHeaderButtons = styled(Flex).withConfig({ displayName: "PresentationHeaderButtons", componentId: "sc-5xerc" }) ``;
4805
- const PresentationPanelContainer = styled.div.withConfig({ displayName: "PresentationPanelContainer", componentId: "sc-ok1jzl" }) `
4839
+ const PresentationHeaderButtons = styled(Flex).withConfig({ displayName: "PresentationHeaderButtons", componentId: "sc-c24t7n" }) ``;
4840
+ const PresentationPanelContainer = styled.div.withConfig({ displayName: "PresentationPanelContainer", componentId: "sc-17q0jzw" }) `
4806
4841
  position: absolute;
4807
4842
  top: 0;
4808
4843
  left: calc(${({ left }) => left || 0}px + 0.75rem);
@@ -4871,7 +4906,7 @@ const PresentationPanelContainer = styled.div.withConfig({ displayName: "Present
4871
4906
  }
4872
4907
  }
4873
4908
  `;
4874
- const DataSourceErrorContainer = styled(Flex).withConfig({ displayName: "DataSourceErrorContainer", componentId: "sc-16x60eq" }) `
4909
+ const DataSourceErrorContainer = styled(Flex).withConfig({ displayName: "DataSourceErrorContainer", componentId: "sc-nh93ry" }) `
4875
4910
  align-items: center;
4876
4911
  justify-content: center;
4877
4912
  flex-wrap: nowrap;
@@ -4890,12 +4925,12 @@ const DataSourceErrorContainer = styled(Flex).withConfig({ displayName: "DataSou
4890
4925
  }
4891
4926
  }
4892
4927
  `;
4893
- const AttributeLabel = styled(Description).withConfig({ displayName: "AttributeLabel", componentId: "sc-1bou1dd" }) `
4928
+ const AttributeLabel = styled(Description).withConfig({ displayName: "AttributeLabel", componentId: "sc-9u3noy" }) `
4894
4929
  margin-top: 0 !important;
4895
4930
  margin-bottom: ${({ forCheckbox }) => forCheckbox ? "0.75rem" : "0.25rem"} !important;
4896
4931
  padding-left: ${({ isEdit }) => (isEdit ? "0.5rem" : "0")};
4897
4932
  `;
4898
- const FeatureControls = styled(Flex).withConfig({ displayName: "FeatureControls", componentId: "sc-fpl3fy" }) `
4933
+ const FeatureControls = styled(Flex).withConfig({ displayName: "FeatureControls", componentId: "sc-1wenq0r" }) `
4899
4934
  align-items: center;
4900
4935
  gap: 1rem;
4901
4936
  flex-wrap: nowrap;
@@ -6536,6 +6571,45 @@ const useContainerAttributes = ({ elementConfig, type, renderElement }) => {
6536
6571
  return { getRenderContainerItem, attributesToRender };
6537
6572
  };
6538
6573
 
6574
+ /**
6575
+ * Пропсы корневой обёртки контейнера: идентификаторы для внешних селекторов, авторский `style`
6576
+ * из конфига и css-объект размеров.
6577
+ *
6578
+ * Размеры уходят styled-пропом (класс), а не inline-стилем, поэтому перебиваются снаружи
6579
+ * без `!important`. Авторский `style` остаётся inline — у него приоритет по замыслу автора конфига.
6580
+ */
6581
+ const useWrapperSize = ({ elementConfig, defaults }) => {
6582
+ const { id, style, templateName, options } = elementConfig || {};
6583
+ const { width, height, overflow } = options || {};
6584
+ return useMemo(() => ({
6585
+ id,
6586
+ "data-templatename": templateName,
6587
+ style,
6588
+ $sizeCss: getWrapperSizeStyle({ style, width, height, overflow, defaults, defaultWidth: FILL_SIZE }),
6589
+ }), [id, templateName, style, width, height, overflow, defaults]);
6590
+ };
6591
+
6592
+ /**
6593
+ * Пропсы двух узлов контейнера с заголовком: корня (`ContainerRoot`) и тела.
6594
+ *
6595
+ * Контейнер обязан иметь ОДИН корневой узел — иначе в строке (`options.column: false`) заголовок
6596
+ * и тело становятся двумя ячейками родительского flex-row. Размеры из конфига поэтому уходят на
6597
+ * корень, а тело получает лишь остаток высоты под заголовком.
6598
+ */
6599
+ const useContainerRoot = ({ elementConfig, defaults }) => {
6600
+ const root = useWrapperSize({ elementConfig, defaults });
6601
+ // Гейт по РЕЗУЛЬТИРУЮЩЕЙ высоте, а не по `options.height`: высоту задаёт ещё и авторский `style`,
6602
+ // и внутренние `defaults` контейнера. `auto` высотой не считаем — делить нечего.
6603
+ const fillsHeight = !!root.$sizeCss?.height && root.$sizeCss.height !== "auto";
6604
+ return useMemo(() => ({
6605
+ root,
6606
+ body: {
6607
+ [CONTAINER_BODY_ATTRIBUTE]: "",
6608
+ $sizeCss: fillsHeight ? CONTAINER_BODY_FILL_STYLE : undefined,
6609
+ },
6610
+ }), [root, fillsHeight]);
6611
+ };
6612
+
6539
6613
  const useEditGroupAttributes = ({ elementConfig, type }) => {
6540
6614
  const { options } = elementConfig || {};
6541
6615
  const { controls, useProjectHiddenAttributes } = options || {};
@@ -7481,7 +7555,11 @@ const useExportPdf = (id, margin = 20) => {
7481
7555
  return;
7482
7556
  }
7483
7557
  setLoading(true);
7484
- const container = document.querySelector(`#${id}`);
7558
+ const target = document.querySelector(`#${id}`);
7559
+ // `#id` — корень контейнера, то есть пара «заголовок + тело». Постранично режем содержимое
7560
+ // тела: у самого корня детей всего два, и длинное тело уехало бы одной картинкой на первую
7561
+ // страницу. Fallback — для одноузловых целей вроде корня дашборда.
7562
+ const container = target?.querySelector(`:scope > [${CONTAINER_BODY_ATTRIBUTE}]`) ?? target;
7485
7563
  if (!container) {
7486
7564
  setLoading(false);
7487
7565
  return;
@@ -7865,32 +7943,14 @@ const useUpdateDataSource = ({ dataSource, config, filters, attributes, layerPar
7865
7943
  }, [dataSource, getDataSourcePromises, getUpdatedDataSources, dataSources]);
7866
7944
  };
7867
7945
 
7868
- /**
7869
- * Пропсы корневой обёртки контейнера: идентификаторы для внешних селекторов, авторский `style`
7870
- * из конфига и css-объект размеров.
7871
- *
7872
- * Размеры уходят styled-пропом (класс), а не inline-стилем, поэтому перебиваются снаружи
7873
- * без `!important`. Авторский `style` остаётся inline — у него приоритет по замыслу автора конфига.
7874
- */
7875
- const useWrapperSize = ({ elementConfig, defaults }) => {
7876
- const { id, style, templateName, options } = elementConfig || {};
7877
- const { width, height, overflow } = options || {};
7878
- return useMemo(() => ({
7879
- id,
7880
- "data-templatename": templateName,
7881
- style,
7882
- $sizeCss: getWrapperSizeStyle({ style, width, height, overflow, defaults, defaultWidth: FILL_SIZE }),
7883
- }), [id, templateName, style, width, height, overflow, defaults]);
7884
- };
7885
-
7886
7946
  const ContainersGroupContainer = memo(({ elementConfig, type, renderElement }) => {
7887
7947
  const { expandedContainers } = useWidgetContext(type);
7888
7948
  const { id, children, options } = elementConfig || {};
7889
7949
  const { column, expandable, expanded, alignItems } = options || {};
7890
7950
  const isColumn = column === undefined || column;
7891
7951
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
7892
- const root = useWrapperSize({ elementConfig });
7893
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(Container, { ...root, isColumn: isColumn, "$alignItems": alignItems, children: jsx(ContainerChildren, { type: type, items: children, elementConfig: elementConfig, isColumn: isColumn, isMain: id?.startsWith(CONFIG_PAGE_ID), renderElement: renderElement }) }))] }));
7952
+ const { root, body } = useContainerRoot({ elementConfig });
7953
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(Container, { ...body, isColumn: isColumn, "$alignItems": alignItems, children: jsx(ContainerChildren, { type: type, items: children, elementConfig: elementConfig, isColumn: isColumn, isMain: id?.startsWith(CONFIG_PAGE_ID), renderElement: renderElement }) }))] }));
7894
7954
  });
7895
7955
 
7896
7956
  const ChartLegendContainer = styled(Flex).withConfig({ displayName: "ChartLegendContainer", componentId: "sc-1di1zl9" }) `
@@ -8311,7 +8371,7 @@ const DataSourceProgressContainer = memo(({ config, elementConfig, type, innerCo
8311
8371
  const { maxValue, showTotal, relatedDataSource, expandable, expanded } = options || {};
8312
8372
  const valueElement = children?.find(item => item.id === "value");
8313
8373
  const unitsElement = children?.find(item => item.id === "units");
8314
- const root = useWrapperSize({ elementConfig });
8374
+ const { root, body } = useContainerRoot({ elementConfig });
8315
8375
  const { sliceItems, checkIsSliced, showMore, onShowMore } = useShownOtherItems(options);
8316
8376
  const totalUnits = useMemo(() => unitsElement?.type === "attributeUnits"
8317
8377
  ? attributes?.find(({ attributeName }) => attributeName === unitsElement.attributeName)?.stringFormat
@@ -8342,7 +8402,7 @@ const DataSourceProgressContainer = memo(({ config, elementConfig, type, innerCo
8342
8402
  return jsx(DataSourceError, { name: elementConfig.templateName });
8343
8403
  }
8344
8404
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
8345
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), !isVisible ? null : dataSource ? (jsxs(DataSourceProgressContainerWrapper, { ...root, children: [sliceItems(dataSource?.features)?.map((feature, index) => (jsx(DataSourceInnerContainer, { type: type, index: index, feature: feature, config: config, elementConfig: elementConfig, maxValue: currentMaxValue, innerComponent: innerComponent }, index))), checkIsSliced(dataSource?.features) && (jsx(ContainerToggler, { toggled: showMore, onClick: onShowMore, children: showMore ? t("hide", { ns: "dashboard", defaultValue: "Свернуть" }) : t("showAll", {
8405
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), !isVisible ? null : dataSource ? (jsxs(DataSourceProgressContainerWrapper, { ...body, children: [sliceItems(dataSource?.features)?.map((feature, index) => (jsx(DataSourceInnerContainer, { type: type, index: index, feature: feature, config: config, elementConfig: elementConfig, maxValue: currentMaxValue, innerComponent: innerComponent }, index))), checkIsSliced(dataSource?.features) && (jsx(ContainerToggler, { toggled: showMore, onClick: onShowMore, children: showMore ? t("hide", { ns: "dashboard", defaultValue: "Свернуть" }) : t("showAll", {
8346
8406
  ns: "dashboard",
8347
8407
  defaultValue: "Показать все",
8348
8408
  }) })), showTotal && (jsxs(Fragment$1, { children: [jsx(Divider, {}), jsxs(ProgressTotal, { children: [jsx(ProgressTotalTitle, { children: t("total", { ns: "dashboard", defaultValue: "Итого" }) }), jsxs(ProgressValue, { children: [totalValue, jsx(ProgressUnits, { children: totalUnits })] })] })] }))] })) : (jsx(ContainerLoading, {})), jsx(HiddenTitleItems, { elementConfig: elementConfig, config: config, type: type })] }));
@@ -8603,7 +8663,7 @@ const FiltersContainer = memo(({ elementConfig, config, type, renderElement }) =
8603
8663
  const { filters: configFilters } = currentPage;
8604
8664
  const { id, options } = elementConfig || {};
8605
8665
  const { padding, bgColor, fontColor, fontSize, expandable, expanded } = options || {};
8606
- const root = useWrapperSize({ elementConfig });
8666
+ const { root, body } = useContainerRoot({ elementConfig });
8607
8667
  const isLoading = useMemo(() => checkIsLoading(dataSources, config, configFilters), [configFilters, config, dataSources]);
8608
8668
  const filterItems = useMemo(() => elementConfig?.children?.filter(child => child.options?.filterName), [elementConfig?.children]);
8609
8669
  const renderFilter = useCallback((filter, index) => {
@@ -8612,7 +8672,7 @@ const FiltersContainer = memo(({ elementConfig, config, type, renderElement }) =
8612
8672
  }, [config, type]);
8613
8673
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
8614
8674
  const selectedItems = useMemo(() => getFilterSelectedItems(filterItems, filters, configFilters), [configFilters, filters, filterItems]);
8615
- return (jsxs(Fragment$1, { children: [jsx(Flex, { mb: !isVisible && selectedItems.length ? "2rem" : 0, children: jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }) }), isLoading && jsx(ContainerLoading, {}), !isLoading && isVisible && (jsx(FiltersContainerWrapper, { ...root, "$padding": padding, "$bgColor": bgColor, "$fontSize": fontSize, "$fontColor": fontColor, children: filterItems?.map(renderFilter) })), jsx(HiddenTitleItems, { elementConfig: elementConfig, config: config, type: type, filter: filterItems[0]?.options?.filterName })] }));
8675
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(Flex, { mb: !isVisible && selectedItems.length ? "2rem" : 0, children: jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }) }), isLoading && jsx(ContainerLoading, {}), !isLoading && isVisible && (jsx(FiltersContainerWrapper, { ...body, "$padding": padding, "$bgColor": bgColor, "$fontSize": fontSize, "$fontColor": fontColor, children: filterItems?.map(renderFilter) })), jsx(HiddenTitleItems, { elementConfig: elementConfig, config: config, type: type, filter: filterItems[0]?.options?.filterName })] }));
8616
8676
  });
8617
8677
 
8618
8678
  const DefaultAttributesContainer = memo(({ type, renderElement }) => {
@@ -8620,26 +8680,6 @@ const DefaultAttributesContainer = memo(({ type, renderElement }) => {
8620
8680
  return (jsx(Fragment$1, { children: attributes?.map(({ attributeName }) => (jsx(Container, { isColumn: true, children: renderElement({ id: attributeName }) }, attributeName))) }));
8621
8681
  });
8622
8682
 
8623
- const ChartContainerWrapper = styled(FlexSpan).withConfig({ displayName: "ChartContainerWrapper", componentId: "sc-17oj4lo" }) `
8624
- flex-direction: column;
8625
- min-width: 0;
8626
-
8627
- /* Заданная высота контейнера достаётся телу графика — за вычетом заголовка. */
8628
- ${({ $sizeCss }) => !!$sizeCss?.height &&
8629
- css `
8630
- /* Раздача высоты требует, чтобы обёртка была flex-колонкой (FlexSpan сам по себе не flex),
8631
- иначе Container с flex:1 1 auto не растянется на заданную высоту, а fill-график не впишется по высоте. */
8632
- display: flex;
8633
-
8634
- > ${Container} {
8635
- flex: 1 1 auto;
8636
- min-height: 0;
8637
- }
8638
- `}
8639
-
8640
- ${sizeCssMixin};
8641
- `;
8642
-
8643
8683
  /**
8644
8684
  * Контекст вписывания графика (`options.fill` контейнера Chart).
8645
8685
  *
@@ -8657,7 +8697,7 @@ const ChartContainer = memo(({ elementConfig, isVisible, type, renderElement })
8657
8697
  const aliasElement = children.find(child => child.id === "alias");
8658
8698
  const chartElement = children.find(child => child.id === "chart");
8659
8699
  const legendElement = children.find(child => child.id === "legend");
8660
- const root = useWrapperSize({ elementConfig });
8700
+ const { root, body } = useContainerRoot({ elementConfig });
8661
8701
  const { data, loading } = useChartData({
8662
8702
  element: chartElement,
8663
8703
  type,
@@ -8668,7 +8708,7 @@ const ChartContainer = memo(({ elementConfig, isVisible, type, renderElement })
8668
8708
  const hasItems = !!data[0]?.items?.length;
8669
8709
  if (!loading && !hasItems && hideEmpty)
8670
8710
  return null;
8671
- return (jsxs(ChartContainerWrapper, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsxs(Container, { isColumn: true, children: [aliasElement && jsx(ContainerAlias, { hasBottomMargin: true, children: renderElement({ id: "alias" }) }), jsx(ContainerValue, { column: !twoColumns, alignItems: twoColumns && fill ? "stretch" : "center", "$fill": !!fill, children: hasItems ? (jsxs(Fragment$1, { children: [jsx(ContainerChart, { "$fill": !!fill, children: jsx(FillContext.Provider, { value: fillContextValue, children: renderElement({ id: "chart" }) }) }), jsx(ContainerLegend, { justifyContent: legendElement?.options?.center ? "center" : "flex-start", children: renderElement({ id: "legend" }) })] })) : (jsx(Fragment$1, { children: "\u2014" })) })] }))] }));
8711
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsxs(Container, { ...body, isColumn: true, children: [aliasElement && jsx(ContainerAlias, { hasBottomMargin: true, children: renderElement({ id: "alias" }) }), jsx(ContainerValue, { column: !twoColumns, alignItems: twoColumns && fill ? "stretch" : "center", "$fill": !!fill, children: hasItems ? (jsxs(Fragment$1, { children: [jsx(ContainerChart, { "$fill": !!fill, children: jsx(FillContext.Provider, { value: fillContextValue, children: renderElement({ id: "chart" }) }) }), jsx(ContainerLegend, { justifyContent: legendElement?.options?.center ? "center" : "flex-start", children: renderElement({ id: "legend" }) })] })) : (jsx(Fragment$1, { children: "\u2014" })) })] }))] }));
8672
8712
  });
8673
8713
 
8674
8714
  const PagesContainer = memo(({ type = WidgetType.Dashboard, noBorders }) => {
@@ -8894,13 +8934,13 @@ const DataSourceContainer = memo(({ config, elementConfig, type, innerComponent,
8894
8934
  gap: gap ?? DEFAULT_TILE_GAP,
8895
8935
  });
8896
8936
  const defaults = useMemo(() => ({ height: isLoading ? "3rem" : "auto" }), [isLoading]);
8897
- const root = useWrapperSize({ elementConfig, defaults });
8937
+ const { root, body } = useContainerRoot({ elementConfig, defaults });
8898
8938
  if (!relatedDataSource)
8899
8939
  return null;
8900
8940
  if (dataSource && !dataSource.features) {
8901
8941
  return jsx(DataSourceError, { name: elementConfig.templateName });
8902
8942
  }
8903
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), !isVisible ? null : dataSource ? (jsxs(Fragment$1, { children: [jsx(DataSourceContainerWrapper, { ...root, ref: tilesRef, isColumn: column, "$isRow": !column, "$columns": columns, "$gap": gap, "$align": align, "$stretch": stretch, "$tileWidth": tileWidth, children: sliceItems(dataSource.features)?.map((feature, index) => (jsx(DataSourceInnerContainer, { index: index, type: type, config: config, feature: feature, elementConfig: elementConfig, innerComponent: innerComponent }, index))) }), checkIsSliced(dataSource.features) && (jsx(ContainerToggler, { toggled: showMore, onClick: onShowMore, children: showMore
8943
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), !isVisible ? null : dataSource ? (jsxs(Fragment$1, { children: [jsx(DataSourceContainerWrapper, { ...body, ref: tilesRef, isColumn: column, "$isRow": !column, "$columns": columns, "$gap": gap, "$align": align, "$stretch": stretch, "$tileWidth": tileWidth, children: sliceItems(dataSource.features)?.map((feature, index) => (jsx(DataSourceInnerContainer, { index: index, type: type, config: config, feature: feature, elementConfig: elementConfig, innerComponent: innerComponent }, index))) }), checkIsSliced(dataSource.features) && (jsx(ContainerToggler, { toggled: showMore, onClick: onShowMore, children: showMore
8904
8944
  ? t("hide", { ns: "dashboard", defaultValue: "Свернуть" })
8905
8945
  : t("showAll", { ns: "dashboard", defaultValue: "Показать все" }) }))] })) : (jsx(ContainerLoading, {}))] }));
8906
8946
  });
@@ -9060,7 +9100,7 @@ const SlideshowContainer = memo(({ config, elementConfig, type }) => {
9060
9100
  const { id, options } = elementConfig || {};
9061
9101
  const { expandable, expanded } = options || {};
9062
9102
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
9063
- const root = useWrapperSize({ elementConfig });
9103
+ const { root, body } = useContainerRoot({ elementConfig });
9064
9104
  const render = useMemo(() => getRenderElement({
9065
9105
  config,
9066
9106
  elementConfig,
@@ -9086,11 +9126,11 @@ const SlideshowContainer = memo(({ config, elementConfig, type }) => {
9086
9126
  // Подпись `alias` не задают почти всегда — тогда обёртку не рендерим, чтобы в DOM не оставался
9087
9127
  // пустой блок, который вдобавок отъедал бы половину ширины у галереи (см. isColumn ниже).
9088
9128
  const aliasNode = render({ id: "alias" });
9089
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: render }), isVisible && (
9129
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: render }), isVisible && (
9090
9130
  // `isColumn`: подпись над галереей, а сама галерея на всю ширину. Без него Container
9091
9131
  // раскладывает alias и slideshow в ряд, и оба (Flex с `width: 100%`) сжимаются пополам —
9092
9132
  // картинка занимала лишь половину доступной ширины.
9093
- jsxs(Container, { ...root, isColumn: true, children: [aliasNode && jsx(ContainerAlias, { hasBottomMargin: true, children: aliasNode }), jsx(ContainerValue, { children: render({
9133
+ jsxs(Container, { ...body, isColumn: true, children: [aliasNode && jsx(ContainerAlias, { hasBottomMargin: true, children: aliasNode }), jsx(ContainerValue, { children: render({
9094
9134
  id: "slideshow",
9095
9135
  wrap: false,
9096
9136
  }) })] }))] }));
@@ -9101,8 +9141,8 @@ const CameraContainer = memo(({ elementConfig, type, renderElement }) => {
9101
9141
  const { id, options } = elementConfig || {};
9102
9142
  const { expandable, expanded } = options || {};
9103
9143
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
9104
- const root = useWrapperSize({ elementConfig });
9105
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsxs(Container, { ...root, children: [jsx(ContainerAlias, { hasBottomMargin: true, children: renderElement({ id: "alias" }) }), jsx(ContainerValue, { children: renderElement({ id: "value", wrap: false }) })] }))] }));
9144
+ const { root, body } = useContainerRoot({ elementConfig });
9145
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsxs(Container, { ...body, children: [jsx(ContainerAlias, { hasBottomMargin: true, children: renderElement({ id: "alias" }) }), jsx(ContainerValue, { children: renderElement({ id: "value", wrap: false }) })] }))] }));
9106
9146
  });
9107
9147
 
9108
9148
  const TabAnchor = styled.div.withConfig({ displayName: "TabAnchor", componentId: "sc-emqf31" }) `
@@ -9522,7 +9562,7 @@ const LayersContainer = memo(({ type, elementConfig, renderElement }) => {
9522
9562
  const { id, options } = elementConfig || {};
9523
9563
  const { layerNames, expandable, expanded } = options || {};
9524
9564
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
9525
- const root = useWrapperSize({ elementConfig });
9565
+ const { root, body } = useContainerRoot({ elementConfig });
9526
9566
  const layers = useMemo(() => {
9527
9567
  if (!currentPage?.layers)
9528
9568
  return [];
@@ -9530,7 +9570,7 @@ const LayersContainer = memo(({ type, elementConfig, renderElement }) => {
9530
9570
  return currentPage.layers;
9531
9571
  return currentPage.layers.filter(({ name }) => layerNames.includes(name));
9532
9572
  }, [currentPage?.layers, layerNames]);
9533
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(LayersContainerWrapper, { ...root, children: jsx(LayerTree, { layers: layers, onlyMainTools: true }) }))] }));
9573
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(LayersContainerWrapper, { ...body, children: jsx(LayerTree, { layers: layers, onlyMainTools: true }) }))] }));
9534
9574
  });
9535
9575
 
9536
9576
  const ExportPdfContainer = memo(({ type, elementConfig }) => {
@@ -9566,8 +9606,8 @@ const UploadContainer = memo(({ type, elementConfig, renderElement }) => {
9566
9606
  const { id, options } = elementConfig || {};
9567
9607
  const { expandable, expanded } = options || {};
9568
9608
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
9569
- const root = useWrapperSize({ elementConfig });
9570
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(UploadContainerWrapper, { ...root, children: renderElement({ id: "uploader", wrap: false }) }))] }));
9609
+ const { root, body } = useContainerRoot({ elementConfig });
9610
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(UploadContainerWrapper, { ...body, children: renderElement({ id: "uploader", wrap: false }) }))] }));
9571
9611
  });
9572
9612
 
9573
9613
  const StatusBadge = styled(Chip).withConfig({ displayName: "StatusBadge", componentId: "sc-1xmfl10" }) `
@@ -9787,7 +9827,7 @@ const TaskContainer = memo(({ type, elementConfig, renderElement }) => {
9787
9827
  const { taskId, runTask, stopTask, status, openLog, loading, isLogDialogOpen, closeLog, log, lastMessage, result, } = usePythonTask();
9788
9828
  const { options } = elementConfig || {};
9789
9829
  const { title, relatedResources, center, icon, statusColors, responseFilters, useNotifications, } = options || {};
9790
- const root = useWrapperSize({ elementConfig });
9830
+ const { root, body } = useContainerRoot({ elementConfig });
9791
9831
  const { setNotificationDismissed } = useTaskNotifications({
9792
9832
  enabled: !!useNotifications,
9793
9833
  suppressed: isLogDialogOpen,
@@ -9827,12 +9867,12 @@ const TaskContainer = memo(({ type, elementConfig, renderElement }) => {
9827
9867
  return runTask({ resourceId, parameters: newParams, script, fileName, methodName });
9828
9868
  }));
9829
9869
  }, [attributes, currentPage.filters, dataSources, ewktGeometry, layerInfo, projectDataSources, relatedResources, runTask, selectedFilters, stopTask, taskId]);
9830
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), jsxs(TaskContainerWrapper, { ...root, justifyContent: center ? "center" : "flex-start", children: [jsx(StatusWaitingButton, { title: title || t("run", { ns: "dashboard", defaultValue: "Запуск" }), icon: icon, status: status, statusColors: statusColors, isWaiting: loading || !!taskId, isDisabled: !relatedResources?.length, onClick: onClick }), !!(log || taskId) && (jsxs(Fragment$1, { children: [jsx(IconButton, { kind: "info", onClick: openLog }), jsx(LogDialog, { logs: log, status: status, statusColors: statusColors, isOpen: isLogDialogOpen, onClose: onCloseLog, onMinimize: useNotifications ? onMinimizeLog : undefined })] }))] })] }));
9870
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), jsxs(TaskContainerWrapper, { ...body, justifyContent: center ? "center" : "flex-start", children: [jsx(StatusWaitingButton, { title: title || t("run", { ns: "dashboard", defaultValue: "Запуск" }), icon: icon, status: status, statusColors: statusColors, isWaiting: loading || !!taskId, isDisabled: !relatedResources?.length, onClick: onClick }), !!(log || taskId) && (jsxs(Fragment$1, { children: [jsx(IconButton, { kind: "info", onClick: openLog }), jsx(LogDialog, { logs: log, status: status, statusColors: statusColors, isOpen: isLogDialogOpen, onClose: onCloseLog, onMinimize: useNotifications ? onMinimizeLog : undefined })] }))] })] }));
9831
9871
  });
9832
9872
 
9833
9873
  const EditContainer = ({ type, elementConfig, renderElement }) => {
9834
- const { id, style } = elementConfig || {};
9835
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), jsxs(Container, { id: id, isColumn: true, style: style, children: [jsx(ContainerAlias, { hasBottomMargin: true, children: renderElement({ id: "alias" }) }), jsx(ContainerValue, { children: renderElement({ id: "value" }) })] })] }));
9874
+ const { root, body } = useContainerRoot({ elementConfig });
9875
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), jsxs(Container, { ...body, isColumn: true, children: [jsx(ContainerAlias, { hasBottomMargin: true, children: renderElement({ id: "alias" }) }), jsx(ContainerValue, { children: renderElement({ id: "value" }) })] })] }));
9836
9876
  };
9837
9877
 
9838
9878
  const getControlTemplateName = (type) => {
@@ -10569,7 +10609,7 @@ const AttachmentContainer = memo(({ type, elementConfig, renderElement }) => {
10569
10609
  const { items, visibleItems, viewMode, setViewMode, showMore, setShowMore, hasMore, hiddenCount } = useAttachmentContainer({ type, elementConfig });
10570
10610
  const { id, options } = elementConfig || {};
10571
10611
  const { expandable, expanded } = options || {};
10572
- const root = useWrapperSize({ elementConfig, defaults: BASE_CONTAINER_STYLE });
10612
+ const { root, body } = useContainerRoot({ elementConfig, defaults: BASE_CONTAINER_STYLE });
10573
10613
  const [previewIndex, setPreviewIndex] = useState(null);
10574
10614
  const previewImages = useAttachmentPreviewImages({ items, active: previewIndex !== null });
10575
10615
  const handlePreview = useCallback((link) => {
@@ -10580,7 +10620,7 @@ const AttachmentContainer = memo(({ type, elementConfig, renderElement }) => {
10580
10620
  const handleClosePreview = useCallback(() => setPreviewIndex(null), []);
10581
10621
  const handleShowMore = useCallback(() => setShowMore(true), [setShowMore]);
10582
10622
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
10583
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(Container, { ...root, children: jsxs(Flex, { column: true, children: [jsx(AttachmentsHeader, { alias: renderElement?.({ id: "alias" }), count: items.length, viewMode: viewMode, onChangeViewMode: setViewMode }), jsx(AttachmentsContent, { children: viewMode === "grid" ? (jsx(AttachmentsGrid, { items: visibleItems, isEdit: false, onPreview: handlePreview })) : (jsx(AttachmentsList, { items: visibleItems, isEdit: false, onPreview: handlePreview })) }), hasMore && !showMore && (jsx(ShowMoreButton, { hiddenCount: hiddenCount, onClick: handleShowMore })), previewIndex !== null && (jsx(Preview, { images: previewImages, initialIndex: previewIndex, isOpen: previewIndex !== null, onClose: handleClosePreview, errorTitleText: t("attachments.resourceUnavailable", {
10623
+ return (jsxs(ContainerRoot, { ...root, children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(Container, { ...body, children: jsxs(Flex, { column: true, children: [jsx(AttachmentsHeader, { alias: renderElement?.({ id: "alias" }), count: items.length, viewMode: viewMode, onChangeViewMode: setViewMode }), jsx(AttachmentsContent, { children: viewMode === "grid" ? (jsx(AttachmentsGrid, { items: visibleItems, isEdit: false, onPreview: handlePreview })) : (jsx(AttachmentsList, { items: visibleItems, isEdit: false, onPreview: handlePreview })) }), hasMore && !showMore && (jsx(ShowMoreButton, { hiddenCount: hiddenCount, onClick: handleShowMore })), previewIndex !== null && (jsx(Preview, { images: previewImages, initialIndex: previewIndex, isOpen: previewIndex !== null, onClose: handleClosePreview, errorTitleText: t("attachments.resourceUnavailable", {
10584
10624
  ns: "common",
10585
10625
  defaultValue: "Ресурс недоступен",
10586
10626
  }) }, previewIndex))] }) }))] }));
@@ -15209,5 +15249,5 @@ const DEFAULT_CIRCLE_STYLE = {
15209
15249
  ],
15210
15250
  };
15211
15251
 
15212
- export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerChildren, ContainerLoading, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DEFAULT_ATTRIBUTE_NAME, DEFAULT_BARCHART_RADIUS, DEFAULT_BASE_MAP, DEFAULT_BLUR, DEFAULT_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_RADIUS, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_STYLE, DEFAULT_LINE_WIDTH, DEFAULT_LNG, DEFAULT_OPACITY, DEFAULT_PAGES_CONFIG, DEFAULT_PIECHART_RADIUS, DEFAULT_ZOOM, Dashboard, DashboardCheckbox, DashboardChip, DashboardContent, DashboardContext, DashboardDefaultHeader, DashboardHeader, DashboardLoading, DashboardPlaceholder, DashboardPlaceholderWrap, DashboardProvider, DashboardWrapper, DataSourceContainer, DataSourceError, DataSourceErrorContainer, DataSourceInnerContainer, DataSourceProgressContainer, DateFormat, DefaultAttributesContainer, DefaultHeaderContainer, DefaultHeaderWrapper, DividerContainer, EMPTY_DATA_SOURCE_LAYER_INFO, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GlobalContext, GlobalProvider, Header, HeaderContainer, HeaderFontColorMixin, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroupList, LayerIcon, LayerIconContainer, LayerListContainer, LayerTree, LayersContainer, LayersListWrapper, LinearProgressContainer, LogTerminal, LogoContainer, MAX_CHART_WIDTH, Map$1 as Map, MapContext, MapProvider, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, QUERY_DESCRIPTION_CACHE_TTL, RoundedBackgroundContainer, SAVE_HOOK_RESULT_DURATION, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, WidgetType, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, checkEqualOrIncludes, checkIsLoading, createConfigLayer, createConfigPage, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDataSourceLayerInfo, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getImageUrl, getLayerClientStyle, getLayerInfo, getLayerInfoAttribute, getLayerInfoFromDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getWrapperSizeStyle, hexToRgba, isEmptyElementValue, isEmptyValue, isFillSize, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isTreeFilterValue, isVisibleContainer, mergeAttributeConfigurations, metersPerPixel, numberOptions, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, rgbToHex, roundTotalSum, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toCssSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentItems, useAttachmentPreviewImages, useAutoCompleteControl, useBeforeSave, useChartChange, useChartData, useContainerAttributes, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSources, useDebouncedCallback, useDiffPage, useEditGroupAttributes, useEqualTileWidth, useExpandableContainers, useExportPdf, useFeatureSaveHooks, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useIconsFromLayers, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRemoteTask, useRenderElement, useResizeBox, useSavePrototypeBuilder, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useWrapperSize, useZoomToFeatures, useZoomToPoint };
15252
+ export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINER_BODY_ATTRIBUTE, CONTAINER_BODY_FILL_STYLE, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerChildren, ContainerLoading, ContainerRoot, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DEFAULT_ATTRIBUTE_NAME, DEFAULT_BARCHART_RADIUS, DEFAULT_BASE_MAP, DEFAULT_BLUR, DEFAULT_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_RADIUS, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_CAP, DEFAULT_LINE_JOIN, DEFAULT_LINE_STYLE, DEFAULT_LINE_WIDTH, DEFAULT_LNG, DEFAULT_OPACITY, DEFAULT_PAGES_CONFIG, DEFAULT_PIECHART_RADIUS, DEFAULT_ZOOM, Dashboard, DashboardCheckbox, DashboardChip, DashboardContent, DashboardContext, DashboardDefaultHeader, DashboardHeader, DashboardLoading, DashboardPlaceholder, DashboardPlaceholderWrap, DashboardProvider, DashboardWrapper, DataSourceContainer, DataSourceError, DataSourceErrorContainer, DataSourceInnerContainer, DataSourceProgressContainer, DateFormat, DefaultAttributesContainer, DefaultHeaderContainer, DefaultHeaderWrapper, DividerContainer, EMPTY_DATA_SOURCE_LAYER_INFO, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GlobalContext, GlobalProvider, Header, HeaderContainer, HeaderFontColorMixin, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroupList, LayerIcon, LayerIconContainer, LayerListContainer, LayerTree, LayersContainer, LayersListWrapper, LinearProgressContainer, LogTerminal, LogoContainer, MAX_CHART_WIDTH, Map$1 as Map, MapContext, MapProvider, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, QUERY_DESCRIPTION_CACHE_TTL, RoundedBackgroundContainer, SAVE_HOOK_RESULT_DURATION, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, WidgetType, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, checkEqualOrIncludes, checkIsLoading, createConfigLayer, createConfigPage, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDataSourceLayerInfo, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getImageUrl, getLayerClientStyle, getLayerInfo, getLayerInfoAttribute, getLayerInfoFromDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getWrapperSizeStyle, hexToRgba, isEmptyElementValue, isEmptyValue, isFillSize, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isTreeFilterValue, isVisibleContainer, mergeAttributeConfigurations, metersPerPixel, numberOptions, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, rgbToHex, roundTotalSum, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toCssSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentItems, useAttachmentPreviewImages, useAutoCompleteControl, useBeforeSave, useChartChange, useChartData, useContainerAttributes, useContainerRoot, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSources, useDebouncedCallback, useDiffPage, useEditGroupAttributes, useEqualTileWidth, useExpandableContainers, useExportPdf, useFeatureSaveHooks, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useIconsFromLayers, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRemoteTask, useRenderElement, useResizeBox, useSavePrototypeBuilder, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useWrapperSize, useZoomToFeatures, useZoomToPoint };
15213
15253
  //# sourceMappingURL=react.esm.js.map