@evergis/react 4.0.54 → 4.0.56

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, Icon, Description, FlexSpan, IconToggle, Popup, Menu, DraggableTree, shadows, Divider, LegendToggler, Tooltip as Tooltip$1, DropdownField, MultiSelectContainer, IconButtonButton, FlatButton, DraggableTreeContainer, Dialog, DialogTitle, ThemeProvider, darkTheme, DialogContent, CircularProgress, Switch, AutoComplete, Input, Slider, Dropdown, Checkbox, DatePicker, getLocale, IconToggleButton, LinearProgress, ActionsGroup, DialogActions, RaisedButton, Preview, H2, defaultTheme, Blank, Popover, UploaderItemArea, UploaderTitleWrapper, Uploader, NumberRangeSlider, useAsyncAutocomplete, RangeNumberInput, dateFormat } from '@evergis/uilib-gl';
2
+ import { IconButton, Flex, transition, Chip, Icon, Description, FlexSpan, IconToggle, Popup, Menu, DraggableTree, shadows, Divider, LegendToggler, Tooltip as Tooltip$1, DropdownField, MultiSelectContainer, IconButtonButton, FlatButton, DraggableTreeContainer, Dialog, DialogTitle, ThemeProvider, darkTheme, DialogContent, CircularProgress, Switch, AutoComplete, Input, Slider, Dropdown, Checkbox, DatePicker, getLocale, IconToggleButton, LinearProgress, ActionsGroup, DialogActions, RaisedButton, Preview, H2, Blank, Popover, UploaderItemArea, UploaderTitleWrapper, Uploader, NumberRangeSlider, useAsyncAutocomplete, RangeNumberInput, defaultTheme, dateFormat } from '@evergis/uilib-gl';
3
3
  import { useState, useMemo, useCallback, createContext, memo, useRef, useEffect, useContext, Fragment } 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';
@@ -3404,7 +3404,6 @@ var HeaderTemplate;
3404
3404
  HeaderTemplate["Default"] = "Default";
3405
3405
  HeaderTemplate["Slideshow"] = "Slideshow";
3406
3406
  HeaderTemplate["Gradient"] = "Gradient";
3407
- HeaderTemplate["Icon"] = "Icon";
3408
3407
  })(HeaderTemplate || (HeaderTemplate = {}));
3409
3408
  var WidgetType;
