@evergis/react 4.0.130 → 4.0.132

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/components/Dashboard/components/Chart/styled.d.ts +7 -0
  2. package/dist/components/Dashboard/constants.d.ts +27 -0
  3. package/dist/components/Dashboard/hooks/index.d.ts +1 -0
  4. package/dist/components/Dashboard/hooks/useDataSourceLoading.d.ts +2 -0
  5. package/dist/components/Dashboard/hooks/useGlobalContext.d.ts +2 -0
  6. package/dist/components/Dashboard/types.d.ts +13 -0
  7. package/dist/components/Dashboard/utils/applyQueryFilters.d.ts +3 -1
  8. package/dist/components/Dashboard/utils/formatDataSourceCondition.d.ts +5 -1
  9. package/dist/components/Dashboard/utils/getMapViewDataSources.d.ts +7 -0
  10. package/dist/components/Dashboard/utils/index.d.ts +2 -0
  11. package/dist/components/Dashboard/utils/toConditionsArray.d.ts +2 -0
  12. package/dist/contexts/GlobalContext/types.d.ts +4 -0
  13. package/dist/index.js +376 -241
  14. package/dist/index.js.map +1 -1
  15. package/dist/react.esm.js +369 -243
  16. package/dist/react.esm.js.map +1 -1
  17. package/package.json +2 -2
  18. package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredData.d.ts +0 -28
  19. package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredDataDraft.d.ts +0 -25
  20. package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredDataSave.d.ts +0 -17
  21. package/dist/components/Dashboard/containers/StructuredDataContainer/useStructuredDataSchema.d.ts +0 -11
  22. package/dist/components/Dashboard/containers/StructuredDataContainer/utils/viewScroll.d.ts +0 -17
  23. package/dist/components/Dashboard/elements/ElementTable/hooks/useSurfaceColor.d.ts +0 -16
  24. package/dist/components/Dashboard/elements/ElementTable/useCellEditing.d.ts +0 -15
  25. package/dist/components/Dashboard/elements/ElementTable/useTableView.d.ts +0 -16
  26. package/dist/components/Dashboard/elements/ElementTable/utils/surfaceColor.d.ts +0 -13
package/dist/react.esm.js CHANGED
@@ -2,7 +2,7 @@ import styled, { createGlobalStyle, css, useTheme } from 'styled-components';
2
2
  import { Icon, IconButtonInnerChild, IconButton, Flex, transition, Chip, shadows, Description, Divider, Popup, Menu, IconToggleButton, LinearProgress, Tooltip as Tooltip$1, IconToggle, Preview, LegendToggler, DropdownField, MultiSelectContainer, IconButtonButton, useDragAndDropEffect, FlatButton, DraggableTreeContainer, DraggableTree, FlexSpan, Dialog, DialogTitle, ActionsGroup, DialogContent, DialogActions, RaisedButton, UploaderItemArea, UploaderTitleWrapper, ThemeProvider, darkTheme, CircularProgress, Switch, AutoComplete, Input, Slider, Dropdown, Checkbox, DatePicker, getLocale, H2, Blank, Popover, NumberInput, Uploader, NumberRangeSlider, useAsyncAutocomplete, RangeNumberInput, TreeDropdown, defaultTheme, dateFormat } from '@evergis/uilib-gl';
3
3
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
4
4
  import { isValidElement, Fragment, createContext, memo, useRef, useState, useCallback, useEffect, useContext, useMemo, createElement, useLayoutEffect, forwardRef } from 'react';
5
- import { lineChartClassNames, BarChart as BarChart$1, barChartClassNames, LineChart, PieChart } from '@evergis/charts';
5
+ import { barChartClassNames, lineChartClassNames, BarChart as BarChart$1, LineChart, PieChart } from '@evergis/charts';
6
6
  import { AttributeType, AttributeIconType, generateId, STORAGE_TOKEN_KEY, parseJwt, STORAGE_REFRESH_TOKEN_KEY, RemoteTaskStatus, AttributeConfigurationType, LayerServiceType, OgcGeometryType, StringSubType } from '@evergis/api';
7
7
  import { isNil, isEmpty, uniqueId, isEqual, unescape } from 'lodash';
8
8
  import { Color as Color$1, ColorScale } from '@evergis/color';
@@ -73,205 +73,6 @@ const AddFeatureButton = ({ title, icon = "feature_add" /* , layerName, geometry
73
73
  return (jsx(IconButton, { kind: icon, primary: true, onClick: handleAddFeature, children: title }));
74
74
  };
75
75
 
76
- const ChartTooltipTable = styled.table.withConfig({ displayName: "ChartTooltipTable", componentId: "sc-1fk3ts5" }) `
77
- td {
78
- padding: 0;
79
- }
80
-
81
- tr:not(:last-child) td {
82
- padding-bottom: 0.375rem;
83
- }
84
- `;
85
- const ChartTooltip = styled(Flex).withConfig({ displayName: "ChartTooltip", componentId: "sc-1iyyyv7" }) `
86
- flex-wrap: nowrap;
87
- background: rgb(48, 69, 79);
88
- border-radius: 0.25rem;
89
- color: white;
90
-
91
- :not(:last-child) {
92
- margin-bottom: 0.25rem;
93
- }
94
- `;
95
- const ChartTooltipLabel = styled.div.withConfig({ displayName: "ChartTooltipLabel", componentId: "sc-gl0qxz" }) `
96
- margin-right: 0.25rem;
97
- `;
98
- const ChartTooltipColor = styled.div.withConfig({ displayName: "ChartTooltipColor", componentId: "sc-tmvvbh" }) `
99
- width: 0.625rem;
100
- height: 0.625rem;
101
- background-color: ${({ $color }) => $color};
102
- border-radius: ${({ theme: { borderRadius } }) => borderRadius.smallest};
103
- margin-right: 0.25rem;
104
- `;
105
- const ChartLegendColor$1 = styled.div.withConfig({ displayName: "ChartLegendColor", componentId: "sc-l66k4q" }) `
106
- width: 0.5rem;
107
- height: 0.5rem;
108
- background-color: ${({ $color }) => $color};
109
- border-radius: 0.125rem;
110
- `;
111
- const ChartLegendValue = styled.div.withConfig({ displayName: "ChartLegendValue", componentId: "sc-1d7z775" }) `
112
- opacity: 0.65;
113
- `;
114
- const ChartTooltipRow = styled(Flex).withConfig({ displayName: "ChartTooltipRow", componentId: "sc-ih1uc5" }) `
115
- display: flex;
116
- flex-direction: row;
117
- flex-wrap: nowrap;
118
- align-items: center;
119
- margin-top: 0.5rem;
120
- line-height: 0;
121
-
122
- ${ChartLegendColor$1} {
123
- margin-right: 0.25rem;
124
- }
125
- `;
126
- const ChartTooltipName = styled.div.withConfig({ displayName: "ChartTooltipName", componentId: "sc-sm4g0t" }) `
127
- margin-right: 1rem;
128
- opacity: 0.65;
129
- `;
130
- const PieChartCenter = styled.div.withConfig({ displayName: "PieChartCenter", componentId: "sc-1le93jy" }) `
131
- position: absolute;
132
- top: 50%;
133
- left: 50%;
134
- transform: translate(-50%, -50%);
135
- text-align: center;
136
- font-weight: bold;
137
- font-size: 1.5rem;
138
- `;
139
- const ChartWrapperContainer = styled.div.withConfig({ displayName: "ChartWrapperContainer", componentId: "sc-1f4x9zv" }) `
140
- position: relative;
141
- width: 100%;
142
- `;
143
- /*
144
- * fill-режим: обёртка забирает всю доступную ячейку (её высоту задаёт флекс-цепочка, а не контент графика),
145
- * на неё вешается ref для ResizeObserver — меряем обе оси без цикла. Плоский div (не Flex uilib), как соседний
146
- * ChartWrapperContainer, чтобы ref гарантированно дошёл до DOM-узла. Тело графика центрируется внутри.
147
- */
148
- const ChartFillMeasure = styled.div.withConfig({ displayName: "ChartFillMeasure", componentId: "sc-1r4oerb" }) `
149
- position: relative;
150
- display: flex;
151
- align-items: center;
152
- justify-content: center;
153
- width: 100%;
154
- height: 100%;
155
- min-width: 0;
156
- min-height: 0;
157
- overflow: hidden;
158
-
159
- /* SVG по умолчанию inline, поэтому под ним остаётся зазор базовой линии (~4px при line-height
160
- 18.4px): вне fill его скрывал запас высоты, а тело, точно заполнившее ячейку, из-за него
161
- вылезает за нижнюю границу. Блочный SVG зазора не даёт. */
162
- svg {
163
- display: block;
164
- }
165
- `;
166
- const Tooltip = styled.div.withConfig({ displayName: "Tooltip", componentId: "sc-1va8cy3" }) `
167
- position: relative;
168
- border-radius: 0.25rem;
169
- background-color: rgba(28, 33, 48);
170
- padding: 0.5rem;
171
- box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.15);
172
- font-size: 0.75rem;
173
- transform: ${({ transform }) => transform};
174
- color: white;
175
-
176
- :before {
177
- position: absolute;
178
- display: block;
179
- content: "";
180
- width: 0;
181
- height: 0;
182
- }
183
- `;
184
- const LineChartStyles = createGlobalStyle `
185
- .dashboardLineChartTooltip.${lineChartClassNames.lineChartMouseLabel} {
186
- .${lineChartClassNames.lineChartLabelFlex} {
187
- justify-content: center;
188
- align-items: flex-end;
189
-
190
- ${Tooltip} {
191
- margin: 0 0 12px 0;
192
-
193
- :before {
194
- top: auto;
195
- bottom: 0;
196
- left: 50%;
197
- transform: translate(-50%, 100%);
198
- border-left: 4px solid transparent;
199
- border-right: 4px solid transparent;
200
- border-top: 4px solid rgba(28, 33, 48, 0.9);
201
- }
202
- }
203
- }
204
- }
205
-
206
- .${lineChartClassNames.lineChartYScaleGlobal}, .${lineChartClassNames.lineChartXScaleGlobal} {
207
- .domain {
208
- visibility: hidden;
209
- }
210
-
211
- .tick {
212
- text {
213
- fill: ${({ theme: { palette } }) => palette.textDisabled};
214
- }
215
-
216
- line {
217
- visibility: hidden;
218
- }
219
- }
220
- }
221
-
222
- .${lineChartClassNames.lineChartXScaleGlobal} {
223
- .tick {
224
- :first-of-type {
225
- text {
226
- text-anchor: start;
227
- }
228
- }
229
-
230
- :last-of-type {
231
- text {
232
- text-anchor: end;
233
- }
234
- }
235
- }
236
- }
237
-
238
- .${lineChartClassNames.lineChartLine} {
239
- stroke-width: 2px;
240
- }
241
-
242
- .${lineChartClassNames.lineChartLabel} {
243
- color: ${({ theme: { palette } }) => palette.textPrimary};
244
- }
245
-
246
- .${lineChartClassNames.lineChartMouseCircle} {
247
- stroke: #ffffff;
248
- stroke-width: 2px;
249
- }
250
-
251
- .${lineChartClassNames.lineChartGridLineX} {
252
- stroke: ${({ theme: { palette } }) => palette.element};
253
- }
254
-
255
- text {
256
- fill: ${({ theme: { palette } }) => palette.textDisabled};
257
- }
258
- `;
259
- const StyledBarChart = styled(BarChart$1).withConfig({ displayName: "StyledBarChart", componentId: "sc-1l1kx80" }) `
260
- .domain {
261
- display: none;
262
- }
263
-
264
- .tick {
265
- text {
266
- fill: ${({ theme: { palette } }) => palette.textDisabled};
267
- }
268
-
269
- line {
270
- visibility: hidden;
271
- }
272
- }
273
- `;
274
-
275
76
  function range(start, stop, step) {
276
77
  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
277
78
 
@@ -3539,6 +3340,18 @@ const DEFAULT_CHART_ANGLE = 4;
3539
3340
  const DEFAULT_CHART_HEIGHT = 90;
3540
3341
  const STACK_BAR_TOTAL_HEIGHT = 20;
3541
3342
  const FILTER_PREFIX = "%";
3343
+ /** Имя системного геометрического фильтра — выделение, нарисованное пользователем на карте. */
3344
+ const GEOMETRY_FILTER_NAME = "geometry";
3345
+ /** Имя системного фильтра «экстент видимой области карты» (EWKT, `SRID=3857`). */
3346
+ const EXTENT_FILTER_NAME = "extent";
3347
+ /** Имя системного фильтра «уровень зума карты» (целое число). */
3348
+ const ZOOM_FILTER_NAME = "zoom";
3349
+ /**
3350
+ * Системные фильтры текущего вида карты. Их значения приходят не из `SelectedFilters`, а из
3351
+ * `GlobalContext`, поэтому имена зарезервированы: одноимённый пользовательский фильтр будет
3352
+ * перехвачен системной подстановкой — ровно как в случае `geometry`.
3353
+ */
3354
+ const MAP_VIEW_FILTER_NAMES = [EXTENT_FILTER_NAME, ZOOM_FILTER_NAME];
3542
3355
  const PROVIDER_PREFIX = "$";
3543
3356
  var ProviderPrefix;
3544
3357
  (function (ProviderPrefix) {
@@ -3574,6 +3387,22 @@ const ATTRIBUTE_ICON_ELEMENT_TYPES = {
3574
3387
  const EMPTY_DATA_SOURCE_LAYER_INFO = {
3575
3388
  configuration: { attributesConfiguration: { attributes: [] } },
3576
3389
  };
3390
+ /**
3391
+ * z-index плавающих слоёв дашборда: тултипы графиков и выпадающие списки фильтров.
3392
+ *
3393
+ * Тултипы графиков (`@evergis/charts`) и поповеры дропдаунов рендерятся порталом в `body`, где
3394
+ * их собственные z-index (100 у Bar/Line, 103 у Pie) ниже модального окна `Dialog` из
3395
+ * `@evergis/uilib-gl` (110) — внутри модалки дашборда они уходили под окно.
3396
+ */
3397
+ const DASHBOARD_OVERLAY_Z_INDEX = 1000;
3398
+ /**
3399
+ * Стиль контейнера тултипа `PieChart`: там z-index проставляется инлайном (103), поэтому поднять
3400
+ * его CSS-классом нельзя — только через `tooltipStyle`. Ключ пишем в CSS-нотации: значение уходит
3401
+ * в `d3.selection.style()` → `setProperty`, а camelCase он не понимает.
3402
+ */
3403
+ const PIE_CHART_TOOLTIP_STYLE = {
3404
+ "z-index": `${DASHBOARD_OVERLAY_Z_INDEX}`,
3405
+ };
3577
3406
  const DEFAULT_DROPDOWN_WIDTH = 312;
3578
3407
  const DEFAULT_FILTER_PADDING = 12;
3579
3408
  /** Базовый отступ обёртки контейнера. Снимается, когда контейнер занимает ячейку целиком. */
@@ -3607,6 +3436,217 @@ const CONTAINER_BODY_FILL_STYLE = {
3607
3436
  */
3608
3437
  const CONTAINERS_GROUP_DEFAULTS = { boxSizing: "border-box" };
3609
3438
 
3439
+ const ChartTooltipTable = styled.table.withConfig({ displayName: "ChartTooltipTable", componentId: "sc-1fk3ts5" }) `
3440
+ td {
3441
+ padding: 0;
3442
+ }
3443
+
3444
+ tr:not(:last-child) td {
3445
+ padding-bottom: 0.375rem;
3446
+ }
3447
+ `;
3448
+ const ChartTooltip = styled(Flex).withConfig({ displayName: "ChartTooltip", componentId: "sc-1iyyyv7" }) `
3449
+ flex-wrap: nowrap;
3450
+ background: rgb(48, 69, 79);
3451
+ border-radius: 0.25rem;
3452
+ color: white;
3453
+
3454
+ :not(:last-child) {
3455
+ margin-bottom: 0.25rem;
3456
+ }
3457
+ `;
3458
+ const ChartTooltipLabel = styled.div.withConfig({ displayName: "ChartTooltipLabel", componentId: "sc-gl0qxz" }) `
3459
+ margin-right: 0.25rem;
3460
+ `;
3461
+ const ChartTooltipColor = styled.div.withConfig({ displayName: "ChartTooltipColor", componentId: "sc-tmvvbh" }) `
3462
+ width: 0.625rem;
3463
+ height: 0.625rem;
3464
+ background-color: ${({ $color }) => $color};
3465
+ border-radius: ${({ theme: { borderRadius } }) => borderRadius.smallest};
3466
+ margin-right: 0.25rem;
3467
+ `;
3468
+ const ChartLegendColor$1 = styled.div.withConfig({ displayName: "ChartLegendColor", componentId: "sc-l66k4q" }) `
3469
+ width: 0.5rem;
3470
+ height: 0.5rem;
3471
+ background-color: ${({ $color }) => $color};
3472
+ border-radius: 0.125rem;
3473
+ `;
3474
+ const ChartLegendValue = styled.div.withConfig({ displayName: "ChartLegendValue", componentId: "sc-1d7z775" }) `
3475
+ opacity: 0.65;
3476
+ `;
3477
+ const ChartTooltipRow = styled(Flex).withConfig({ displayName: "ChartTooltipRow", componentId: "sc-ih1uc5" }) `
3478
+ display: flex;
3479
+ flex-direction: row;
3480
+ flex-wrap: nowrap;
3481
+ align-items: center;
3482
+ margin-top: 0.5rem;
3483
+ line-height: 0;
3484
+
3485
+ ${ChartLegendColor$1} {
3486
+ margin-right: 0.25rem;
3487
+ }
3488
+ `;
3489
+ const ChartTooltipName = styled.div.withConfig({ displayName: "ChartTooltipName", componentId: "sc-sm4g0t" }) `
3490
+ margin-right: 1rem;
3491
+ opacity: 0.65;
3492
+ `;
3493
+ const PieChartCenter = styled.div.withConfig({ displayName: "PieChartCenter", componentId: "sc-1le93jy" }) `
3494
+ position: absolute;
3495
+ top: 50%;
3496
+ left: 50%;
3497
+ transform: translate(-50%, -50%);
3498
+ text-align: center;
3499
+ font-weight: bold;
3500
+ font-size: 1.5rem;
3501
+ `;
3502
+ const ChartWrapperContainer = styled.div.withConfig({ displayName: "ChartWrapperContainer", componentId: "sc-1f4x9zv" }) `
3503
+ position: relative;
3504
+ width: 100%;
3505
+ `;
3506
+ /*
3507
+ * fill-режим: обёртка забирает всю доступную ячейку (её высоту задаёт флекс-цепочка, а не контент графика),
3508
+ * на неё вешается ref для ResizeObserver — меряем обе оси без цикла. Плоский div (не Flex uilib), как соседний
3509
+ * ChartWrapperContainer, чтобы ref гарантированно дошёл до DOM-узла. Тело графика центрируется внутри.
3510
+ */
3511
+ const ChartFillMeasure = styled.div.withConfig({ displayName: "ChartFillMeasure", componentId: "sc-1r4oerb" }) `
3512
+ position: relative;
3513
+ display: flex;
3514
+ align-items: center;
3515
+ justify-content: center;
3516
+ width: 100%;
3517
+ height: 100%;
3518
+ min-width: 0;
3519
+ min-height: 0;
3520
+ overflow: hidden;
3521
+
3522
+ /* SVG по умолчанию inline, поэтому под ним остаётся зазор базовой линии (~4px при line-height
3523
+ 18.4px): вне fill его скрывал запас высоты, а тело, точно заполнившее ячейку, из-за него
3524
+ вылезает за нижнюю границу. Блочный SVG зазора не даёт. */
3525
+ svg {
3526
+ display: block;
3527
+ }
3528
+ `;
3529
+ const Tooltip = styled.div.withConfig({ displayName: "Tooltip", componentId: "sc-1va8cy3" }) `
3530
+ position: relative;
3531
+ border-radius: 0.25rem;
3532
+ background-color: rgba(28, 33, 48);
3533
+ padding: 0.5rem;
3534
+ box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.15);
3535
+ font-size: 0.75rem;
3536
+ transform: ${({ transform }) => transform};
3537
+ color: white;
3538
+
3539
+ :before {
3540
+ position: absolute;
3541
+ display: block;
3542
+ content: "";
3543
+ width: 0;
3544
+ height: 0;
3545
+ }
3546
+ `;
3547
+ /**
3548
+ * Тултипы графиков рендерятся в `body` со своим z-index (100 у Bar и Line) — ниже модального окна
3549
+ * `Dialog` из `@evergis/uilib-gl` (110), поэтому в модалке дашборда они уходили под окно. Класс
3550
+ * дублируем, чтобы правило перебило стили `@evergis/charts` по специфичности, а не по порядку
3551
+ * подключения.
3552
+ */
3553
+ const ChartTooltipStyles = createGlobalStyle `
3554
+ .${barChartClassNames.barChartMouseTooltip}.${barChartClassNames.barChartMouseTooltip},
3555
+ .${lineChartClassNames.lineChartMouseLabel}.${lineChartClassNames.lineChartMouseLabel} {
3556
+ z-index: ${DASHBOARD_OVERLAY_Z_INDEX};
3557
+ }
3558
+ `;
3559
+ const LineChartStyles = createGlobalStyle `
3560
+ .dashboardLineChartTooltip.${lineChartClassNames.lineChartMouseLabel} {
3561
+ .${lineChartClassNames.lineChartLabelFlex} {
3562
+ justify-content: center;
3563
+ align-items: flex-end;
3564
+
3565
+ ${Tooltip} {
3566
+ margin: 0 0 12px 0;
3567
+
3568
+ :before {
3569
+ top: auto;
3570
+ bottom: 0;
3571
+ left: 50%;
3572
+ transform: translate(-50%, 100%);
3573
+ border-left: 4px solid transparent;
3574
+ border-right: 4px solid transparent;
3575
+ border-top: 4px solid rgba(28, 33, 48, 0.9);
3576
+ }
3577
+ }
3578
+ }
3579
+ }
3580
+
3581
+ .${lineChartClassNames.lineChartYScaleGlobal}, .${lineChartClassNames.lineChartXScaleGlobal} {
3582
+ .domain {
3583
+ visibility: hidden;
3584
+ }
3585
+
3586
+ .tick {
3587
+ text {
3588
+ fill: ${({ theme: { palette } }) => palette.textDisabled};
3589
+ }
3590
+
3591
+ line {
3592
+ visibility: hidden;
3593
+ }
3594
+ }
3595
+ }
3596
+
3597
+ .${lineChartClassNames.lineChartXScaleGlobal} {
3598
+ .tick {
3599
+ :first-of-type {
3600
+ text {
3601
+ text-anchor: start;
3602
+ }
3603
+ }
3604
+
3605
+ :last-of-type {
3606
+ text {
3607
+ text-anchor: end;
3608
+ }
3609
+ }
3610
+ }
3611
+ }
3612
+
3613
+ .${lineChartClassNames.lineChartLine} {
3614
+ stroke-width: 2px;
3615
+ }
3616
+
3617
+ .${lineChartClassNames.lineChartLabel} {
3618
+ color: ${({ theme: { palette } }) => palette.textPrimary};
3619
+ }
3620
+
3621
+ .${lineChartClassNames.lineChartMouseCircle} {
3622
+ stroke: #ffffff;
3623
+ stroke-width: 2px;
3624
+ }
3625
+
3626
+ .${lineChartClassNames.lineChartGridLineX} {
3627
+ stroke: ${({ theme: { palette } }) => palette.element};
3628
+ }
3629
+
3630
+ text {
3631
+ fill: ${({ theme: { palette } }) => palette.textDisabled};
3632
+ }
3633
+ `;
3634
+ const StyledBarChart = styled(BarChart$1).withConfig({ displayName: "StyledBarChart", componentId: "sc-1l1kx80" }) `
3635
+ .domain {
3636
+ display: none;
3637
+ }
3638
+
3639
+ .tick {
3640
+ text {
3641
+ fill: ${({ theme: { palette } }) => palette.textDisabled};
3642
+ }
3643
+
3644
+ line {
3645
+ visibility: hidden;
3646
+ }
3647
+ }
3648
+ `;
3649
+
3610
3650
  const StackBarContainer = styled(Flex).withConfig({ displayName: "StackBarContainer", componentId: "sc-stc97k" }) `
3611
3651
  flex-wrap: nowrap;
3612
3652
  width: 100%;
@@ -4219,7 +4259,7 @@ const getSelectedFilterValue = (filterName, selectedFilters, defaultValue) => {
4219
4259
  : selectedFilters?.[filterName]?.value) ?? defaultValue);
4220
4260
  };
4221
4261
 
4222
- const applyQueryFilters = ({ parameters: configParameters, filters: configFilters, selectedFilters, geometry, attributes, layerInfo, dataSources, projectDataSources, }) => {
4262
+ const applyQueryFilters = ({ parameters: configParameters, filters: configFilters, selectedFilters, geometry, extent, zoomLevel, attributes, layerInfo, dataSources, projectDataSources, }) => {
4223
4263
  if (!configParameters) {
4224
4264
  return {};
4225
4265
  }
@@ -4264,12 +4304,27 @@ const applyQueryFilters = ({ parameters: configParameters, filters: configFilter
4264
4304
  const [filterName, filterProp] = filterFullName.includes(".") ? filterFullName.split(".") : [filterFullName, null];
4265
4305
  const configFilter = getConfigFilter(filterName, configFilters);
4266
4306
  const { defaultValue, relatedDataSource, attributeAlias } = configFilter || {};
4267
- if (filterName === "geometry" && geometry && !geometry.includes("()") && geometry.endsWith(")")) {
4307
+ if (filterName === GEOMETRY_FILTER_NAME && geometry && !geometry.includes("()") && geometry.endsWith(")")) {
4268
4308
  return {
4269
4309
  ...result,
4270
4310
  [key]: geometry,
4271
4311
  };
4272
4312
  }
4313
+ // Системные фильтры вида карты: значение приходит из `GlobalContext`, а не из `SelectedFilters`,
4314
+ // поэтому резолвятся до веток `.min` / `.max` / `.property` — как `geometry` выше.
4315
+ if (filterName === EXTENT_FILTER_NAME && extent) {
4316
+ return {
4317
+ ...result,
4318
+ [key]: extent,
4319
+ };
4320
+ }
4321
+ // Единственная нестроковая системная подстановка: уровень зума уходит числом.
4322
+ if (filterName === ZOOM_FILTER_NAME && !isNil(zoomLevel)) {
4323
+ return {
4324
+ ...result,
4325
+ [key]: zoomLevel,
4326
+ };
4327
+ }
4273
4328
  if (configParameters[key].endsWith(".max")) {
4274
4329
  return {
4275
4330
  ...result,
@@ -4487,13 +4542,22 @@ const applyFiltersToCondition = ({ condition, name, defaultValue, filters, isSin
4487
4542
  return applyTreeFilterToCondition(condition, name, rawValue, isSingle);
4488
4543
  }
4489
4544
  const hasFilter = filters[name] !== undefined && !!filters[name].value?.toString().length;
4545
+ const filterName = `${FILTER_PREFIX}${name}`;
4546
+ // Пока фильтр не применён, границы `%name.min` / `%name.max` берём из range-дефолта конфига
4547
+ // (`defaultValue: [from, to]`) — иначе в условие ушёл бы весь массив вместо своей границы.
4548
+ // Проверка плейсхолдеров обязательна: у array-фильтра массивный дефолт подставляется целиком.
4549
+ const rangeDefault = !hasFilter &&
4550
+ Array.isArray(defaultValue) &&
4551
+ (condition.includes(`${filterName}.min`) || condition.includes(`${filterName}.max`))
4552
+ ? defaultValue
4553
+ : null;
4490
4554
  const min = formatConditionValue({
4491
- value: hasFilter ? filters[name].min : null,
4555
+ value: hasFilter ? filters[name].min : rangeDefault?.[0] ?? null,
4492
4556
  checkQuotes: !isSingle,
4493
4557
  isSetParams,
4494
4558
  });
4495
4559
  const max = formatConditionValue({
4496
- value: hasFilter ? filters[name].max : null,
4560
+ value: hasFilter ? filters[name].max : rangeDefault?.[1] ?? null,
4497
4561
  checkQuotes: !isSingle,
4498
4562
  isSetParams,
4499
4563
  });
@@ -4503,7 +4567,6 @@ const applyFiltersToCondition = ({ condition, name, defaultValue, filters, isSin
4503
4567
  checkQuotes: !isSingle,
4504
4568
  isSetParams,
4505
4569
  });
4506
- const filterName = `${FILTER_PREFIX}${name}`;
4507
4570
  const hasMin = min !== "" && min !== null && min !== undefined;
4508
4571
  const hasMax = max !== "" && max !== null && max !== undefined;
4509
4572
  let result = condition;
@@ -4520,7 +4583,7 @@ const applyFiltersToCondition = ({ condition, name, defaultValue, filters, isSin
4520
4583
  }
4521
4584
  return isSingle && isNumeric(result) ? Number(result) : result;
4522
4585
  };
4523
- const applyVarsToCondition = ({ section, configFilters, filters, attributes, layerParams, eqlParameters, geometry, isSetParams, }) => {
4586
+ const applyVarsToCondition = ({ section, configFilters, filters, attributes, layerParams, eqlParameters, geometry, extent, zoomLevel, isSetParams, }) => {
4524
4587
  if (!section?.length)
4525
4588
  return [];
4526
4589
  const isSingle = typeof section === "string";
@@ -4529,6 +4592,17 @@ const applyVarsToCondition = ({ section, configFilters, filters, attributes, lay
4529
4592
  if (geometry && !geometry.includes("()") && geometry.endsWith(")")) {
4530
4593
  result[index] = result[index].replace(new RegExp("%geometry"), `'${geometry}'`);
4531
4594
  }
4595
+ // Системные фильтры вида карты подставляются ДО цикла по `configFilters`: одноимённый
4596
+ // пользовательский фильтр не должен перехватывать `%extent` / `%zoom`. Lookahead `(?![\w.])`
4597
+ // оставляет фильтрам составные формы (`%zoomLevel`, `%extent_id`, `%zoom.min`) — та же
4598
+ // граница, что уже разводит `%name` и `%name2.l1` в `getUpdatingDataSources`.
4599
+ if (extent) {
4600
+ result[index] = result[index].replace(new RegExp(`${FILTER_PREFIX}${EXTENT_FILTER_NAME}(?![\\w.])`, "g"), `'${extent}'`);
4601
+ }
4602
+ // Зум — число, кавычки не ставим.
4603
+ if (!isNil(zoomLevel)) {
4604
+ result[index] = result[index].replace(new RegExp(`${FILTER_PREFIX}${ZOOM_FILTER_NAME}(?![\\w.])`, "g"), String(zoomLevel));
4605
+ }
4532
4606
  if (configFilters?.length) {
4533
4607
  configFilters.forEach(filter => {
4534
4608
  result[index] = applyFiltersToCondition({
@@ -4557,7 +4631,7 @@ const applyVarsToCondition = ({ section, configFilters, filters, attributes, lay
4557
4631
  });
4558
4632
  return isSingle ? result?.[0] : result;
4559
4633
  };
4560
- const formatSingleCondition = (condition, { configFilters, filters, attributes, eqlParameters, layerParams, geometry }) => {
4634
+ const formatSingleCondition = (condition, { configFilters, filters, attributes, eqlParameters, layerParams, geometry, extent, zoomLevel, }) => {
4561
4635
  const setParams = condition.match(new RegExp("\\$\\([^)]+\\)", "g"));
4562
4636
  const setParamsSection = applyVarsToCondition({
4563
4637
  section: setParams,
@@ -4567,6 +4641,8 @@ const formatSingleCondition = (condition, { configFilters, filters, attributes,
4567
4641
  eqlParameters,
4568
4642
  layerParams,
4569
4643
  geometry,
4644
+ extent,
4645
+ zoomLevel,
4570
4646
  isSetParams: true,
4571
4647
  });
4572
4648
  const splitter = " AND ";
@@ -4579,6 +4655,8 @@ const formatSingleCondition = (condition, { configFilters, filters, attributes,
4579
4655
  eqlParameters,
4580
4656
  layerParams,
4581
4657
  geometry,
4658
+ extent,
4659
+ zoomLevel,
4582
4660
  });
4583
4661
  return setParamsSection?.length && conditionSection.length
4584
4662
  ? [setParamsSection.join(""), conditionSection.join(splitter)].join(" ")
@@ -6356,7 +6434,7 @@ const useAttachmentItems = ({ type, elementConfig, valueOverride, }) => {
6356
6434
  };
6357
6435
 
6358
6436
  const useGlobalContext = () => {
6359
- const { t, language, themeName, api, ewktGeometry, notification } = useContext(GlobalContext) || {};
6437
+ const { t, language, themeName, api, ewktGeometry, ewktExtent, zoomLevel, notification } = useContext(GlobalContext) || {};
6360
6438
  const translate = useCallback((value, options) => {
6361
6439
  if (t)
6362
6440
  return t(value, options);
@@ -6368,8 +6446,10 @@ const useGlobalContext = () => {
6368
6446
  themeName,
6369
6447
  api,
6370
6448
  ewktGeometry,
6449
+ ewktExtent,
6450
+ zoomLevel,
6371
6451
  notification,
6372
- }), [language, translate, api, ewktGeometry, themeName, notification]);
6452
+ }), [language, translate, api, ewktGeometry, ewktExtent, zoomLevel, themeName, notification]);
6373
6453
  };
6374
6454
 
6375
6455
  const GRID_TILE_SIZE = "4.5rem";
@@ -7175,10 +7255,17 @@ const useDashboardHeader = () => {
7175
7255
  };
7176
7256
  };
7177
7257
 
7258
+ // Полноэкранная заглушка допустима только пока не пришёл ни один источник: дальше страницу
7259
+ // и модалку наполняют сами контейнеры — у каждого свой ContainerLoading / ChartLoading.
7260
+ const useDataSourceLoading = (type) => {
7261
+ const { dataSources, isLoading } = useWidgetContext(type);
7262
+ const { currentPage } = useWidgetPage(type);
7263
+ return useMemo(() => !!currentPage?.dataSources?.length && !dataSources?.length && !!isLoading, [currentPage?.dataSources?.length, dataSources?.length, isLoading]);
7264
+ };
7265
+
7178
7266
  /* eslint-disable max-lines */
7179
- const toConditionsArray = (value) => Array.isArray(value) ? value : value ? [value] : [];
7180
7267
  const useDataSources = ({ type: widgetType, config, attributes, filters, layerParams, eqlParameters, }) => {
7181
- const { ewktGeometry, api } = useGlobalContext();
7268
+ const { ewktGeometry, ewktExtent, zoomLevel, api } = useGlobalContext();
7182
7269
  const { dataSources, layerInfo } = useWidgetContext(widgetType);
7183
7270
  const { dataSources: projectDataSources } = useWidgetContext(WidgetType.Dashboard);
7184
7271
  const { filters: configFilters, dataSources: configDataSources } = config || {};
@@ -7206,6 +7293,8 @@ const useDataSources = ({ type: widgetType, config, attributes, filters, layerPa
7206
7293
  attributes,
7207
7294
  filters: configFilters,
7208
7295
  geometry: ewktGeometry,
7296
+ extent: ewktExtent,
7297
+ zoomLevel,
7209
7298
  layerInfo,
7210
7299
  dataSources,
7211
7300
  projectDataSources,
@@ -7280,6 +7369,8 @@ const useDataSources = ({ type: widgetType, config, attributes, filters, layerPa
7280
7369
  configFilters,
7281
7370
  filters: selectedFilters,
7282
7371
  geometry: ewktGeometry,
7372
+ extent: ewktExtent,
7373
+ zoomLevel,
7283
7374
  attributes,
7284
7375
  layerParams,
7285
7376
  eqlParameters,
@@ -7301,6 +7392,8 @@ const useDataSources = ({ type: widgetType, config, attributes, filters, layerPa
7301
7392
  dataSources,
7302
7393
  configFilters,
7303
7394
  ewktGeometry,
7395
+ ewktExtent,
7396
+ zoomLevel,
7304
7397
  api,
7305
7398
  attributes,
7306
7399
  layerParams,
@@ -12685,7 +12778,7 @@ const EditStringContainer = ({ type, elementConfig, renderElement, }) => {
12685
12778
  onControlChange(String(lastSelected?.value ?? ""));
12686
12779
  setValue(lastSelected?.text ?? "");
12687
12780
  }, [onControlChange, setValue]);
12688
- return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: control?.relatedDataSource ? (jsx(AutoComplete, { value: value, options: options, width: "100%", onChange: onChange, onSelect: onSelect })) : (jsx(Input, { value: controlValue, width: "100%", onChange: (e) => onControlChange(e.target.value) })) })] }));
12781
+ return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: control?.relatedDataSource ? (jsx(AutoComplete, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, value: value, options: options, width: "100%", onChange: onChange, onSelect: onSelect })) : (jsx(Input, { value: controlValue, width: "100%", onChange: (e) => onControlChange(e.target.value) })) })] }));
12689
12782
  };
12690
12783
 
12691
12784
  const EditNumberContainer = ({ type, elementConfig, renderElement, }) => {
@@ -12698,7 +12791,7 @@ const EditDropdownContainer = ({ type, elementConfig, renderElement, }) => {
12698
12791
  const { value, control, items, onChange } = useEditControl(type, elementConfig);
12699
12792
  const { id, style } = elementConfig || {};
12700
12793
  const optionsList = useMemo(() => items.map(item => ({ text: item, value: item })), [items]);
12701
- return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(Dropdown, { zIndex: 1000, label: control?.label, placeholder: control?.placeholder, options: optionsList, value: value, width: `${control?.width ?? DEFAULT_DROPDOWN_WIDTH}px`, onChange: ([option]) => onChange(option.value) }) })] }));
12794
+ return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(Dropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, label: control?.label, placeholder: control?.placeholder, options: optionsList, value: value, width: `${control?.width ?? DEFAULT_DROPDOWN_WIDTH}px`, onChange: ([option]) => onChange(option.value) }) })] }));
12702
12795
  };
12703
12796
 
12704
12797
  const CheckboxWrapper = styled(ContainerValue).withConfig({ displayName: "CheckboxWrapper", componentId: "sc-169umb6" }) `
@@ -12739,7 +12832,7 @@ const EditDateContainer = ({ type, elementConfig, renderElement, }) => {
12739
12832
  const { withTime } = options || {};
12740
12833
  const dateValue = useMemo(() => (value ? new Date(value) : undefined), [value]);
12741
12834
  const handleChange = useCallback((date) => onChange(date.toISOString()), [onChange]);
12742
- return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(DatePicker, { value: dateValue, locale: getLocale(language), withTime: withTime ?? false, withHeader: true, width: "100%", onChange: handleChange }) })] }));
12835
+ return (jsxs(Container, { id: id, isColumn: true, style: { ...BASE_CONTAINER_STYLE, ...style }, children: [jsxs(ContainerAlias, { hasBottomMargin: true, children: [renderElement({ id: "alias" }), renderElement({ id: "tooltip" })] }), jsx(ContainerValue, { column: true, children: jsx(DatePicker, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, value: dateValue, locale: getLocale(language), withTime: withTime ?? false, withHeader: true, width: "100%", onChange: handleChange }) })] }));
12743
12836
  };