3410
3409
  (function (WidgetType) {
@@ -6032,8 +6031,7 @@ const SvgContainer$1 = styled.div `
6032
6031
  }
6033
6032
  }
6034
6033
  `;
6035
- const TwoColumnContainerWrapper = styled(Flex) `
6036
- width: 100%;
6034
+ const TwoColumnContainerWrapper = styled(Container) `
6037
6035
  flex-direction: row;
6038
6036
  flex-wrap: nowrap;
6039
6037
  align-items: center;
@@ -6107,7 +6105,6 @@ const useRenderContainer = ({ elementConfig, type, renderElement, renderBody, })
6107
6105
  if (OverrideContainer) {
6108
6106
  const itemConfig = {
6109
6107
  ...elementConfig,
6110
- style: { ...BASE_CONTAINER_STYLE, ...elementConfig.style },
6111
6108
  children: (elementConfig?.children ?? []).map(child => ({
6112
6109
  ...child,
6113
6110
  attributeName: attribute,
@@ -6136,7 +6133,7 @@ const OneColumnContainer = memo(({ type, elementConfig, renderElement }) => {
6136
6133
  });
6137
6134
 
6138
6135
  const TwoColumnContainer = memo(({ elementConfig, type, renderElement }) => {
6139
- const renderBody = useCallback(({ id, value, style, hasIcon, hasUnits, render }, attribute) => (jsxs(TwoColumnContainerWrapper, { id: id, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { children: [hasIcon && (jsx(ContainerAliasIcon, { children: render({ id: "icon" }) })), render({ id: "alias" }), render({ id: "tooltip" }), render({ id: "modal" })] }), jsxs(ContainerValue, { big: true, children: [value, hasUnits && (jsx(ContainerUnits, { children: render({ id: "units" }) }))] })] }, attribute)), []);
6136
+ const renderBody = useCallback(({ id, value, style, hasIcon, hasUnits, render }) => (jsxs(TwoColumnContainerWrapper, { id: id, style: style, children: [jsxs(ContainerAlias, { children: [hasIcon && (jsx(ContainerAliasIcon, { children: render({ id: "icon" }) })), render({ id: "alias" }), render({ id: "tooltip" }), render({ id: "modal" })] }), jsxs(ContainerValue, { big: true, children: [value, hasUnits && (jsx(ContainerUnits, { children: render({ id: "units" }) }))] })] })), []);
6140
6137
  const { renderContainer, attributesToRender } = useRenderContainer({
6141
6138
  type,
6142
6139
  elementConfig,
@@ -8040,10 +8037,31 @@ const useGlobalContext = () => {
8040
8037
  }), [language, translate, api, ewktGeometry, themeName]);
8041
8038
  };
8042
8039
 
8040
+ const ImagePreviewError = styled.div `
8041
+ display: flex;
8042
+ align-items: center;
8043
+ justify-content: center;
8044
+ width: 100%;
8045
+ height: 100%;
8046
+ background-color: ${({ theme }) => theme.palette.elementDark};
8047
+ border-radius: ${({ theme: { borderRadius: themeBorder }, borderRadius }) => borderRadius || themeBorder.smallest};
8048
+
8049
+ ${Icon} {
8050
+ width: 37.5%;
8051
+ height: 37.5%;
8052
+ }
8053
+
8054
+ ${Icon}:after {
8055
+ font-size: 1.5rem;
8056
+ color: ${({ theme }) => theme.palette.textSecondary};
8057
+ }
8058
+ `;
8043
8059
  const FileImagePreview = ({ link, isExternal, size, borderRadius, }) => {
8044
8060
  const { api } = useGlobalContext();
8045
8061
  const [imageSrc, setImageSrc] = useState();
8062
+ const [hasError, setHasError] = useState(false);
8046
8063
  useEffect(() => {
8064
+ setHasError(false);
8047
8065
  if (isExternal) {
8048
8066
  setImageSrc(link);
8049
8067
  return;
@@ -8061,14 +8079,18 @@ const FileImagePreview = ({ link, isExternal, size, borderRadius, }) => {
8061
8079
  objectUrl = URL.createObjectURL(blob);
8062
8080
  setImageSrc(objectUrl);
8063
8081
  })
8064
- .catch(() => { });
8082
+ .catch(() => {
8083
+ if (cancelled)
8084
+ return;
8085
+ setHasError(true);
8086
+ });
8065
8087
  return () => {
8066
8088
  cancelled = true;
8067
8089
  if (objectUrl)
8068
8090
  URL.revokeObjectURL(objectUrl);
8069
8091
  };
8070
8092
  }, [api, link, isExternal]);
8071
- return (jsxs(ImagePreviewContainer, { size: size, children: [!imageSrc && (jsx(ImagePreviewLoaderContainer, { children: jsx(LinearProgress, {}) })), imageSrc && (jsx(GridImagePreview, { borderRadius: borderRadius, size: size, src: imageSrc, alt: "" }))] }));
8093
+ return (jsxs(ImagePreviewContainer, { size: size, children: [hasError && (jsx(ImagePreviewError, { borderRadius: borderRadius, children: jsx(Icon, { kind: "alert" }) })), !hasError && !imageSrc && (jsx(ImagePreviewLoaderContainer, { children: jsx(LinearProgress, {}) })), !hasError && imageSrc && (jsx(GridImagePreview, { borderRadius: borderRadius, size: size, src: imageSrc, alt: "", onError: () => setHasError(true) }))] }));
8072
8094
  };
8073
8095
 
8074
8096
  const getFileType = (mimeType = "", name = "") => {
@@ -8221,6 +8243,60 @@ const useAttachmentContainer = ({ type, elementConfig, valueOverride, }) => {
8221
8243
  };
8222
8244
  };
8223
8245
 
8246
+ const usePreviewImages = ({ items, active }) => {
8247
+ const { api } = useGlobalContext();
8248
+ const [blobUrls, setBlobUrls] = useState({});
8249
+ const [failedLinks, setFailedLinks] = useState({});
8250
+ const inFlightRef = useRef(new Set());
8251
+ const blobUrlsRef = useRef(blobUrls);
8252
+ blobUrlsRef.current = blobUrls;
8253
+ useEffect(() => {
8254
+ if (!active || !api?.catalog?.getFile)
8255
+ return;
8256
+ items.forEach(item => {
8257
+ const fileType = getFileType(item.mimeType, item.name);
8258
+ const isImage = IMAGE_FILE_TYPES.includes(fileType);
8259
+ if (!isImage || item.isExternal)
8260
+ return;
8261
+ if (blobUrlsRef.current[item.link] || inFlightRef.current.has(item.link))
8262
+ return;
8263
+ inFlightRef.current.add(item.link);
8264
+ api.catalog
8265
+ .getFile(item.link)
8266
+ .then(blob => {
8267
+ const objectUrl = URL.createObjectURL(blob);
8268
+ setBlobUrls(prev => ({ ...prev, [item.link]: objectUrl }));
8269
+ })
8270
+ .catch(() => {
8271
+ setFailedLinks(prev => (prev[item.link] ? prev : { ...prev, [item.link]: true }));
8272
+ })
8273
+ .finally(() => {
8274
+ inFlightRef.current.delete(item.link);
8275
+ });
8276
+ });
8277
+ }, [active, api, items]);
8278
+ useEffect(() => () => {
8279
+ Object.values(blobUrlsRef.current).forEach(URL.revokeObjectURL);
8280
+ }, []);
8281
+ return useMemo(() => items.map(item => {
8282
+ const fileType = getFileType(item.mimeType, item.name);
8283
+ const isImage = IMAGE_FILE_TYPES.includes(fileType);
8284
+ const fileName = item.name;
8285
+ if (!isImage)
8286
+ return { src: getFileTypeIcon(fileType), fileName };
8287
+ if (item.isExternal)
8288
+ return { src: item.link, fileName };
8289
+ const hasError = !!failedLinks[item.link];
8290
+ const blobUrl = blobUrls[item.link];
8291
+ return {
8292
+ src: blobUrl ?? "",
8293
+ fileName,
8294
+ hasError,
8295
+ isLoading: !hasError && !blobUrl,
8296
+ };
8297
+ }), [items, blobUrls, failedLinks]);
8298
+ };
8299
+
8224
8300
  const EXTENSION_TO_MIME = {
8225
8301
  apng: "image/apng",
8226
8302
  avif: "image/avif",
@@ -8267,20 +8343,6 @@ const getFileNameFromUrl = (url) => {
8267
8343
  }
8268
8344
  };
8269
8345
 
8270
- const getResourceUrl = (url) => {
8271
- return url ? (url.startsWith("http") ? url : `/sp/resources/file/${url}`) : "";
8272
- };
8273
-
8274
- const buildPreviewImage$1 = (item) => {
8275
- const fileType = getFileType(item.mimeType, item.name);
8276
- const isImage = IMAGE_FILE_TYPES.includes(fileType);
8277
- const src = isImage
8278
- ? item.isExternal
8279
- ? item.link
8280
- : getResourceUrl(item.link)
8281
- : getFileTypeIcon(fileType);
8282
- return { src, fileName: item.name };
8283
- };
8284
8346
  const EditAttachmentContainer = memo(({ type, elementConfig, renderElement }) => {
8285
8347
  const { api } = useGlobalContext();
8286
8348
  const { selectAttachmentsFromCatalog } = useWidgetContext(type);
@@ -8291,7 +8353,7 @@ const EditAttachmentContainer = memo(({ type, elementConfig, renderElement }) =>
8291
8353
  const [previewIndex, setPreviewIndex] = useState(null);
8292
8354
  const [uploading, setUploading] = useState(false);
8293
8355
  const [isLinkDialogOpen, , setLinkDialogOpen] = useToggle(false);
8294
- const previewImages = useMemo(() => items.map(buildPreviewImage$1), [items]);
8356
+ const previewImages = usePreviewImages({ items, active: previewIndex !== null });
8295
8357
  const orderedPreviewImages = useMemo(() => {
8296
8358
  if (previewIndex === null)
8297
8359
  return previewImages;
@@ -8300,7 +8362,7 @@ const EditAttachmentContainer = memo(({ type, elementConfig, renderElement }) =>
8300
8362
  ...previewImages.filter((_, idx) => idx !== previewIndex),
8301
8363
  ];
8302
8364
  }, [previewImages, previewIndex]);
8303
- const persist = useCallback((next) => onChange(JSON.stringify(next)), [onChange]);
8365
+ const persist = useCallback((next) => onChange(next), [onChange]);
8304
8366
  const handlePreview = useCallback((link) => {
8305
8367
  const idx = items.findIndex(item => item.link === link);
8306
8368
  if (idx >= 0)
@@ -8360,23 +8422,14 @@ const EditAttachmentContainer = memo(({ type, elementConfig, renderElement }) =>
8360
8422
  return (jsxs(AttachmentsContainer, { id: id, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsx(AttachmentsHeader, { alias: renderElement?.({ id: "alias" }), count: items.length, viewMode: viewMode, onChangeViewMode: setViewMode }), jsx(AttachmentsContent, { children: viewMode === "grid" ? (jsx(AttachmentsGrid, { items: visibleItems, isEdit: true, onPreview: handlePreview, onDelete: handleDelete })) : (jsx(AttachmentsList, { items: visibleItems, isEdit: true, onPreview: handlePreview, onDelete: handleDelete })) }), hasMore && !showMore && (jsx(ShowMoreButton, { hiddenCount: hiddenCount, onClick: handleShowMore })), jsx(AddButton, { accept: fileExtensions, onSelectFiles: uploading ? () => undefined : handleUpload, onSelectFromCatalog: handleSelectFromCatalog, onSelectFromLink: handleOpenLinkDialog }), jsx(AttachmentLinkDialog, { isOpen: isLinkDialogOpen, onClose: handleCloseLinkDialog, onSubmit: handleAddByLink }), previewIndex !== null && (jsx(Preview, { images: orderedPreviewImages, isOpen: previewIndex !== null, onClose: handleClosePreview }))] }));
8361
8423
  });
8362
8424
 
8363
- const buildPreviewImage = (item) => {
8364
- const fileType = getFileType(item.mimeType, item.name);
8365
- const isImage = IMAGE_FILE_TYPES.includes(fileType);
8366
- const src = isImage
8367
- ? item.isExternal
8368
- ? item.link
8369
- : getResourceUrl(item.link)
8370
- : getFileTypeIcon(fileType);
8371
- return { src, fileName: item.name };
8372
- };
8373
8425
  const AttachmentContainer = memo(({ type, elementConfig, renderElement }) => {
8426
+ const { t } = useGlobalContext();
8374
8427
  const { expandedContainers } = useWidgetContext(type);
8375
8428
  const { items, visibleItems, viewMode, setViewMode, showMore, setShowMore, hasMore, hiddenCount } = useAttachmentContainer({ type, elementConfig });
8376
8429
  const { id, style, options } = elementConfig || {};
8377
8430
  const { expandable, expanded } = options || {};
8378
8431
  const [previewIndex, setPreviewIndex] = useState(null);
8379
- const previewImages = useMemo(() => items.map(buildPreviewImage), [items]);
8432
+ const previewImages = usePreviewImages({ items, active: previewIndex !== null });
8380
8433
  const orderedPreviewImages = useMemo(() => {
8381
8434
  if (previewIndex === null)
8382
8435
  return previewImages;
@@ -8393,7 +8446,10 @@ const AttachmentContainer = memo(({ type, elementConfig, renderElement }) => {
8393
8446
  const handleClosePreview = useCallback(() => setPreviewIndex(null), []);
8394
8447
  const handleShowMore = useCallback(() => setShowMore(true), [setShowMore]);
8395
8448
  const isVisible = isVisibleContainer(id, expandable, expanded, expandedContainers);
8396
- return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsxs(Container, { id: id, isColumn: true, style: style, 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: orderedPreviewImages, isOpen: previewIndex !== null, onClose: handleClosePreview }))] }))] }));
8449
+ return (jsxs(Fragment$1, { children: [jsx(ExpandableTitle, { elementConfig: elementConfig, type: type, renderElement: renderElement }), isVisible && (jsx(Container, { id: id, style: { ...BASE_CONTAINER_STYLE, ...style }, 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: orderedPreviewImages, isOpen: previewIndex !== null, onClose: handleClosePreview, errorTitleText: t("attachments.resourceUnavailable", {
8450
+ ns: "common",
8451
+ defaultValue: "Ресурс недоступен",
8452
+ }) }))] }) }))] }));
8397
8453
  });
8398
8454
 
8399
8455
  const ContainerDivider = styled(Divider) `
@@ -8614,17 +8670,17 @@ const HeaderFrontView = styled(Flex) `
8614
8670
  width: 100%;
8615
8671
  font: ${({ theme: { fonts } }) => fonts.subtitle};
8616
8672
  `;
8617
- const HeaderContainer = styled(FlexSpan) `
8673
+ const HeaderContainer = styled(Flex) `
8618
8674
  display: flex;
8619
8675
  flex-grow: 1;
8620
8676
  flex-wrap: nowrap;
8621
- width: calc(100% - 48px);
8677
+ width: calc(100% - 3rem);
8622
8678
  `;
8623
8679
  const FeatureTitleContainer = styled.div `
8624
8680
  display: -webkit-box;
8625
8681
  max-width: 100%;
8626
8682
  width: 100%;
8627
- margin: 0.5rem 0;
8683
+ margin-top: 0.5rem;
8628
8684
  -webkit-line-clamp: 2;
8629
8685
  -webkit-box-orient: vertical;
8630
8686
  overflow: hidden;
@@ -8680,6 +8736,10 @@ const Header = styled(Flex) `
8680
8736
  ${({ $isRow }) => $isRow && RowHeaderMixin};
8681
8737
  `;
8682
8738
  const DefaultHeaderWrapper = styled.div `