12744
12837
 
12745
12838
  const AddButton = ({ multiple = true, accept, onSelectFiles, onSelectFromCatalog, onSelectFromLink, }) => {
@@ -13887,7 +13980,7 @@ const ElementControl = ({ elementConfig }) => {
13887
13980
  });
13888
13981
  }
13889
13982
  }, [changeControls, control?.targetAttributeName]);
13890
- return (jsx(Dropdown, { zIndex: 1000, width: toCssSize(width) ?? "100%", label: label, options: items, value: currentValue, placeholder: placeholder, disabled: isDisabled, onChange: handleChange }));
13983
+ return (jsx(Dropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: toCssSize(width) ?? "100%", label: label, options: items, value: currentValue, placeholder: placeholder, disabled: isDisabled, onChange: handleChange }));
13891
13984
  };
13892
13985
 
13893
13986
  const StyledIconFontSizeMixin = css `
@@ -14061,7 +14154,7 @@ const LocalLink = memo(({ link, style }) => {
14061
14154
  navigator.clipboard.writeText(link);
14062
14155
  toggleOpen();
14063
14156
  }, [link, toggleOpen]);
14064
- return (jsx(Popover, { open: isOpen, zIndex: 10, onRequestClose: toggleOpen, anchorOrigin: "bottom-right", targetOrigin: "top-right", anchor: jsx(LocalLinkButton, { onClick: toggleOpen }), children: jsxs(LocalLinkBlank, { children: [jsx(Link, { href: link, target: "_blank", rel: "noreferrer", style: style, children: link }), jsx(LocalLinkCopy, { children: jsx(IconButton, { kind: "copy", onClick: onCopy, children: t("copy", { ns: "dashboard", defaultValue: "Копировать" }) }) })] }) }));
14157
+ return (jsx(Popover, { open: isOpen, zIndex: DASHBOARD_OVERLAY_Z_INDEX, onRequestClose: toggleOpen, anchorOrigin: "bottom-right", targetOrigin: "top-right", anchor: jsx(LocalLinkButton, { onClick: toggleOpen }), children: jsxs(LocalLinkBlank, { children: [jsx(Link, { href: link, target: "_blank", rel: "noreferrer", style: style, children: link }), jsx(LocalLinkCopy, { children: jsx(IconButton, { kind: "copy", onClick: onCopy, children: t("copy", { ns: "dashboard", defaultValue: "Копировать" }) }) })] }) }));
14065
14158
  });
14066
14159
 
14067
14160
  const ElementLink = memo(({ type, elementConfig }) => {
@@ -14682,7 +14775,7 @@ const TableCell = memo(({ attribute, row, canEdit, onChange }) => {
14682
14775
  }
14683
14776
  const renderEditor = () => {
14684
14777
  if (type === AttributeType.DateTime) {
14685
- return (jsx(DatePicker, { focus: true, value: dateValue, locale: getLocale(language), withTime: withTime, withHeader: true, width: "100%", onChange: date => handleChange(date.toISOString()) }));
14778
+ return (jsx(DatePicker, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, focus: true, value: dateValue, locale: getLocale(language), withTime: withTime, withHeader: true, width: "100%", onChange: date => handleChange(date.toISOString()) }));
14686
14779
  }
14687
14780
  if (NUMBER_EDITOR_TYPES.includes(type)) {
14688
14781
  return (jsx(NumberInput, { autoFocus: true, value: value === null || value === undefined ? null : Number(value), width: "100%", numeralDecimalScale: INTEGER_ATTRIBUTE_TYPES.includes(type) ? 0 : undefined, onChange: next => handleChange(next) }));
@@ -15470,7 +15563,8 @@ const getRenderElement = ({ t, config, elementConfig, attributes = [], layerInfo
15470
15563
 
15471
15564
  const ElementModal = memo(({ type = WidgetType.Dashboard, elementConfig }) => {
15472
15565
  const { config } = useWidgetConfig(type);
15473
- const { expandedContainers, attributes, isLoading } = useWidgetContext(type);
15566
+ const { expandedContainers, attributes } = useWidgetContext(type);
15567
+ const isDataSourceLoading = useDataSourceLoading(type);
15474
15568
  const [isOpen, setIsOpen] = useState(false);
15475
15569
  const { options } = elementConfig || {};
15476
15570
  const { modalId, icon } = options || {};
@@ -15490,7 +15584,7 @@ const ElementModal = memo(({ type = WidgetType.Dashboard, elementConfig }) => {
15490
15584
  return null;
15491
15585
  const { options: modalOptions } = modalConfig;
15492
15586
  const { title, maxWidth, minWidth, minHeight } = modalOptions || {};
15493
- 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 }) })) })] })] }));
15587
+ 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: isDataSourceLoading ? (jsx(DashboardLoading, {})) : (jsx(Container, { isColumn: true, noBorders: true, children: jsx(ContainerChildren, { type: type, items: modalContent, isMain: true, renderElement: renderElement }) })) })] })] }));
15494
15588
  });
15495
15589
 
15496
15590
  const elementComponents = {
@@ -15759,7 +15853,7 @@ const TextFilter = ({ type, filter }) => {
15759
15853
  }, [filterName, filters]);
15760
15854
  if (!configFilter)
15761
15855
  return null;
15762
- return (jsx(TextFilterContainer, { children: jsx(AutoComplete, { value: value, placeholder: placeholder, options: variants || options, zIndex: 100, width: getFilterWidth(width), menuHeight: height ? `${height}px` : "10rem", withInfiniteScroll: !variants, infiniteScrollProps: variants ? undefined : infiniteScrollProps, multiSelect: multiSelect, selected: selected, setOptions: variants ? undefined : setOptions, onChange: onChange, onSelect: onSelect, onGetInnerRef: ref => (suggestRef.current = ref), asyncCallback: variants ? undefined : search, onBlur: onBlur, onKeyUp: isFreeTextInput || (variants && !variants.length) ? onKeyUp : undefined }) }));
15856
+ return (jsx(TextFilterContainer, { children: jsx(AutoComplete, { value: value, placeholder: placeholder, options: variants || options, zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: getFilterWidth(width), menuHeight: height ? `${height}px` : "10rem", withInfiniteScroll: !variants, infiniteScrollProps: variants ? undefined : infiniteScrollProps, multiSelect: multiSelect, selected: selected, setOptions: variants ? undefined : setOptions, onChange: onChange, onSelect: onSelect, onGetInnerRef: ref => (suggestRef.current = ref), asyncCallback: variants ? undefined : search, onBlur: onBlur, onKeyUp: isFreeTextInput || (variants && !variants.length) ? onKeyUp : undefined }) }));
15763
15857
  };
15764
15858
 
15765
15859
  const getListOptions = (items, filterName, configFilters) => {
@@ -15805,7 +15899,7 @@ const DropdownFilter = ({ type, filter, elementConfig }) => {
15805
15899
  }, [changeFilters, filterName]);
15806
15900
  if (!configFilter && !variants)
15807
15901
  return null;
15808
- return (jsx(Dropdown, { zIndex: 100, width: getFilterWidth(width), value: value, placeholder: placeholder, options: filterOptions, onChange: onChange }));
15902
+ return (jsx(Dropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: getFilterWidth(width), value: value, placeholder: placeholder, options: filterOptions, onChange: onChange }));
15809
15903
  };
15810
15904
 
15811
15905
  const CheckboxFilter = ({ type, filter, elementConfig }) => {
@@ -16075,7 +16169,7 @@ const BarChartFilter = ({ type, config, elementConfig, filter }) => {
16075
16169
  return (jsx(ThemeProvider, { children: jsx(TooltipContainer, { children: group.groupName === group.value.toString() ? group.value : [group.groupName, group.value].join(": ") }) }));
16076
16170
  }, []);
16077
16171
  const totalHeight = height + BAR_CHART_HEADER_HEIGHT + BAR_CHART_FOOTER_MARGIN;
16078
- return (jsx(ChartWrapper, { height: totalHeight, loading: loading, style: style, children: jsxs(BarChartWrapper, { height: totalHeight, children: [jsxs(BarChartFilterHeader, { height: BAR_CHART_HEADER_HEIGHT, children: [jsxs(BarChartFilterArrows, { children: [jsx(IconButton, { kind: "prev", disabled: prevDisabled, onClick: onPrev }), jsx(IconButton, { kind: "next", disabled: nextDisabled, onClick: onNext })] }), renderSelectedRange] }), jsx(BarChartContainer, { barHeight: barHeight, marginBottom: DEFAULT_BAR_CHART_MARGINS.bottom, children: jsx(BarChart, { data: data, margin: DEFAULT_BAR_CHART_MARGINS, height: height, barWidth: barWidth, barPadding: padding, xAxisPadding: 0, yAxisPadding: 0, selectable: !loading, dynamicTooltipEnable: true, isBarTooltip: true, renderTooltip: renderTooltip, ...rest }) })] }) }));
16172
+ return (jsxs(ChartWrapper, { height: totalHeight, loading: loading, style: style, children: [jsx(ChartTooltipStyles, {}), jsxs(BarChartWrapper, { height: totalHeight, children: [jsxs(BarChartFilterHeader, { height: BAR_CHART_HEADER_HEIGHT, children: [jsxs(BarChartFilterArrows, { children: [jsx(IconButton, { kind: "prev", disabled: prevDisabled, onClick: onPrev }), jsx(IconButton, { kind: "next", disabled: nextDisabled, onClick: onNext })] }), renderSelectedRange] }), jsx(BarChartContainer, { barHeight: barHeight, marginBottom: DEFAULT_BAR_CHART_MARGINS.bottom, children: jsx(BarChart, { data: data, margin: DEFAULT_BAR_CHART_MARGINS, height: height, barWidth: barWidth, barPadding: padding, xAxisPadding: 0, yAxisPadding: 0, selectable: !loading, dynamicTooltipEnable: true, isBarTooltip: true, renderTooltip: renderTooltip, ...rest }) })] })] }));
16079
16173
  };
16080
16174
 
16081
16175
  const DEFAULT_FROM_DATA = { minFromData: null, maxFromData: null };
@@ -16085,6 +16179,7 @@ const RangeDateFilter = ({ type, filter }) => {
16085
16179
  const { currentPage } = useWidgetPage(type);
16086
16180
  const [value, setValue] = useState([undefined, undefined]);
16087
16181
  const isInit = useRef(false);
16182
+ const isDefaultApplied = useRef(false);
16088
16183
  const updateDebounce = useDebouncedCallback(FILTER_UPDATE_DEBOUNCE);
16089
16184
  const { filters: configFilters } = currentPage;
16090
16185
  const { filterName, label, minValue, maxValue, withTime } = filter.options;
@@ -16097,28 +16192,42 @@ const RangeDateFilter = ({ type, filter }) => {
16097
16192
  maxFromData: !prev.maxFromData ? date : date > prev.maxFromData ? date : prev.maxFromData
16098
16193
  };
16099
16194
  }, DEFAULT_FROM_DATA) || DEFAULT_FROM_DATA, [configFilter?.attributeValue, dataSource?.features]);
16100
- const minDate = useMemo(() => minValue || minFromData.toISOString(), [minFromData, minValue]);
16101
- const maxDate = useMemo(() => maxValue || maxFromData.toISOString(), [maxFromData, maxValue]);
16195
+ const minDate = useMemo(() => minValue || minFromData?.toISOString(), [minFromData, minValue]);
16196
+ const maxDate = useMemo(() => maxValue || maxFromData?.toISOString(), [maxFromData, maxValue]);
16197
+ // Диапазон по умолчанию: `defaultValue: [from, to]` из конфига фильтра — начальное значение
16198
+ // и точка сброса. Границы календаря (min/max) при этом не меняются; незаданная граница
16199
+ // дефолта падает на них же — как было до появления `defaultValue`.
16200
+ const defaultRange = useMemo(() => {
16201
+ const [from, to] = (Array.isArray(configFilter?.defaultValue) ? configFilter.defaultValue : []);
16202
+ return [getDate(from)?.toISOString() ?? minDate, getDate(to)?.toISOString() ?? maxDate];
16203
+ }, [configFilter?.defaultValue, maxDate, minDate]);
16102
16204
  const isEmpty = useMemo(() => isNil(value?.[0]) && isNil(value?.[1]), [value]);
16103
- const isDefault = useMemo(() => value?.[0] === minDate && value?.[1] === maxDate, [maxDate, minDate, value]);
16205
+ const isDefault = useMemo(() => value?.[0] === defaultRange[0] && value?.[1] === defaultRange[1], [defaultRange, value]);
16104
16206
  const reset = useCallback(() => {
16105
- setValue([minDate, maxDate]);
16207
+ const [from, to] = defaultRange;
16208
+ setValue([from, to]);
16106
16209
  changeFilters({
16107
16210
  [filterName]: {
16108
- value: [minDate, maxDate],
16109
- min: minDate,
16110
- max: maxDate
16211
+ value: [from, to],
16212
+ min: from,
16213
+ max: to
16111
16214
  }
16112
16215
  }, configFilter?.resetFilters);
16113
- }, [changeFilters, configFilter?.resetFilters, filterName, maxDate, minDate]);
16216
+ }, [changeFilters, configFilter?.resetFilters, defaultRange, filterName]);
16114
16217
  const onChange = useCallback((newValue) => {
16115
16218
  setValue([newValue[0].toISOString(), newValue[1].toISOString()]);
16116
16219
  }, []);
16220
+ // Дефолт применяем однократно — как только обе границы диапазона известны. С `defaultValue`
16221
+ // это происходит сразу, без него — после подгрузки фич связанного источника данных.
16117
16222
  useEffect(() => {
16118
- if (!isNil(minDate) && !isNil(maxDate)) {
16119
- reset();
16120
- }
16121
- }, []); // eslint-disable-line
16223
+ if (isDefaultApplied.current)
16224
+ return;
16225
+ const [from, to] = defaultRange;
16226
+ if (isNil(from) || isNil(to))
16227
+ return;
16228
+ isDefaultApplied.current = true;
16229
+ reset();
16230
+ }, [defaultRange, reset]);
16122
16231
  useEffect(() => {
16123
16232
  if (!isInit.current) {
16124
16233
  isInit.current = true;
@@ -16136,7 +16245,7 @@ const RangeDateFilter = ({ type, filter }) => {
16136
16245
  }, [value]); // eslint-disable-line
16137
16246
  if (!configFilter)
16138
16247
  return null;
16139
- return (jsx(RangeNumberInput, { label: label || t("interval", { ns: "dashboard", defaultValue: "Интервал" }), selectedOption: { range: true }, minDate: getDate(minDate), maxDate: getDate(maxDate), value: [getDate(value[0]), getDate(value[1])], zIndex: 100, prefix: jsx(Icon, { kind: "date", disabled: true }), suffix: !isEmpty && !isDefault && jsx(StyledIconButton, { kind: "error", onClick: reset }), withTime: withTime, isDate: true, onChange: onChange }));
16248
+ return (jsx(RangeNumberInput, { label: label || t("interval", { ns: "dashboard", defaultValue: "Интервал" }), selectedOption: { range: true }, minDate: getDate(minDate), maxDate: getDate(maxDate), value: [getDate(value[0]), getDate(value[1])], zIndex: DASHBOARD_OVERLAY_Z_INDEX, prefix: jsx(Icon, { kind: "date", disabled: true }), suffix: !isEmpty && !isDefault && jsx(StyledIconButton, { kind: "error", onClick: reset }), withTime: withTime, isDate: true, onChange: onChange }));
16140
16249
  };
16141
16250
 
16142
16251
  const getJustifyContent = (align) => {
@@ -16780,7 +16889,7 @@ const useTreeFilter = (type, filter) => {
16780
16889
 
16781
16890
  const TreeFilter = ({ type, filter }) => {
16782
16891
  const { width, placeholder, multiSelect, loading, data, setData, expanded, setExpanded, onLoadChildren, selectedIds, selectedCount, selectedLabel, searchValue, onSearchChange, onOpen, onClose, onToggleSelect, onReset, onSave, dirty, } = useTreeFilter(type, filter);
16783
- return (jsx(TreeFilterContainer, { children: jsx(TreeDropdown, { zIndex: 100, width: getFilterWidth(width), placeholder: placeholder, multiSelect: multiSelect, loading: loading, data: data, setData: setData, expanded: expanded, setExpanded: setExpanded, onLoadChildren: onLoadChildren, selectedIds: selectedIds, selectedCount: selectedCount, selectedLabel: selectedLabel, searchValue: searchValue, onSearchChange: onSearchChange, onOpen: onOpen, onClose: onClose, onToggleSelect: onToggleSelect, onReset: onReset, onSave: onSave, dirty: dirty }) }));
16892
+ return (jsx(TreeFilterContainer, { children: jsx(TreeDropdown, { zIndex: DASHBOARD_OVERLAY_Z_INDEX, width: getFilterWidth(width), placeholder: placeholder, multiSelect: multiSelect, loading: loading, data: data, setData: setData, expanded: expanded, setExpanded: setExpanded, onLoadChildren: onLoadChildren, selectedIds: selectedIds, selectedCount: selectedCount, selectedLabel: selectedLabel, searchValue: searchValue, onSearchChange: onSearchChange, onOpen: onOpen, onClose: onClose, onToggleSelect: onToggleSelect, onReset: onReset, onSave: onSave, dirty: dirty }) }));
16784
16893
  };
16785
16894
 
16786
16895
  const getFilterComponent = (filterType) => {
@@ -16842,6 +16951,25 @@ const getFilterValue = ({ selectedFilters, configFilters, filterName, newValue,
16842
16951
  return valueType === "single" ? newValue : valueType === "range" ? [newValue, newValue] : [newValue];
16843
16952
  };
16844
16953
 
16954
+ /** Условие источника задаётся строкой или массивом строк — приводим к массиву для единообразного обхода. */
16955
+ const toConditionsArray = (value) => Array.isArray(value) ? value : value ? [value] : [];
16956
+
16957
+ const MAP_VIEW_PLACEHOLDERS = MAP_VIEW_FILTER_NAMES.map(name => `${FILTER_PREFIX}${name}`);
16958
+ // Та же граница, что и при подстановке в `formatDataSourceCondition`: составные формы
16959
+ // (`%zoomLevel`, `%extent_id`, `%zoom.min`) принадлежат пользовательским фильтрам, не карте.
16960
+ const hasMapViewPlaceholder = (value) => MAP_VIEW_PLACEHOLDERS.some(placeholder => new RegExp(`${placeholder}(?![\\w.])`).test(value));
16961
+ /**
16962
+ * Источники, чей запрос зависит от текущего вида карты — в `parameters` или `condition` у них
16963
+ * есть `%extent` / `%zoom`. Перезапрашивают при движении карты только их: иначе каждый пан
16964
+ * дёргал бы все запросы страницы.
16965
+ */
16966
+ const getMapViewDataSources = (dataSources) => dataSources?.filter(({ parameters, condition }) => {
16967
+ const hasInParameters = Object.values(parameters ?? {}).some(value => typeof value === "string" && MAP_VIEW_PLACEHOLDERS.includes(value));
16968
+ if (hasInParameters)
16969
+ return true;
16970
+ return toConditionsArray(condition).some(hasMapViewPlaceholder);
16971
+ }) ?? [];
16972
+
16845
16973
  const getFormattedAttributes = (t, data, attributes, config) => {
16846
16974
  const showOtherItems = config?.options?.otherItems < data?.length;
16847
16975
  const otherIndex = config?.options?.otherItems + 1;
@@ -17318,7 +17446,7 @@ const Chart = memo(({ config, element, elementConfig, type, renderElement }) =>
17318
17446
  ?.map(item => ({
17319
17447
  ...item,
17320
17448
  color: formatFilterColor(item.name, item.color, defaultColor),
17321
- })) || []), width: pieSide, height: pieSide, padAngle: angle, outerRadius: radius, cornerRadius: cornerRadius, renderTooltip: renderPieChartTooltip, withTooltip: true, onClick: filterName ? item => onFilter(item.name) : undefined, children: showTotal && (jsx(PieChartCenter, { children: totalWord || roundTotalSum(+totalSum) })) }) }));
17449
+ })) || []), width: pieSide, height: pieSide, padAngle: angle, outerRadius: radius, cornerRadius: cornerRadius, renderTooltip: renderPieChartTooltip, tooltipStyle: PIE_CHART_TOOLTIP_STYLE, withTooltip: true, onClick: filterName ? item => onFilter(item.name) : undefined, children: showTotal && (jsx(PieChartCenter, { children: totalWord || roundTotalSum(+totalSum) })) }) }));
17322
17450
  }
17323
17451
  const barChartData = getDataFromFilterItems(data[0]?.items);
17324
17452
  // Тот же случай, что у stack: обёртка выше тела на подписи оси X (margin.bottom). В fill
@@ -17378,7 +17506,7 @@ const Chart = memo(({ config, element, elementConfig, type, renderElement }) =>
17378
17506
  ]);
17379
17507
  if (!isVisibleContainer(id, expandable, expanded, expandedContainers))
17380
17508
  return null;
17381
- const chartBody = (jsx(ChartWrapper, { width: isPieChart && fill ? pieSide : width, height: isStackBar ? "auto" : isPieChart ? (fill ? pieSide : width) : chartHeight, column: column, loading: loading, children: renderChart }));
17509
+ const chartBody = (jsxs(ChartWrapper, { width: isPieChart && fill ? pieSide : width, height: isStackBar ? "auto" : isPieChart ? (fill ? pieSide : width) : chartHeight, column: column, loading: loading, children: [jsx(ChartTooltipStyles, {}), renderChart] }));
17382
17510
  if (!fill)
17383
17511
  return chartBody;
17384
17512
  // fill: тело центрируется в измеряемой обёртке, ref которой питает ResizeObserver обеими осями.
@@ -17418,11 +17546,9 @@ const DashboardLoading = memo(() => {
17418
17546
  });
17419
17547
 
17420
17548
  const Dashboard = memo(({ type = WidgetType.Dashboard, noBorders }) => {
17421
- const { dataSources, isLoading } = useWidgetContext(type);
17422
- const { currentPage } = useWidgetPage(type);
17549
+ const isDataSourceLoading = useDataSourceLoading(type);
17423
17550
  const isDiffPage = useDiffPage(type);
17424
- const dataSourceLoading = useMemo(() => !!currentPage?.dataSources?.length && !dataSources?.length && isLoading, [currentPage?.dataSources?.length, dataSources?.length, isLoading]);
17425
- if (dataSourceLoading || isDiffPage) {
17551
+ if (isDataSourceLoading || isDiffPage) {
17426
17552
  return (jsx(DashboardLoading, {}));
17427
17553
  }
17428
17554
  return (jsx(PagesContainer, { type: type, noBorders: noBorders }));
@@ -18049,5 +18175,5 @@ const DEFAULT_HEATMAP_STYLE = {
18049
18175
  ],
18050
18176
  };
18051
18177
 
18052
- export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddButtonRow, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINERS_GROUP_DEFAULTS, 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_STROKE_WIDTH, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_BASE, DEFAULT_FILL_EXTRUSION_HEIGHT, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_EXTRUSION_VERTICAL_GRADIENT, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_GRID_GAP, DEFAULT_HEATMAP_COLOR, DEFAULT_HEATMAP_INTENSITY, DEFAULT_HEATMAP_RADIUS, DEFAULT_HEATMAP_STYLE, DEFAULT_HEATMAP_WEIGHT, DEFAULT_ICON_ANCHOR, DEFAULT_ICON_OVERLAP, DEFAULT_ICON_PADDING, DEFAULT_ICON_ROTATE, DEFAULT_ICON_SIZE, 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_SYMBOL_COLOR, DEFAULT_SYMBOL_HALO_COLOR, DEFAULT_SYMBOL_PLACEMENT, DEFAULT_SYMBOL_SPACING, DEFAULT_SYMBOL_STYLE, DEFAULT_TEXT_ANCHOR, DEFAULT_TEXT_JUSTIFY, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_TRANSFORM, DEFAULT_TRACK_FR, DEFAULT_TRANSLATE, DEFAULT_ZOOM, DRAG_THRESHOLD_PX, 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, ElementTable, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FR_PRECISION, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GRID_AUTO_FILL_DEFAULTS, GRID_CELL_ATTR, GRID_CELL_ID_PREFIX, GRID_DRAGGING_ATTR, GRID_DRAG_SOURCE_ATTR, GRID_DROP_TARGET_ATTR, GRID_FILL_DEFAULTS, GRID_HANDLE_ATTR, GRID_HANDLE_PROPS, GRID_ROW_ID_PREFIX, GlobalContext, GlobalProvider, GridRowContainer, HANDLE_BLEED_PX, 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, MAX_TRACKS, MIN_TRACK_PX, MIN_TRACK_RATIO, Map$1 as Map, MapContext, MapProvider, NO_CELL_DRAG_SELECTOR, 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, StructuredDataContainer, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TITLE_SLOT_IDS, 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, buildGridTemplate, buildTrackTemplate, checkEqualOrIncludes, checkIsLoading, collectConfigIds, containsNodeId, createConfigLayer, createConfigPage, createGridCell, createGridIdFactory, createGridRow, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, findCellContext, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getAverageTrackSize, 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, getLayoutChildren, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getTrackSize, getTrackSizeKey, getTrackSizes, getWrapperSizeStyle, hexToRgba, isEmptyElementValue, isEmptyValue, isFeaturesFilterValue, isFillSize, isFrSize, isGridNode, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isRootOwningContainer, isTreeFilterValue, isVisibleContainer, mapNodeById, mergeAttributeConfigurations, metersPerPixel, noMarginMixin, numberOptions, parseFrValue, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, removeTracks, replaceNodesByIds, rgbToHex, roundFr, roundTotalSum, setLayoutChildren, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toCssSize, toFrSize, 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, withTrackSize };
18178
+ export { ALIGNMENTS, ALIGN_ITEMS, ATTRIBUTE_ICON_ELEMENT_TYPES, AddButtonRow, AddFeatureButton, AddFeatureContainer, AlertIconContainer, AttachmentContainer, AttributeGalleryContainer, AttributeLabel, BASE_CONTAINER_STYLE, BaseMapTheme, CHART_TYPES, COMPACT_FRACTION_DIGITS, CONFIG_PAGES_ID, CONFIG_PAGE_ID, CONTAINERS_GROUP_DEFAULTS, CONTAINER_BODY_ATTRIBUTE, CONTAINER_BODY_FILL_STYLE, CameraContainer, Chart, ChartContainer, ChartLegend, ChartLoading, Container, ContainerChildren, ContainerLoading, ContainerRoot, ContainerTemplate, ContainerWrapper, ContainersGroupContainer, DASHBOARD_OVERLAY_Z_INDEX, 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_STROKE_WIDTH, DEFAULT_CIRCLE_STYLE, DEFAULT_COLOR, DEFAULT_DASHBOARD_CONFIG, DEFAULT_DATA_SOURCE_LIMIT, DEFAULT_DROPDOWN_WIDTH, DEFAULT_FILL_EXTRUSION_BASE, DEFAULT_FILL_EXTRUSION_HEIGHT, DEFAULT_FILL_EXTRUSION_STYLE, DEFAULT_FILL_EXTRUSION_VERTICAL_GRADIENT, DEFAULT_FILL_STYLE, DEFAULT_FILTER_PADDING, DEFAULT_GRID_GAP, DEFAULT_HEATMAP_COLOR, DEFAULT_HEATMAP_INTENSITY, DEFAULT_HEATMAP_RADIUS, DEFAULT_HEATMAP_STYLE, DEFAULT_HEATMAP_WEIGHT, DEFAULT_ICON_ANCHOR, DEFAULT_ICON_OVERLAP, DEFAULT_ICON_PADDING, DEFAULT_ICON_ROTATE, DEFAULT_ICON_SIZE, 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_SYMBOL_COLOR, DEFAULT_SYMBOL_HALO_COLOR, DEFAULT_SYMBOL_PLACEMENT, DEFAULT_SYMBOL_SPACING, DEFAULT_SYMBOL_STYLE, DEFAULT_TEXT_ANCHOR, DEFAULT_TEXT_JUSTIFY, DEFAULT_TEXT_SIZE, DEFAULT_TEXT_TRANSFORM, DEFAULT_TRACK_FR, DEFAULT_TRANSLATE, DEFAULT_ZOOM, DRAG_THRESHOLD_PX, 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, EXTENT_FILTER_NAME, EditGeometryType, ElementButton, ElementCamera, ElementChart, ElementChips, ElementControl, ElementIcon, ElementImage, ElementLegend, ElementLink, ElementMarkdown, ElementSlideshow, ElementSvg, ElementTable, ElementTooltip, ElementValueWrapper, ExpandableTitle, FEATURE_CARD_DEFAULT_COLORS, FEATURE_CARD_OTHER_COLOR, FILL_SIZE, FILTERED_VALUE_OPACITY, FILTER_PREFIX, FR_PRECISION, FeatureCardBackgroundHeader, FeatureCardButtons, FeatureCardContext, FeatureCardDefaultHeader, FeatureCardHeader, FeatureCardProvider, FeatureCardSlideshowHeader, FeatureCardTitle, FeatureControls, FeatureTitleContainer, FiltersContainer, GEOMETRY_ATTRIBUTE, GEOMETRY_FILTER_NAME, GRID_AUTO_FILL_DEFAULTS, GRID_CELL_ATTR, GRID_CELL_ID_PREFIX, GRID_DRAGGING_ATTR, GRID_DRAG_SOURCE_ATTR, GRID_DROP_TARGET_ATTR, GRID_FILL_DEFAULTS, GRID_HANDLE_ATTR, GRID_HANDLE_PROPS, GRID_ROW_ID_PREFIX, GlobalContext, GlobalProvider, GridRowContainer, HANDLE_BLEED_PX, 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, MAP_VIEW_FILTER_NAMES, MAX_CHART_WIDTH, MAX_TRACKS, MIN_TRACK_PX, MIN_TRACK_RATIO, Map$1 as Map, MapContext, MapProvider, NO_CELL_DRAG_SELECTOR, NO_CONTENT_VALUE, NUMERIC_ATTRIBUTE_TYPES, NoLiveSnapshotContainer, OBJECT_FITS, OVERFLOWS, OneColumnContainer, PIE_CHART_TOOLTIP_STYLE, 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, StructuredDataContainer, SvgImage, TILE_ALIGNMENTS, TIME_ZONE_FORMAT, TITLE_SLOT_IDS, TabsContainer, TextTrim, ThemeName, TitleContainer, TopContainer, TopContainerButtons, TwoColumnContainer, UploadContainer, VIEW_MODES, WidgetType, ZOOM_FILTER_NAME, addDataSource, addDataSources, adjustColor, applyFiltersToCondition, applyQueryFilters, applyTreeFilterToCondition, applyVarsToCondition, asAttributeName, asChartId, asContainerId, asDataSourceName, asFilterName, asLayerName, asModalId, asResourceId, asTabId, buildGridTemplate, buildTrackTemplate, checkEqualOrIncludes, checkIsLoading, collectConfigIds, containsNodeId, createConfigLayer, createConfigPage, createGridCell, createGridIdFactory, createGridRow, createNewPageId, createSaveNotificationId, dateOptions, debounce, decimalOpacityToHex, enrichStyleItemsWithIds, enrichStyleModelsWithIds, eqlParametersToPayload, fetchQueryDescription, findAttributeInExpression, findCellContext, formatArea, formatAttributeValue, formatChartRelatedValue, formatConditionValue, formatDataSourceCondition, formatDate$1 as formatDate, formatElementValue, formatLength, formatNumber, formatPolygonMeasure, geometryToEwkt, getActualExtrusionHeight, getAttributeByName, getAttributeConfigurationByName, getAttributeIconElement, getAttributeIconUrl, getAttributeValue, getAttributesConfiguration, getAverageTrackSize, 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, getLayoutChildren, getMapViewDataSources, getPagesFromConfig, getPagesFromProjectInfo, getProxyService, getRelatedAttribute, getRenderElement, getResourceUrl, getRootElementId, getSelectedFilterValue, getSlideshowImages, getStyleAttributes, getSvgUrl, getTemplateNameFromAttribute, getThemeByName, getTotalFromAttributes, getTotalFromRelatedFeatures, getTrackSize, getTrackSizeKey, getTrackSizes, getWrapperSizeStyle, hexToRgba, isEmptyElementValue, isEmptyValue, isFeaturesFilterValue, isFillSize, isFrSize, isGridNode, isHiddenEmptyValue, isHookActive, isLayerService, isNotValidSelectedTab, isNumeric, isObject, isProxyService, isRootOwningContainer, isTreeFilterValue, isVisibleContainer, mapNodeById, mergeAttributeConfigurations, metersPerPixel, noMarginMixin, numberOptions, parseFrValue, parseIconNames, parseIconNamesFromClientStyle, pieChartTooltipFromAttributes, pieChartTooltipFromRelatedFeatures, pointOptions, removeDataSource, removeTracks, replaceNodesByIds, rgbToHex, roundFr, roundTotalSum, setLayoutChildren, sizeCssMixin, sliceShownOtherItems, stretchPalette, timeOptions, toConditionsArray, toCssSize, toFrSize, toPxNumber, toRenderableValue, tooltipNameFromAttributes, tooltipValueFromAttributes, tooltipValueFromRelatedFeatures, transparentizeColor, updateDataSource, useAfterSave, useAppHeight, useAttachmentItems, useAttachmentPreviewImages, useAutoCompleteControl, useBeforeSave, useChartChange, useChartData, useContainerAttributes, useContainerRoot, useCurrentPageLayers, useCustomFeatureSelect, useDashboardHeader, useDataSourceLoading, 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, withTrackSize };
18053
18179
  //# sourceMappingURL=react.esm.js.map