8739
+ padding: 1rem 0 0 1rem;
8740
+ margin: -1rem 0 0 -1rem;
8741
+ background: url(${img$4}) 50% -2rem no-repeat;
8742
+
8683
8743
  ${Header} {
8684
8744
  padding: 0 1.5rem 1.5rem 0;
8685
8745
  }
@@ -8706,7 +8766,7 @@ const HeaderTitle = ({ noFeature }) => {
8706
8766
  stringFormat: layerDefinitionAttribute.stringFormat,
8707
8767
  })) ||
8708
8768
  feature?.id);
8709
- }, [attributes, feature, configuration]);
8769
+ }, [configuration, attributes, t, feature?.id]);
8710
8770
  return (jsxs(HeaderTitleContainer, { children: [noFeature ? (jsx(FeatureTitleContainer, { children: t("noObjectFound", { ns: "dashboard", defaultValue: "Объектов не найдено" }) })) : (jsx(FeatureTitleContainer, { clickable: true, children: jsx(Tooltip$1, { arrow: true, placement: "top", content: t("zoomToFeature", { ns: "dashboard", defaultValue: "Приблизить к объекту" }), delay: [600, 0], children: ref => (jsx(FlexSpan, { ref: ref, onClick: () => zoomToFeatures([feature]), children: resultTitle })) }) })), jsx(LayerDescription, { title: resultDescription, children: resultDescription })] }));
8711
8771
  };
8712
8772
 
@@ -8765,81 +8825,14 @@ const LayerIcon = ({ layerInfo, error }) => {
8765
8825
  };
8766
8826
 
8767
8827
  const FeatureCardDefaultHeader = ({ noFeature }) => {
8768
- const { layerInfo } = useWidgetContext(WidgetType.FeatureCard);
8769
- return (jsx(DefaultHeaderWrapper, { children: jsx(Header, { "$isRow": true, children: jsxs(HeaderFrontView, { isDefault: true, children: [jsxs(HeaderContainer, { children: [!!layerInfo?.name && jsx(LayerIcon, { layerInfo: layerInfo }), jsx(HeaderTitle, { noFeature: noFeature })] }), jsx(FeatureCardButtons, {})] }) }) }));
8770
- };
8771
-
8772
- const HeaderFontColorMixin$1 = css `
8773
- ${HeaderTitleContainer}, ${LayerDescription} {
8774
- color: ${({ $fontColor }) => $fontColor};
8775
- }
8776
- `;
8777
- const HeaderWrapperMixin$1 = css `
8778
- ${Header} {
8779
- min-height: 5.25rem;
8780
- }
8781
-
8782
- ${HeaderContainer} {
8783
- max-width: 100%;
8784
- width: 100%;
8785
- }
8786
-
8787
- ${FeatureControls} {
8788
- max-width: calc(100% - 2rem);
8789
- width: calc(100% - 2rem);
8790
- margin-top: -0.5rem;
8791
- padding-top: 1rem;
8792
- border-radius: ${({ theme: { borderRadius } }) => borderRadius.medium};
8793
- }
8794
-
8795
- ${({ $fontColor }) => !!$fontColor && HeaderFontColorMixin$1};
8796
- `;
8797
- const GradientHeaderWrapper = styled.div `
8798
- ${Header} {
8799
- background: ${({ $bgColor }) => $bgColor || "radial-gradient(129.21% 133.22% at 51.94% 0%, #e8fffe 9.48%, #5fcaff 100%)"};
8800
- }
8801
-
8802
- ${HeaderContainer} {
8803
- align-items: center;
8804
- }
8805
-
8806
- ${HeaderTitleContainer} {
8807
- margin-left: 0;
8808
- text-align: center;
8809
- }
8810
-
8811
- ${FeatureTitleContainer} {
8812
- text-align: center;
8813
- }
8814
-
8815
- ${LayerDescription} {
8816
- text-align: center;
8817
- }
8818
-
8819
- ${HeaderWrapperMixin$1};
8820
- `;
8821
-
8822
- const FeatureCardGradientHeader = ({ isRow }) => {
8823
8828
  const { layerInfo } = useWidgetContext(WidgetType.FeatureCard);
8824
8829
  const { config } = useWidgetConfig(WidgetType.FeatureCard);
8825
8830
  const { header } = config || {};
8826
8831
  const { options } = header || {};
8827
- const { fontColor, bgColor } = options || {};
8828
- const renderElement = useHeaderRender(header);
8829
- return (jsx(GradientHeaderWrapper, { "$fontColor": fontColor, "$bgColor": bgColor, children: jsx(ThemeProvider, { theme: defaultTheme, children: jsx(Header, { "$isRow": isRow, children: jsxs(HeaderFrontView, { children: [jsxs(HeaderContainer, { children: [jsx(LayerIcon, { layerInfo: layerInfo }), jsx(FeatureCardTitle, { title: renderElement({
8830
- id: "title",
8831
- wrap: false,
8832
- }), description: renderElement({
8833
- id: "description",
8834
- wrap: false,
8835
- }) })] }), jsx(FeatureCardButtons, {})] }) }) }) }));
8832
+ const { themeName } = options || {};
8833
+ return (jsx(DefaultHeaderWrapper, { children: jsx(ThemeProvider, { theme: getThemeByName(themeName), children: jsx(Header, { "$isRow": true, children: jsxs(HeaderFrontView, { isDefault: true, children: [jsxs(HeaderContainer, { children: [!!layerInfo?.name && jsx(LayerIcon, { layerInfo: layerInfo }), jsx(HeaderTitle, { noFeature: noFeature })] }), jsx(FeatureCardButtons, {})] }) }) }) }));
8836
8834
  };
8837
8835
 
8838
- const LayerIconClickable = styled.div `
8839
- display: flex;
8840
- align-items: center;
8841
- cursor: pointer;
8842
- `;
8843
8836
  const HeaderFontColorMixin = css `
8844
8837
  ${HeaderTitleContainer}, ${HeaderTitleContainer} *, ${LayerDescription} {
8845
8838
  color: ${({ $fontColor }) => $fontColor};
@@ -8869,13 +8862,18 @@ const HeaderIcon = styled(Flex) `
8869
8862
  position: absolute;
8870
8863
  top: 0;
8871
8864
  right: 0;
8872
- justify-content: flex-end;
8873
8865
  align-items: center;
8874
- min-width: 7.5rem;
8866
+ justify-content: center;
8867
+ width: 7.625rem;
8875
8868
  height: 100%;
8876
8869
 
8877
- span[kind]:after {
8878
- font-size: 7.5rem;
8870
+ span[kind] {
8871
+ width: 4rem;
8872
+
8873
+ :after {
8874
+ font-size: 4rem;
8875
+ color: rgba(255, 255, 255, 0.36);
8876
+ }
8879
8877
  }
8880
8878
 
8881
8879
  span[kind]:after,
@@ -8901,34 +8899,77 @@ const BigIconHeaderMixin = css `
8901
8899
  }
8902
8900
  }
8903
8901
  `;
8904
- const IconHeaderWrapper = styled.div `
8902
+ const WithPaddingHeaderMixin = css `
8905
8903
  ${Header} {
8906
- width: calc(100% + 0.5rem);
8907
- margin: -1rem -1rem 0.5rem -1rem;
8908
- padding: 1.5rem;
8909
- border-top-left-radius: 0.5rem;
8910
- border-top-right-radius: 0.5rem;
8904
+ width: calc(100% - 1rem);
8905
+ margin: -0.5rem -0.5rem 0.5rem -0.5rem;
8906
+ }
8907
+ `;
8908
+ const BottomBlurHeaderMixin = css `
8909
+ ${Header} {
8910
+ margin-bottom: 0;
8911
+
8912
+ &::after {
8913
+ content: "";
8914
+ position: absolute;
8915
+ left: 0;
8916
+ right: 0;
8917
+ bottom: 0;
8918
+ height: 1.5rem;
8919
+ z-index: 11;
8920
+ pointer-events: none;
8921
+ background: ${({ theme: { palette } }) => palette.background};
8922
+ mask-image: linear-gradient(to top, #000 0%, transparent 100%);
8923
+ -webkit-mask-image: linear-gradient(to top, #000 0%, transparent 100%);
8924
+ border-radius: 0 0 0.5rem 0.5rem;
8925
+ }
8926
+ }
8927
+
8928
+ ${HeaderFrontView} {
8929
+ z-index: 12;
8930
+ }
8931
+ `;
8932
+ const GradientHeaderWrapper = styled.div `
8933
+ ${Header} {
8934
+ margin: -1rem -1rem 1rem -1rem;
8935
+ padding: 1rem 1.5rem;
8936
+ border-radius: 0.5rem;
8911
8937
  background: ${({ $bgColor }) => $bgColor || "linear-gradient(96.55deg, #FFFCD3 0%, #B4DC47 100%)"};
8938
+ overflow: hidden;
8912
8939
  }
8913
8940
 
8914
8941
  ${HeaderWrapperMixin};
8915
8942
 
8916
8943
  ${({ $bigIcon }) => $bigIcon && BigIconHeaderMixin};
8944
+
8945
+ ${({ $withPadding }) => $withPadding && WithPaddingHeaderMixin};
8946
+
8947
+ ${({ $bottomBlur }) => $bottomBlur && BottomBlurHeaderMixin};
8948
+ `;
8949
+
8950
+ const LayerIconClickable = styled.div `
8951
+ display: flex;
8952
+ align-items: center;
8953
+ cursor: pointer;
8917
8954
  `;
8918
8955
 
8919
- const FeatureCardIconHeader = ({ isRow }) => {
8956
+ const HeaderLayerIcon = () => {
8920
8957
  const { t } = useGlobalContext();
8921
8958
  const { layerInfo, feature } = useWidgetContext(WidgetType.FeatureCard);
8922
- const { config } = useWidgetConfig(WidgetType.FeatureCard);
8923
8959
  const zoomToFeatures = useZoomToFeatures();
8924
8960
  const getMaxZoomTo = useMaxZoomTo();
8925
8961
  const [optionsMaxZoomTo, layerMaxZoomTo] = useMemo(() => getMaxZoomTo(layerInfo?.name), [layerInfo?.name, getMaxZoomTo]);
8962
+ const handleIconClick = useCallback(() => zoomToFeatures([feature], { maxZoom: layerMaxZoomTo ?? optionsMaxZoomTo }), [zoomToFeatures, feature, layerMaxZoomTo, optionsMaxZoomTo]);
8963
+ return (jsx(Tooltip$1, { arrow: true, placement: "top", content: t("zoomToFeature", { ns: "dashboard", defaultValue: "Приблизить к объекту" }), delay: [600, 0], children: ref => (jsx(LayerIconClickable, { ref: ref, onClick: handleIconClick, children: jsx(LayerIcon, { layerInfo: layerInfo }) })) }));
8964
+ };
8965
+
8966
+ const FeatureCardGradientHeader = ({ isRow }) => {
8967
+ const { config } = useWidgetConfig(WidgetType.FeatureCard);
8926
8968
  const { header } = config || {};
8927
8969
  const { options } = header || {};
8928
- const { fontColor, bgColor, bigIcon } = options || {};
8970
+ const { fontColor, bgColor, bigIcon, withPadding, bottomBlur, themeName } = options || {};
8929
8971
  const renderElement = useHeaderRender(header);
8930
- const handleIconClick = useCallback(() => zoomToFeatures([feature], { maxZoom: layerMaxZoomTo ?? optionsMaxZoomTo }), [zoomToFeatures, feature, layerMaxZoomTo, optionsMaxZoomTo]);
8931
- return (jsx(IconHeaderWrapper, { "$fontColor": fontColor, "$bgColor": bgColor, "$bigIcon": bigIcon, children: jsx(ThemeProvider, { theme: defaultTheme, children: jsxs(Header, { "$isRow": isRow, children: [jsxs(HeaderFrontView, { children: [jsxs(HeaderContainer, { children: [jsx(Tooltip$1, { arrow: true, placement: "top", content: t("zoomToFeature", { ns: "dashboard", defaultValue: "Приблизить к объекту" }), delay: [600, 0], children: ref => (jsx(LayerIconClickable, { ref: ref, onClick: handleIconClick, children: jsx(LayerIcon, { layerInfo: layerInfo }) })) }), jsx(FeatureCardTitle, { title: renderElement({
8972
+ return (jsx(GradientHeaderWrapper, { "$fontColor": fontColor, "$bgColor": bgColor, "$bigIcon": bigIcon, "$withPadding": withPadding, "$bottomBlur": bottomBlur, children: jsx(ThemeProvider, { theme: getThemeByName(themeName), children: jsxs(Header, { "$isRow": isRow, children: [jsxs(HeaderFrontView, { children: [jsxs(HeaderContainer, { column: true, children: [jsx(HeaderLayerIcon, {}), jsx(FeatureCardTitle, { title: renderElement({
8932
8973
  id: "title",
8933
8974
  wrap: false,
8934
8975
  }), description: renderElement({
@@ -9799,13 +9840,12 @@ const HeaderSlideshow = styled.div `
9799
9840
  `;
9800
9841
 
9801
9842
  const FeatureCardSlideshowHeader = ({ isRow }) => {
9802
- const { layerInfo } = useWidgetContext(WidgetType.FeatureCard);
9803
9843
  const { config } = useWidgetConfig(WidgetType.FeatureCard);
9804
9844
  const { header } = config || {};
9805
9845
  const { options } = header || {};
9806
- const { height, withPadding } = options || {};
9846
+ const { height, withPadding, themeName } = options || {};
9807
9847
  const renderElement = useHeaderRender(header);
9808
- return (jsx(SlideshowHeaderWrapper, { big: true, withPadding: withPadding, children: jsx(ThemeProvider, { theme: darkTheme, children: jsxs(Header, { "$isRow": isRow, children: [jsxs(HeaderFrontView, { children: [jsxs(HeaderContainer, { children: [jsx(LayerIcon, { layerInfo: layerInfo }), jsx(FeatureCardTitle, { title: renderElement({
9848
+ return (jsx(SlideshowHeaderWrapper, { big: true, withPadding: withPadding, children: jsx(ThemeProvider, { theme: getThemeByName(themeName), children: jsxs(Header, { "$isRow": isRow, children: [jsxs(HeaderFrontView, { children: [jsxs(HeaderContainer, { column: true, children: [jsx(HeaderLayerIcon, {}), jsx(FeatureCardTitle, { title: renderElement({
9809
9849
  id: "title",
9810
9850
  wrap: false,
9811
9851
  }), description: renderElement({
@@ -10141,13 +10181,6 @@ const ElementModal = memo(({ type = WidgetType.Dashboard, elementConfig }) => {
10141
10181
  return (jsxs(Fragment$1, { children: [jsx(ModalIcon, { kind: icon || "new_window", onClick: handleOpen, children: title }), jsxs(Dialog, { maxWidth: maxWidth, minWidth: minWidth, minHeight: minHeight, isOpen: isOpen, modal: true, onCloseRequest: handleClose, style: { paddingBottom: "2rem" }, children: [jsx(DialogTitle, { children: jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [!!title && jsx("span", { children: title }), jsx(IconButton, { kind: "close", onClick: handleClose })] }) }), jsx(DialogContent, { children: isLoading ? (jsx(DashboardLoading, {})) : (jsx(Container, { isColumn: true, noBorders: true, children: jsx(ContainerChildren, { type: type, items: modalContent, isMain: true, renderElement: renderElement }) })) })] })] }));
10142
10182
  });
10143
10183
 
10144
- const ElementLayerName = memo(({ type }) => {
10145
- const { layerInfo } = useWidgetContext(type);
10146
- if (!layerInfo?.name)
10147
- return null;
10148
- return jsx("span", { children: layerInfo.name });
10149
- });
10150
-
10151
10184
  const elementComponents = {
10152
10185
  control: ElementControl,
10153
10186
  image: ElementImage,
@@ -10164,7 +10197,6 @@ const elementComponents = {
10164
10197
  markdown: ElementMarkdown,
10165
10198
  uploader: ElementUploader,
10166
10199
  modal: ElementModal,
10167
- layerName: ElementLayerName,
10168
10200
  };
10169
10201
 
10170
10202
  const getElementValue = ({ getDefaultContainer, ...props }) => {
@@ -10198,6 +10230,9 @@ const getElementValue = ({ getDefaultContainer, ...props }) => {
10198
10230
  null
10199
10231
  : null;
10200
10232
  }
10233
+ if (type === "layerName") {
10234
+ return layerInfo?.name || "";
10235
+ }
10201
10236
  const ElementComponent = type ? elementComponents[type] : null;
10202
10237
  return ElementComponent ? (jsx(ElementComponent, { ...props })) : (getDefaultContainer?.());
10203
10238
  };
@@ -10254,8 +10289,6 @@ const getFeatureCardHeader = (templateName) => {
10254
10289
  return FeatureCardSlideshowHeader;
10255
10290
  case HeaderTemplate.Gradient:
10256
10291
  return FeatureCardGradientHeader;
10257
- case HeaderTemplate.Icon:
10258
- return FeatureCardIconHeader;
10259
10292
  case HeaderTemplate.Default:
10260
10293
  default:
10261
10294
  return FeatureCardDefaultHeader;
@@ -11172,6 +11205,10 @@ const getRelatedAttribute = (layerInfo, sourceAttributeName, relatedLayerName) =
11172
11205
  return attributeConfig?.options?.relatedAttributes?.find(({ layerName }) => layerName === relatedLayerName);
11173
11206
  };
11174
11207
 
11208
+ const getResourceUrl = (url) => {
11209
+ return url ? (url.startsWith("http") ? url : `/sp/resources/file/${url}`) : "";
11210
+ };
11211
+
11175
11212
  const getSlideshowImages = ({ element, attribute, }) => {
11176
11213
  const { defaultValue, options } = element;
11177
11214
  const { separator } = options || {};
@@ -11221,6 +11258,10 @@ const getTemplateNameFromAttribute = (attribute) => {
11221
11258
  }
11222
11259
  };
11223
11260
 
11261
+ const getThemeByName = (themeName) => {
11262
+ return themeName === ThemeName.Dark ? darkTheme : defaultTheme;
11263
+ };
11264
+
11224
11265
  const getDisplayTemplateNameFromAttribute = (attribute) => {
11225
11266
  if (attribute?.subType === StringSubType.Attachments) {
11226
11267
  return ContainerTemplate.Attachment;
@@ -13315,5 +13356,5 @@ const Map$1 = ({ zIndex, lowerSiblings, upperSiblings, onError, children, ...res
13315
13356
  }, children: children }), upperSiblings] }));
13316
13357
  };
13317
13358
 
13318
- export { AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, 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_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_PAINT, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_PAINT, DEFAULT_FILL_PAINT, DEFAULT_FILTER_PADDING, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_PAINT, DEFAULT_LNG, 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, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardGradientHeader, FeatureCardHeader, FeatureCardIconHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GlobalContext, GlobalProvider, Header, HeaderContainer, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroup, 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, OneColumnContainer, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, RoundedBackgroundContainer, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, SvgImage, TIME_ZONE_FORMAT, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, WidgetType, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyVarsToCondition, checkEqualOrIncludes, checkIsLoading, createConfigLayer, createConfigPage, createNewPageId, createTreeNode, dateOptions, debounce, decimalOpacityToHex, eqlParametersToPayload, findAttributeInExpression, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, getActualExtrusionHeight, getAttributeByName, getAttributeValue, getAttributesConfiguration, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getLayerInfo, getLayerInfoFromDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getSvgUrl, getTemplateNameFromAttribute, getTotalFromAttributes, getTotalFromRelatedFeatures, hexToRgba, isEmptyElementValue, isEmptyValue, isHiddenEmptyValue, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isVisibleContainer, metersPerPixel, numberOptions, parseClientStyle, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, rgbToHex, roundTotalSum, sliceShownOtherItems, timeOptions, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, treeNodesToProjectItems, updateDataSource, useAppHeight, useAutoCompleteControl, useChartChange, useChartData, useContainerAttributes, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSources, useDebouncedCallback, useDiffPage, useExpandableContainers, useExportPdf, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useIconsFromLayers, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRenderElement, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useZoomToFeatures, useZoomToPoint };
13359
+ export { AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, 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_CHART_ANGLE, DEFAULT_CHART_HEIGHT, DEFAULT_CHART_WIDTH, DEFAULT_CIRCLE_PAINT, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_PAINT, DEFAULT_FILL_PAINT, DEFAULT_FILTER_PADDING, DEFAULT_ID_ATTRIBUTE_NAME, DEFAULT_LAT, DEFAULT_LINE_PAINT, DEFAULT_LNG, 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, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardGradientHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GlobalContext, GlobalProvider, Header, HeaderContainer, HeaderFrontView, HeaderTemplate, HeaderTitleContainer, HiddenTitleItems, IconContainer, ImageContainer, LEFT_PANEL_HEADER_HEIGHT, Layer, LayerDescription, LayerGroup, 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, OneColumnContainer, POLL_SUBTASK_INTERVAL_MS, POLL_SUBTASK_TIMEOUT_MS, PROVIDER_PREFIX, PageNavigator, PageTitle, PageTitleContainer, PagesContainer, Pagination, PresentationHeader, PresentationHeaderButtons, PresentationHeaderTools, PresentationPanelContainer, PresentationPanelWrapper, PresentationWrapper, ProgressContainer, ProviderPrefix, RoundedBackgroundContainer, SERVER_NOTIFICATION_EVENT, STACK_BAR_TOTAL_HEIGHT, ScalingFactor, ServerNotificationsContext, ServerNotificationsProvider, SlideshowContainer, SmallPreviewContainer$1 as SmallPreviewContainer, SmallPreviewControl, SmallPreviewCounter, SmallPreviewImages, SmallPreviewLeft, SmallPreviewRight, StackBar, SvgImage, TIME_ZONE_FORMAT, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, WidgetType, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyVarsToCondition, checkEqualOrIncludes, checkIsLoading, createConfigLayer, createConfigPage, createNewPageId, createTreeNode, dateOptions, debounce, decimalOpacityToHex, eqlParametersToPayload, findAttributeInExpression, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, getActualExtrusionHeight, getAttributeByName, getAttributeValue, getAttributesConfiguration, getChartAxes, getChartFilterName, getChartMarkers, getConfigFilter, getContainerComponent, getDashboardHeader, getDataFromAttributes, getDataFromRelatedFeatures, getDataSource, getDataSourceFilterValue, getDate, getDefaultConfig, getDisplayTemplateNameFromAttribute, getElementValue, getFeatureAttributes, getFeatureCardHeader, getFilterComponent, getFilterSelectedItems, getFilterValue, getFormattedAttributes, getGradientColors, getLayerInfo, getLayerInfoFromDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, hexToRgba, isEmptyElementValue, isEmptyValue, isHiddenEmptyValue, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isVisibleContainer, metersPerPixel, numberOptions, parseClientStyle, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, rgbToHex, roundTotalSum, sliceShownOtherItems, timeOptions, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, treeNodesToProjectItems, updateDataSource, useAppHeight, useAutoCompleteControl, useChartChange, useChartData, useContainerAttributes, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSources, useDebouncedCallback, useDiffPage, useExpandableContainers, useExportPdf, useFetchImageWithAuth, useFetchWithAuth, useGetConfigLayer, useGlobalContext, useHeaderRender, useHideIfEmptyDataSource, useIconsFromLayers, useLayerHiddenAttributes, useLayerParams, useMapContext, useMapDraw, useMapImages, useMaxZoomTo, useProjectDashboardInit, usePythonSandbox, usePythonTask, useRedrawLayer, useRelatedDataSourceAttributes, useRenderElement, useServerNotificationsContext, useShownOtherItems, useToggle, useUpdateDataSource, useVisibleProjectItems, useWidgetConfig, useWidgetContext, useWidgetFilters, useWidgetPage, useWindowResize, useZoomToFeatures, useZoomToPoint };
13319
13360
  //# sourceMappingURL=react.esm.js.map