@evergis/react 3.1.3 → 3.1.5

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 (80) hide show
  1. package/dist/components/{Map/components/Layer → Layer}/RasterLayer.d.ts +1 -1
  2. package/dist/components/{Map/components/Layer → Layer}/VectorLayer.d.ts +1 -1
  3. package/dist/components/{Map/components/Layer → Layer}/index.d.ts +1 -0
  4. package/dist/components/{Map/components/Layer → Layer}/types.d.ts +1 -1
  5. package/dist/components/{Map/components/Layer → Layer}/utils/getClientStyleItemPrefixSuffix.d.ts +1 -1
  6. package/dist/components/Map/index.d.ts +0 -1
  7. package/dist/components/Map/types.d.ts +0 -1
  8. package/dist/components/index.d.ts +1 -3
  9. package/dist/contexts/MapContext/types.d.ts +31 -0
  10. package/dist/contexts/index.d.ts +2 -0
  11. package/dist/core/classification/parseClientStyle.d.ts +1 -1
  12. package/dist/core/feature/convertSpToTurfFeature.d.ts +2 -2
  13. package/dist/core/index.d.ts +0 -3
  14. package/dist/hooks/index.d.ts +2 -1
  15. package/dist/hooks/map/index.d.ts +1 -18
  16. package/dist/hooks/map/useMapContext.d.ts +1 -1
  17. package/dist/hooks/map/useMapDraw/customModes.d.ts +6 -1
  18. package/dist/hooks/map/useZoomToFeatures.d.ts +2 -2
  19. package/dist/hooks/serverNotifications/index.d.ts +0 -1
  20. package/dist/hooks/serverNotifications/useServerNotificationsContext.d.ts +1 -1
  21. package/dist/hooks/useDebouncedCallback.d.ts +1 -0
  22. package/dist/hooks/useWindowResize.d.ts +1 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/react.cjs.development.js +510 -1253
  25. package/dist/react.cjs.development.js.map +1 -1
  26. package/dist/react.cjs.production.min.js +1 -1
  27. package/dist/react.cjs.production.min.js.map +1 -1
  28. package/dist/react.esm.js +511 -1250
  29. package/dist/react.esm.js.map +1 -1
  30. package/dist/types/index.d.ts +2 -0
  31. package/dist/utils/debounce.d.ts +1 -0
  32. package/dist/utils/index.d.ts +1 -1
  33. package/package.json +3 -3
  34. package/dist/components/ErrorBoundary/styled.d.ts +0 -1
  35. package/dist/components/Map/components/BuildingsLayer/BuildingsLayer.d.ts +0 -3
  36. package/dist/components/Map/components/BuildingsLayer/index.d.ts +0 -2
  37. package/dist/components/Map/components/BuildingsLayer/types.d.ts +0 -4
  38. package/dist/components/Map/components/index.d.ts +0 -2
  39. package/dist/components/MapContext/types.d.ts +0 -138
  40. package/dist/components/ResizablePanel/ResizablePanel.d.ts +0 -3
  41. package/dist/components/ResizablePanel/index.d.ts +0 -2
  42. package/dist/components/ResizablePanel/styled.d.ts +0 -11
  43. package/dist/components/ResizablePanel/types.d.ts +0 -14
  44. package/dist/core/attributes/index.d.ts +0 -1
  45. package/dist/core/geometrySelection/drawModeToGeometrySelectionType.d.ts +0 -3
  46. package/dist/core/geometrySelection/getGeometrySelectionTurfFeature.d.ts +0 -3
  47. package/dist/core/geometrySelection/index.d.ts +0 -2
  48. package/dist/core/types/index.d.ts +0 -2
  49. package/dist/core/types/map.d.ts +0 -5
  50. package/dist/hooks/map/useCurrentSelectedFeature.d.ts +0 -2
  51. package/dist/hooks/map/useEditingFeature.d.ts +0 -1
  52. package/dist/hooks/map/useEwktGeometry.d.ts +0 -1
  53. package/dist/hooks/map/useGeometryEditor.d.ts +0 -2
  54. package/dist/hooks/map/useGeometrySelection.d.ts +0 -2
  55. package/dist/hooks/map/useGeometrySelectionBuffer.d.ts +0 -1
  56. package/dist/hooks/map/useSelectFeaturesCount.d.ts +0 -1
  57. package/dist/hooks/map/useSelectFeaturesCurrentIndex.d.ts +0 -1
  58. package/dist/hooks/map/useSelectFeaturesGeometryMasking.d.ts +0 -1
  59. package/dist/hooks/map/useSelectFeaturesInitialized.d.ts +0 -1
  60. package/dist/hooks/map/useSelectFeaturesLayerName.d.ts +0 -1
  61. package/dist/hooks/map/useSelectFeaturesPagination.d.ts +0 -4
  62. package/dist/hooks/map/useSelectFeaturesStatisticsActive.d.ts +0 -1
  63. package/dist/hooks/map/useSelectFeaturesTotalCounts.d.ts +0 -1
  64. package/dist/hooks/map/useSelectedFeatures.d.ts +0 -2
  65. package/dist/hooks/map/useUpdateCurrentFeature.d.ts +0 -2
  66. package/dist/hooks/map/useZoomToLayer.d.ts +0 -7
  67. package/dist/hooks/useResizer.d.ts +0 -28
  68. package/dist/utils/geometryToWkt.d.ts +0 -2
  69. /package/dist/components/{Map/components/Layer → Layer}/Layer.d.ts +0 -0
  70. /package/dist/components/{Map/components/Layer → Layer}/constants.d.ts +0 -0
  71. /package/dist/{components → contexts}/MapContext/MapContext.d.ts +0 -0
  72. /package/dist/{components → contexts}/MapContext/MapProvider.d.ts +0 -0
  73. /package/dist/{components → contexts}/MapContext/index.d.ts +0 -0
  74. /package/dist/{components → contexts}/ServerNotificationsContext/ServerNotificationsContext.d.ts +0 -0
  75. /package/dist/{components → contexts}/ServerNotificationsContext/ServerNotificationsProvider.d.ts +0 -0
  76. /package/dist/{hooks/serverNotifications → contexts/ServerNotificationsContext/hooks}/useServerNotifications.d.ts +0 -0
  77. /package/dist/{components → contexts}/ServerNotificationsContext/index.d.ts +0 -0
  78. /package/dist/{components → contexts}/ServerNotificationsContext/types.d.ts +0 -0
  79. /package/dist/{core/attributes/types.d.ts → types/attribute.d.ts} +0 -0
  80. /package/dist/{core/types → types}/styling.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"react.cjs.production.min.js","sources":["../src/components/ErrorBoundary/styled.ts","../src/components/ErrorBoundary/index.tsx","../src/components/Map/styled.ts","../src/hooks/map/useMapContext.ts","../src/hooks/map/useCurrentSelectedFeature.ts","../src/components/MapContext/MapContext.ts","../src/components/MapContext/types.ts","../src/components/MapContext/MapProvider.tsx","../src/hooks/map/useGeometryEditor.ts","../src/hooks/map/useGeometrySelection.ts","../src/utils/date.ts","../src/utils/geometryToWkt.ts","../src/hooks/map/useMapDraw/customModes.ts","../src/hooks/map/useMapDraw/index.ts","../src/hooks/map/useMapDraw/customStyles.ts","../src/core/classification/findAttributeInExpression.ts","../src/core/classification/getActualExtrusionHeight.ts","../src/core/feature/convertSpToTurfFeature.ts","../src/hooks/serverNotifications/useServerNotifications.ts","../src/components/ServerNotificationsContext/ServerNotificationsContext.ts","../src/hooks/useResizer.ts","../src/components/Map/components/Layer/RasterLayer.tsx","../src/components/Map/components/Layer/constants.ts","../src/components/Map/components/Layer/VectorLayer.tsx","../src/components/Map/components/Layer/utils/getClientStyleItemPrefixSuffix.ts","../src/components/ResizablePanel/styled.ts","../src/components/Map/components/BuildingsLayer/BuildingsLayer.tsx","../src/components/Map/components/Layer/Layer.tsx","../src/components/Map/Map.tsx","../src/components/ResizablePanel/ResizablePanel.tsx","../src/components/ServerNotificationsContext/ServerNotificationsProvider.tsx","../src/core/geometrySelection/drawModeToGeometrySelectionType.ts","../src/core/geometrySelection/getGeometrySelectionTurfFeature.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts","../src/core/classification/parseClientStyle.ts","../src/hooks/map/useEditingFeature.ts","../src/hooks/map/useEwktGeometry.ts","../src/hooks/map/useGeometrySelectionBuffer.ts","../src/hooks/map/useRedrawLayer.ts","../src/hooks/map/useSelectFeaturesCount.ts","../src/hooks/map/useSelectFeaturesCurrentIndex.ts","../src/hooks/map/useSelectFeaturesGeometryMasking.ts","../src/hooks/map/useSelectFeaturesInitialized.ts","../src/hooks/map/useSelectFeaturesLayerName.ts","../src/hooks/map/useSelectFeaturesPagination.ts","../src/hooks/map/useSelectFeaturesStatisticsActive.ts","../src/hooks/map/useSelectFeaturesTotalCounts.ts","../src/hooks/map/useSelectedFeatures.ts","../src/hooks/serverNotifications/useServerNotificationsContext.ts","../src/hooks/useToggle.ts","../src/hooks/map/useUpdateCurrentFeature.ts","../src/hooks/map/useZoomToFeatures.ts","../src/hooks/map/useZoomToLayer.ts","../src/hooks/map/useZoomToPoint.ts"],"sourcesContent":["import styled from \"styled-components\";\n\nexport const ErrorBoundaryContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100vh;\n`;\n","import React, { Component } from \"react\";\n\nimport { ErrorBoundaryContainer } from \"./styled\";\n\nimport { ErrorBoundaryProps, ErrorBoundaryState } from \"./types\";\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n public state = { hasError: false };\n\n public static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n public componentDidCatch(error: Error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n public render() {\n const { children, errorContents } = this.props;\n const { hasError } = this.state;\n\n return !hasError ? (\n <>{children}</>\n ) : (\n <ErrorBoundaryContainer>\n {errorContents}\n </ErrorBoundaryContainer>\n );\n }\n}\n","import { CSSProperties } from \"react\";\nimport styled from \"styled-components\";\n\nexport const MapWrapper = styled.div<{ $zIndex?: CSSProperties[\"zIndex\"] }>`\n position: relative;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n z-index: ${({ $zIndex }) => $zIndex ?? 1};\n\n .mapbox-gl-draw_trash {\n display: none;\n }\n\n .mapboxgl-ctrl-logo {\n display: none;\n }\n\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n display: none;\n }\n\n .mapboxgl-ctrl-geocoder.mapboxgl-ctrl {\n width: 350px;\n }\n`;\n","import { useContext } from \"react\";\n\nimport { MapContext } from \"../../components\";\n\nexport const useMapContext = () => {\n return useContext(MapContext);\n};\n","import { useMemo } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nimport { SelectedFeature } from \"../../components/MapContext\";\n\nexport const useCurrentSelectedFeature = (): SelectedFeature => {\n const { selectFeatures } = useMapContext();\n\n return useMemo(() => {\n return selectFeatures.features?.[selectFeatures.layerName]?.find(item => item.id === selectFeatures.currentId);\n }, [selectFeatures]);\n};\n","import { createContext } from \"react\";\n\nimport { MapContextProps } from \"./types\";\n\nexport const MapContext = createContext<MapContextProps>({});\n","import { Dispatch, MutableRefObject, PropsWithChildren, SetStateAction } from \"react\";\nimport { Map as MapboxGLMap } from \"mapbox-gl\";\nimport MapboxDraw from \"@mapbox/mapbox-gl-draw\";\nimport { FeatureDc, LayerDefinitionDc, GeometryType } from \"@evergis/api\";\nimport { Feature } from \"geojson\";\n\nexport enum BaseMapTheme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\nexport interface BaseMapItem {\n name: string;\n source: string;\n preview?: string;\n imgSrc?: string;\n title: string;\n theme?: BaseMapTheme;\n opacity?: number;\n color?: string;\n}\n\nexport enum GeometrySelectionTypes {\n Point = \"select_point\",\n Line = \"select_line\",\n Circle = \"select_circle\",\n Rect = \"select_rect\",\n Polygon = \"select_polygon\",\n Zones = \"zones_selection\",\n Coordinates = \"xy\",\n Route = \"selection_route\",\n}\n\nexport enum GeometrySelectionToolTypes {\n Replace = \"Replace\",\n Unite = \"Unite\",\n Crop = \"Crop\",\n Edit = \"Edit\",\n}\n\nexport type SelectionHistoryFeature = Feature;\n\nexport interface SelectionHistory {\n features: Array<SelectionHistoryFeature[]>;\n zones?: Array<Array<Feature[]>>;\n step: number;\n}\n\nexport enum GeometrySelectionZoneTypes {\n Walking = \"Walking\",\n Car = \"Car\",\n}\n\nexport enum GeometrySelectionRouteTypes {\n Walking = \"Walking\",\n Car = \"Car\",\n}\n\nexport interface GeometrySelectionSettings {\n zoneDuration?: number;\n zoneType?: GeometrySelectionZoneTypes;\n routeType?: GeometrySelectionRouteTypes;\n bufferRadius?: string;\n bufferMultiplier?: string;\n bufferInclude?: boolean;\n selectOutside?: boolean;\n}\n\nexport interface GeometrySelection {\n active?: boolean;\n loading?: boolean;\n type?: GeometrySelectionTypes;\n currentTool?: GeometrySelectionToolTypes;\n history?: SelectionHistory;\n editHistory?: SelectionHistory;\n isBuffer?: boolean;\n settings?: GeometrySelectionSettings;\n}\n\nexport enum GeometryEditorMode {\n Create,\n Edit,\n Transform,\n Expand,\n Unite,\n Subtract,\n}\n\nexport type Coordinates = [number, number];\n\nexport type Positions = Coordinates | Coordinates[] | Coordinates[][];\n\nexport interface GeometryEditor {\n active: boolean;\n geometryType?: GeometryType;\n layerName?: string;\n geometry?: Positions;\n mode?: GeometryEditorMode;\n}\n\nexport interface FeaturedDcExtendedGeometry extends Omit<FeatureDc[\"geometry\"], \"coordinates\"> {\n coordinates?: any;\n}\n\nexport interface FeatureDcExtended extends Omit<FeatureDc, \"geometry\"> {\n geometry: FeaturedDcExtendedGeometry;\n layer: string;\n}\n\nexport interface SelectedFeature extends FeatureDcExtended {\n layerDefinition: LayerDefinitionDc;\n}\n\nexport interface SelectFeatures {\n initialized?: boolean;\n layerName?: string;\n currentId: string | null;\n selectionOffset?: number;\n features: Record<string, SelectedFeature[]>;\n totalCounts: Record<string, number>;\n statisticsActive?: boolean;\n geometryMasking?: boolean;\n}\n\nexport interface MapContextProps {\n map?: MutableRefObject<MapboxGLMap>;\n draw?: MutableRefObject<Omit<MapboxDraw, \"getDefaultPosition\">>;\n loaded?: boolean;\n setLoaded?: Dispatch<SetStateAction<boolean>>;\n basemapItems?: BaseMapItem[];\n basemapName?: string;\n setBasemapName?: Dispatch<SetStateAction<string>>;\n defaultBasemap?: string;\n globeProjection?: boolean;\n setGlobeProjection?: Dispatch<SetStateAction<boolean>>;\n geometrySelection?: GeometrySelection;\n setGeometrySelection?: Dispatch<SetStateAction<GeometrySelection>>;\n resetGeometrySelection?: VoidFunction;\n geometryEditor?: GeometryEditor;\n setGeometryEditor?: Dispatch<SetStateAction<GeometryEditor>>;\n resetGeometryEditor?: VoidFunction;\n selectFeatures?: SelectFeatures;\n setNextFeature?: VoidFunction;\n setPrevFeature?: VoidFunction;\n setSelectedFeatures?: (payload?: SelectFeatures[\"features\"], currentId?: any, offset?: number) => void;\n setSelectedFeaturesTotalCounts?: Dispatch<SetStateAction<SelectFeatures[\"totalCounts\"]>>;\n setSelectFeaturesInitialized?: Dispatch<SetStateAction<boolean>>;\n setSelectFeaturesLayerName?: Dispatch<SetStateAction<string>>;\n setSelectFeaturesStatisticsActive?: Dispatch<SetStateAction<boolean>>;\n setSelectFeaturesGeometryMasking?: Dispatch<SetStateAction<boolean>>;\n updateCurrentFeature?: Dispatch<SetStateAction<Partial<SelectedFeature>>>;\n resetSelectedFeatures?: VoidFunction;\n}\n\nexport interface MapProviderProps extends PropsWithChildren {\n basemapItems: BaseMapItem[];\n defaultBasemap: string;\n}\n","import React, { FC, useCallback, useRef, useState } from \"react\";\nimport { Map as MapboxGLMap } from \"mapbox-gl\";\nimport MapboxDraw from \"@mapbox/mapbox-gl-draw\";\nimport { changeProps } from \"find-and\";\n\nimport { MapContext } from \"./MapContext\";\n\nimport {\n GeometrySelectionRouteTypes,\n GeometrySelectionToolTypes,\n GeometrySelectionTypes,\n GeometrySelectionZoneTypes,\n GeometrySelection,\n MapProviderProps,\n GeometryEditor,\n SelectFeatures,\n SelectedFeature,\n FeatureDcExtended,\n} from \"./types\";\n\nconst initialGeometrySelection: GeometrySelection = {\n active: true,\n loading: false,\n type: GeometrySelectionTypes.Point,\n currentTool: GeometrySelectionToolTypes.Replace,\n history: {\n features: [],\n zones: [],\n step: -1,\n },\n editHistory: {\n features: [],\n step: -1,\n },\n isBuffer: false,\n settings: {\n zoneDuration: 60,\n zoneType: GeometrySelectionZoneTypes.Walking,\n routeType: GeometrySelectionRouteTypes.Walking,\n bufferRadius: \"\",\n bufferMultiplier: \"1\",\n bufferInclude: true,\n selectOutside: false,\n },\n};\n\nconst initialGeometryEditor: GeometryEditor = {\n active: false,\n};\n\nconst initialSelectFeatures: SelectFeatures = {\n initialized: false,\n layerName: undefined,\n currentId: null,\n selectionOffset: 0,\n features: {},\n totalCounts: {},\n statisticsActive: false,\n geometryMasking: false,\n};\n\nexport const MapProvider: FC<MapProviderProps> = ({ basemapItems, defaultBasemap, children }) => {\n const map = useRef<MapboxGLMap | undefined>();\n const draw = useRef<MapboxDraw | undefined>();\n const [loaded, setLoaded] = useState<boolean>(false);\n const [basemapName, setBasemapName] = useState(defaultBasemap);\n const [globeProjection, setGlobeProjection] = useState(false);\n const [geometrySelection, setGeometrySelection] = useState<GeometrySelection>(initialGeometrySelection);\n const [geometryEditor, setGeometryEditor] = useState<GeometryEditor>(initialGeometryEditor);\n const [selectFeatures, setSelectFeatures] = useState<SelectFeatures>(initialSelectFeatures);\n\n const resetGeometrySelection = useCallback(() => {\n setGeometrySelection(initialGeometrySelection);\n }, []);\n\n const resetGeometryEditor = useCallback(() => {\n setGeometryEditor(initialGeometryEditor);\n }, []);\n\n const setNextFeature = useCallback(() => {\n setSelectFeatures((state: SelectFeatures) => {\n const { layerName, features, currentId } = state;\n const currentIndex = features?.[layerName]?.findIndex(item => item.id === currentId);\n\n if (currentIndex === features?.[layerName]?.length - 1) {\n return state;\n }\n\n const nextId = features?.[layerName]?.[currentIndex + 1]?.id;\n\n return {\n ...state,\n currentId: nextId,\n };\n });\n }, []);\n\n const setPrevFeature = useCallback(() => {\n setSelectFeatures((state: SelectFeatures) => {\n const { layerName, features, currentId } = state;\n const currentIndex = features?.[layerName]?.findIndex(item => item.id === currentId);\n\n if (currentIndex === 0) {\n return state;\n }\n\n const prevId = features?.[layerName]?.[currentIndex - 1]?.id;\n\n return {\n ...state,\n currentId: prevId,\n };\n });\n }, []);\n\n const setSelectedFeatures = useCallback((payload?: SelectFeatures[\"features\"], currentId?: any, offset?: number) => {\n setSelectFeatures((state: SelectFeatures) => {\n const features = payload ?? {};\n const firstNotNullLayerName = Object.keys(features).find(key => features[key].length > 0);\n const featureIdsToSelect = features[firstNotNullLayerName]?.map(({ id }: Pick<FeatureDcExtended, \"id\">) => id);\n\n return {\n ...state,\n features,\n layerName: firstNotNullLayerName,\n currentId: currentId ?? featureIdsToSelect?.[0],\n selectionOffset: offset,\n };\n });\n }, []);\n\n const setSelectedFeaturesTotalCounts = useCallback((payload?: SelectFeatures[\"totalCounts\"]) => {\n setSelectFeatures((state: SelectFeatures) => ({\n ...state,\n totalCounts: payload,\n }));\n }, []);\n\n const setSelectFeaturesInitialized = useCallback((payload?: boolean) => {\n setSelectFeatures((state: SelectFeatures) => ({\n ...state,\n initialized: payload,\n }));\n }, []);\n\n const setSelectFeaturesLayerName = useCallback((payload?: string) => {\n setSelectFeatures((state: SelectFeatures) => ({\n ...state,\n layerName: payload,\n currentId: state.features?.[payload]?.[0]?.id,\n selectionOffset: 0,\n }));\n }, []);\n\n const setSelectFeaturesStatisticsActive = useCallback((payload?: boolean) => {\n setSelectFeatures((state: SelectFeatures) => ({\n ...state,\n statisticsActive: payload,\n }));\n }, []);\n\n const setSelectFeaturesGeometryMasking = useCallback((payload?: boolean) => {\n setSelectFeatures((state: SelectFeatures) => ({\n ...state,\n geometryMasking: payload,\n }));\n }, []);\n\n const updateCurrentFeature = useCallback((payload?: SelectedFeature) => {\n setSelectFeatures((state: SelectFeatures) => ({\n ...state,\n features: {\n ...state.features,\n [state.layerName]: changeProps(state.features?.[state.layerName] ?? [], { id: state.currentId }, payload),\n },\n }));\n }, []);\n\n const resetSelectedFeatures = useCallback(() => {\n setSelectFeatures(initialSelectFeatures);\n }, []);\n\n return (\n <MapContext.Provider\n value={{\n map,\n draw,\n loaded,\n setLoaded,\n basemapItems,\n basemapName,\n setBasemapName,\n defaultBasemap,\n globeProjection,\n setGlobeProjection,\n geometrySelection,\n setGeometrySelection,\n resetGeometrySelection,\n geometryEditor,\n setGeometryEditor,\n resetGeometryEditor,\n selectFeatures,\n setNextFeature,\n setPrevFeature,\n setSelectedFeatures,\n setSelectedFeaturesTotalCounts,\n setSelectFeaturesInitialized,\n setSelectFeaturesLayerName,\n setSelectFeaturesStatisticsActive,\n setSelectFeaturesGeometryMasking,\n updateCurrentFeature,\n resetSelectedFeatures,\n }}\n >\n {children}\n </MapContext.Provider>\n );\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nimport { GeometryEditor } from \"../../components\";\n\nexport const useGeometryEditor = (): [GeometryEditor, (state: Partial<GeometryEditor>) => void] => {\n const { geometryEditor, setGeometryEditor } = useMapContext();\n\n const update = useCallback(\n (newState: Partial<GeometryEditor>) => {\n setGeometryEditor(prevState => ({\n ...prevState,\n ...newState,\n }));\n },\n [setGeometryEditor],\n );\n\n return [geometryEditor, update];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nimport { GeometrySelection } from \"../../components\";\n\nexport const useGeometrySelection = (): [GeometrySelection, (state: Partial<GeometrySelection>) => void] => {\n const { geometrySelection, setGeometrySelection } = useMapContext();\n\n const updateGeometrySelection = useCallback(\n (newState: Partial<GeometrySelection>) => {\n setGeometrySelection(prevState => ({\n ...prevState,\n ...newState,\n }));\n },\n [setGeometrySelection],\n );\n\n return [geometrySelection, updateGeometrySelection];\n};\n","import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = \"—\";\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","import { stringify } from \"wkt\";\n\nimport { SelectionHistoryFeature } from \"../components\";\n\nexport const geometryToWkt = (features: SelectionHistoryFeature[] = []): string => {\n if (features.length === 0) {\n return \"\";\n }\n\n return stringify(features[0]);\n};\n","import MapboxDraw, { DrawCustomMode } from \"@mapbox/mapbox-gl-draw\";\n\nimport { ExtendedMapboxDrawModes } from \"../../../core\";\n\nexport const customModes = MapboxDraw.modes as ExtendedMapboxDrawModes;\n\nconst StaticMode = {} as DrawCustomMode;\n\nStaticMode.onSetup = function () {\n this.setActionableState(undefined);\n\n return {};\n};\n\nStaticMode.toDisplayFeatures = function (state, geojson, display) {\n display(geojson);\n};\n\ncustomModes.static = StaticMode;\n","import { useEffect } from \"react\";\nimport MapboxDraw from \"@mapbox/mapbox-gl-draw\";\n\nimport { customModes } from \"./customModes\";\nimport { customStyles } from \"./customStyles\";\n\nimport { useMapContext } from \"../useMapContext\";\n\nconst draw = new MapboxDraw({\n displayControlsDefault: false,\n styles: customStyles,\n modes: customModes,\n defaultMode: \"draw_point\",\n controls: {\n trash: true,\n },\n});\n\nexport const useMapDraw = (triggerDeps: Array<unknown> = []) => {\n const { map, draw: drawContext, loaded, basemapName } = useMapContext();\n\n useEffect(() => {\n if (!loaded || !map.current) {\n return;\n }\n\n drawContext.current = draw;\n map.current.addControl(drawContext.current);\n }, [loaded]); // eslint-disable-line\n\n useEffect(() => {\n if (map.current && map.current.hasControl(drawContext.current)) {\n map.current.removeControl(drawContext.current);\n map.current.addControl(drawContext.current);\n }\n }, [basemapName, ...triggerDeps]); // eslint-disable-line\n};\n","export const customStyles = [\n {\n id: \"gl-draw-point\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"]],\n paint: {\n \"circle-radius\": 5,\n \"circle-color\": \"#D20C0C\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 3,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"highlight-inactive-points\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"meta\", \"feature\"], [\"==\", \"active\", \"false\"]],\n paint: {\n \"circle-radius\": 5,\n \"circle-color\": \"#D20C0C\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 3,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"highlight-active-points\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"meta\", \"feature\"], [\"==\", \"active\", \"true\"]],\n paint: {\n \"circle-radius\": 3,\n \"circle-color\": \"#fbb03b\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 1,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"gl-draw-polygon-fill-static\",\n type: \"fill\",\n filter: [\"all\", [\"==\", \"$type\", \"Polygon\"]],\n paint: {\n \"fill-color\": \"#D20C0C\",\n \"fill-outline-color\": \"#D20C0C\",\n \"fill-opacity\": 0.1,\n },\n },\n {\n id: \"gl-draw-line\",\n type: \"line\",\n filter: [\"all\", [\"==\", \"$type\", \"LineString\"]],\n layout: {\n \"line-cap\": \"round\",\n \"line-join\": \"round\",\n },\n paint: {\n \"line-color\": \"#D20C0C\",\n \"line-dasharray\": [0.2, 2],\n \"line-width\": 2,\n },\n },\n {\n id: \"gl-draw-polygon-fill\",\n type: \"fill\",\n filter: [\"all\", [\"==\", \"$type\", \"Polygon\"]],\n paint: {\n \"fill-color\": \"#D20C0C\",\n \"fill-outline-color\": \"#D20C0C\",\n \"fill-opacity\": 0.1,\n },\n },\n {\n id: \"gl-draw-polygon-midpoint\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"meta\", \"midpoint\"]],\n paint: {\n \"circle-radius\": 3,\n \"circle-color\": \"#fbb03b\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 1,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"gl-draw-polygon-stroke-active\",\n type: \"line\",\n filter: [\"all\", [\"==\", \"$type\", \"Polygon\"]],\n layout: {\n \"line-cap\": \"round\",\n \"line-join\": \"round\",\n },\n paint: {\n \"line-color\": \"#D20C0C\",\n \"line-dasharray\": [0.2, 2],\n \"line-width\": 2,\n },\n },\n {\n id: \"gl-draw-polygon-and-line-vertex-active\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"meta\", \"vertex\"], [\"==\", \"$type\", \"Point\"]],\n paint: {\n \"circle-radius\": 3,\n \"circle-color\": \"#D20C0C\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 3,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n];\n","import { ExpressionSpecification } from \"mapbox-gl\";\n\nexport const findAttributeInExpression = (expression: ExpressionSpecification): string[] => {\n if (Array.isArray(expression) && expression.length === 2 && expression[0] === \"get\") {\n return [expression[1]];\n }\n\n return expression.reduce((acc: string[], curr) => {\n if (!Array.isArray(curr)) {\n return acc;\n }\n\n if (curr[0] === \"get\") {\n return [...new Set([...acc, curr[1]])];\n }\n\n return [...new Set([...acc, ...findAttributeInExpression(curr as ExpressionSpecification)])];\n }, []);\n};\n","import { AnyPaint } from \"mapbox-gl\";\n\nexport const getActualExtrusionHeight = (paint: AnyPaint) => {\n return Array.isArray(paint?.[\"fill-extrusion-height\"]) && paint?.[\"fill-extrusion-height\"][0] === \"+\"\n ? paint?.[\"fill-extrusion-height\"][1]\n : paint?.[\"fill-extrusion-height\"];\n};\n","import { GeometryType } from \"@evergis/api\";\nimport { multiLineString, multiPoint, point, polygon } from \"@turf/turf\";\nimport { Feature } from \"geojson\";\n\nimport { FeaturedDcExtendedGeometry } from \"../../components\";\n\nexport const convertSpToTurfFeature = (geometry?: FeaturedDcExtendedGeometry): Feature<any> | undefined => {\n if (!geometry) {\n return;\n }\n\n switch (geometry.type) {\n case GeometryType.Point:\n return point(geometry.coordinates);\n case GeometryType.Multipoint:\n return multiPoint(geometry.coordinates);\n case GeometryType.Polyline:\n return multiLineString(geometry.coordinates);\n case GeometryType.Polygon:\n case GeometryType.Envelope:\n return polygon(geometry.coordinates);\n default:\n }\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { HubConnection, HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\";\n\nexport const useServerNotifications = (url: string, initialized: boolean): HubConnection | null => {\n const hubConnection = useRef<HubConnection | null>(null);\n const [connection, setConnection] = useState<HubConnection | null>(null);\n\n useEffect(() => {\n if (!initialized) {\n return;\n }\n\n hubConnection.current = new HubConnectionBuilder()\n .withUrl(url, {\n withCredentials: true,\n })\n .configureLogging(LogLevel.Information)\n .build();\n\n hubConnection.current\n .start()\n .then(() => console.info(\"Серверные нотификации подключены\"))\n .catch(err => console.info(\"Ошибка:\", err))\n .finally(() => setConnection(hubConnection.current));\n }, [initialized]); // eslint-disable-line\n\n useEffect(() => {\n if (!connection || connection.state !== \"Connected\") {\n return;\n }\n\n connection\n .invoke(\"SubscribeNotifications\", [])\n .then(() => console.info(\"Подписка `SubscribeNotifications` оформлена\"))\n .catch(err => console.info(\"Ошибка подписки `SubscribeNotifications`:\", err));\n }, [connection]);\n\n return connection;\n};\n","import { createContext } from \"react\";\n\nimport { ServerNotificationsContextProps } from \"./types\";\n\nexport const ServerNotificationsContext = createContext<ServerNotificationsContextProps>({});\n","import { useCallback, useLayoutEffect, useRef } from \"react\";\nimport { isNil } from \"lodash\";\n\nexport enum VerticalPosition {\n Top = \"top\",\n Bottom = \"bottom\",\n}\n\nexport enum HorizontalPosition {\n Left = \"left\",\n Right = \"right\",\n}\n\nexport interface ResizerOptions {\n handleVerticalPosition?: VerticalPosition;\n handleHorizontalPosition?: HorizontalPosition;\n minWidth?: number;\n maxWidth?: number;\n minHeight?: number;\n maxHeight?: number;\n horizontal?: boolean;\n vertical?: boolean;\n useResize?: boolean;\n onResize?: (width: number, height: number) => void;\n onResizeEnd?: (width: number, height: number) => void;\n onResizeStart?: (width: number, height: number) => void;\n}\n\nexport const useResizer = ({\n handleVerticalPosition,\n handleHorizontalPosition,\n minWidth = Number.MIN_SAFE_INTEGER,\n maxWidth = Number.MAX_SAFE_INTEGER,\n horizontal = true,\n minHeight = Number.MIN_SAFE_INTEGER,\n maxHeight = Number.MAX_SAFE_INTEGER,\n vertical = true,\n useResize = false,\n onResize,\n onResizeEnd,\n onResizeStart,\n}: ResizerOptions) => {\n const containerRef = useRef<HTMLDivElement>();\n const verticalHandleRef = useRef<HTMLDivElement>();\n const horizontalHandleRef = useRef<HTMLDivElement>();\n\n const updateSizes = useCallback(\n (width: number, height: number) => {\n let newWidth = width;\n let newHeight = height;\n\n if (horizontal && newWidth < minWidth) {\n newWidth = minWidth;\n }\n\n if (horizontal && newWidth > Math.min(window.innerWidth - horizontalHandleRef.current?.clientWidth, maxWidth)) {\n newWidth = maxWidth;\n }\n\n if (vertical && newHeight < minHeight) {\n newHeight = minHeight;\n }\n\n if (vertical && newHeight > Math.min(window.innerHeight - verticalHandleRef.current?.clientHeight, maxHeight)) {\n newHeight = maxHeight;\n }\n\n if (horizontal) {\n requestAnimationFrame(() => {\n if (!isNil(containerRef.current)) {\n containerRef.current.style.width = `${newWidth}px`;\n }\n });\n }\n\n if (vertical) {\n requestAnimationFrame(() => {\n if (!isNil(containerRef.current)) {\n containerRef.current.style.height = `${newHeight}px`;\n }\n });\n }\n\n onResize?.(newWidth, newHeight);\n },\n [minWidth, maxWidth, minHeight, maxHeight, horizontal, vertical], // eslint-disable-line\n );\n\n const onPointerMove = useCallback(\n (pointerMoveEvent: PointerEvent) => {\n const { x, y } = containerRef.current?.getBoundingClientRect();\n const reverseHorizontal = handleHorizontalPosition === HorizontalPosition.Right;\n const reverseVertical = handleVerticalPosition === VerticalPosition.Bottom;\n\n const newWidth = reverseHorizontal\n ? pointerMoveEvent.pageX - x\n : containerRef.current?.offsetWidth + x - pointerMoveEvent.pageX;\n const newHeight = reverseVertical\n ? pointerMoveEvent.pageY - y\n : containerRef.current?.offsetHeight + y - pointerMoveEvent.pageY;\n\n document.body.style.userSelect = \"none\";\n\n updateSizes(newWidth, newHeight);\n },\n [updateSizes],\n );\n\n const onPointerDown = useCallback(() => {\n const onPointerUp = () => {\n document.body.style.userSelect = \"initial\";\n document.body.removeEventListener(\"pointermove\", onPointerMove);\n\n if (!isNil(containerRef.current)) {\n onResizeEnd?.(containerRef.current.offsetWidth, containerRef.current.offsetHeight);\n }\n };\n\n if (!isNil(containerRef.current)) {\n onResizeStart?.(containerRef.current.offsetWidth, containerRef.current.offsetHeight);\n }\n\n document.body.addEventListener(\"pointermove\", onPointerMove);\n document.body.addEventListener(\"pointerup\", onPointerUp, { once: true });\n }, [onPointerMove]); // eslint-disable-line\n\n useLayoutEffect(() => {\n if (useResize && !isNil(containerRef.current)) {\n updateSizes(containerRef.current.offsetWidth, containerRef.current.offsetHeight);\n }\n }, [updateSizes, useResize]);\n\n return {\n containerRef,\n verticalHandleRef,\n horizontalHandleRef,\n onPointerDown,\n };\n};\n","import React, { FC } from \"react\";\nimport { Source, Layer as MapboxLayer } from \"react-map-gl/mapbox\";\n\nimport { LayerProps } from \"./types\";\n\nexport const RasterLayer: FC<Omit<LayerProps, \"layerType\">> = ({\n layer,\n tileUrl,\n visible,\n beforeId,\n}) => {\n if (!layer) {\n return null;\n }\n\n return (\n <Source id={layer.name} type=\"raster\" tiles={[tileUrl]}>\n <MapboxLayer\n id={layer.name}\n type=\"raster\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{ visibility: visible ? \"visible\" : \"none\" }}\n />\n </Source>\n );\n};\n","import { CirclePaint, FillPaint, FillExtrusionPaint, LinePaint } from \"mapbox-gl\";\n\nconst DEFAULT_COLOR = \"#00ffff\";\nconst DEFAULT_OPACITY = 0.5;\nconst DEFAULT_SIZE = 4;\nconst DEFAULT_LINE_WIDTH = 1;\n\nexport const DEFAULT_CIRCLE_PAINT = {\n \"circle-radius\": DEFAULT_SIZE,\n \"circle-color\": DEFAULT_COLOR,\n \"circle-opacity\": DEFAULT_OPACITY,\n \"circle-stroke-width\": 0,\n \"circle-stroke-color\": DEFAULT_COLOR,\n \"circle-stroke-opacity\": DEFAULT_OPACITY,\n} as CirclePaint;\n\nexport const DEFAULT_FILL_PAINT = {\n \"fill-color\": DEFAULT_COLOR,\n \"fill-opacity\": DEFAULT_OPACITY,\n} as FillPaint;\n\nexport const DEFAULT_FILL_EXTRUSION_PAINT = {\n \"fill-extrusion-base\": 0,\n \"fill-extrusion-vertical-gradient\": true,\n \"fill-extrusion-color\": DEFAULT_COLOR,\n \"fill-extrusion-opacity\": DEFAULT_OPACITY,\n \"fill-extrusion-height\": 0,\n} as FillExtrusionPaint;\n\nexport const DEFAULT_LINE_PAINT = {\n \"line-color\": DEFAULT_COLOR,\n \"line-width\": DEFAULT_LINE_WIDTH,\n \"line-opacity\": DEFAULT_OPACITY,\n} as LinePaint;\n","import React, { FC, useCallback, useEffect } from \"react\";\nimport { Layer as MapboxLayer, Source } from \"react-map-gl/mapbox\";\nimport { FeatureLayerServiceInfoDc, GeometryType, QueryLayerServiceConfigurationDc } from \"@evergis/api\";\nimport { AnyPaint, CirclePaint, FillExtrusionPaint, FillPaint, LinePaint } from \"mapbox-gl\";\n\nimport {\n DEFAULT_CIRCLE_PAINT,\n DEFAULT_FILL_EXTRUSION_PAINT,\n DEFAULT_FILL_PAINT,\n DEFAULT_LINE_PAINT,\n} from \"./constants\";\n\nimport { getClientStyleItemPrefixSuffix } from \"./utils/getClientStyleItemPrefixSuffix\";\nimport { getActualExtrusionHeight } from \"../../../../core\";\n\nimport { LayerProps } from \"./types\";\nimport { ClientStyle } from \"../../../../core\";\n\nexport const VectorLayer: FC<Omit<LayerProps, \"layerType\">> = ({\n layer,\n tileUrl,\n visible,\n beforeId,\n getLayerTempStyle,\n onMount = () => null,\n}) => {\n const clientStyle = (layer?.configuration as QueryLayerServiceConfigurationDc)?.clientStyle as ClientStyle;\n const { idAttribute, geometryType } = (layer as FeatureLayerServiceInfoDc).layerDefinition || {};\n\n const renderLayerByGeometryType = useCallback(() => {\n const visibility = visible ? \"visible\" : \"none\";\n\n switch (geometryType) {\n case GeometryType.Point:\n return (\n <MapboxLayer\n id={layer.name}\n type=\"circle\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"circle\")?.layout,\n visibility,\n }}\n paint={{\n ...DEFAULT_CIRCLE_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"circle\")?.paint as CirclePaint),\n }}\n />\n );\n case GeometryType.Polygon:\n return [\n <MapboxLayer\n key={`polygon-layer-${layer.name}`}\n id={layer.name}\n type=\"fill\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"fill\")?.layout,\n visibility:\n visible &&\n getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.settings?.fill?.showBottomSurface !== false &&\n Boolean(\n getActualExtrusionHeight({\n ...DEFAULT_FILL_EXTRUSION_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint as FillExtrusionPaint),\n }),\n )\n ? \"visible\"\n : \"none\",\n }}\n paint={{\n ...DEFAULT_FILL_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill\")?.paint as FillPaint),\n }}\n />,\n <MapboxLayer\n key={`polygon-stroke-layer-${layer.name}`}\n id={`${layer.name}-stroke`}\n type=\"line\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"line\")?.layout,\n visibility:\n visible &&\n getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.settings?.fill?.showBottomSurface !== false &&\n Boolean(\n getActualExtrusionHeight({\n ...DEFAULT_FILL_EXTRUSION_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint as FillExtrusionPaint),\n }),\n )\n ? \"visible\"\n : \"none\",\n }}\n paint={{\n ...DEFAULT_LINE_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"line\")?.paint as LinePaint),\n }}\n />,\n <MapboxLayer\n key={`polygon-extrusion-layer-${layer.name}`}\n id={`${layer.name}-extrusion`}\n type=\"fill-extrusion\"\n source-layer=\"default\"\n beforeId={beforeId}\n minzoom={0}\n maxzoom={23}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.layout,\n visibility,\n }}\n paint={{\n ...DEFAULT_FILL_EXTRUSION_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint as FillExtrusionPaint),\n }}\n />,\n ];\n case GeometryType.Polyline:\n return (\n <MapboxLayer\n id={layer.name}\n type=\"line\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"line\")?.layout,\n visibility,\n }}\n paint={{\n ...DEFAULT_LINE_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"line\")?.paint as LinePaint),\n }}\n />\n );\n default:\n return null;\n }\n }, [geometryType, layer, beforeId, getLayerTempStyle, visible]);\n\n const renderClientStyle = useCallback(() => {\n return clientStyle.items.map(mockItem => {\n const prefixSuffix = getClientStyleItemPrefixSuffix(geometryType, mockItem.type);\n const isExtrusionItem = mockItem.type === \"fill-extrusion\";\n const isPolygonPart =\n clientStyle.items.some(item => item.type === \"fill-extrusion\") &&\n (mockItem.type === \"fill\" || mockItem.type === \"line\");\n const fillExtrusionPaint =\n isPolygonPart || isExtrusionItem\n ? {\n ...clientStyle.items?.find(item => item.type === \"fill-extrusion\")?.paint,\n ...getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint,\n }\n : undefined;\n const currentSettings = {\n ...clientStyle?.settings,\n ...getLayerTempStyle?.(layer.name, mockItem.type)?.settings,\n };\n const processedExtrusionHeight = getActualExtrusionHeight(fillExtrusionPaint);\n const hasExtrusion = Boolean(processedExtrusionHeight);\n const visibility =\n visible &&\n ((isExtrusionItem && hasExtrusion) ||\n (!isPolygonPart && !isExtrusionItem) ||\n (isPolygonPart && (!hasExtrusion || (currentSettings?.fill?.showBottomSurface ?? true))))\n ? \"visible\"\n : \"none\";\n\n return (\n <MapboxLayer\n key={`${prefixSuffix[0]}${layer.name}`}\n id={`${layer.name}${prefixSuffix[1]}`}\n type={mockItem.type}\n source-layer=\"default\"\n beforeId={beforeId}\n minzoom={clientStyle?.minzoom ?? 0}\n maxzoom={clientStyle?.maxzoom ?? 23}\n layout={{\n ...mockItem.layout,\n ...getLayerTempStyle?.(layer.name, mockItem.type)?.layout,\n visibility,\n }}\n paint={\n {\n ...mockItem.paint,\n ...getLayerTempStyle?.(layer.name, mockItem.type)?.paint,\n } as AnyPaint\n }\n />\n );\n });\n }, [beforeId, clientStyle, geometryType, layer.name, visible, getLayerTempStyle]);\n\n useEffect(onMount, [layer.name]); // eslint-disable-line\n\n if (!layer) {\n return null;\n }\n\n return (\n <Source\n promoteId={idAttribute}\n id={layer.name}\n type=\"vector\"\n tiles={[tileUrl]}\n >\n {clientStyle?.items ? renderClientStyle() : renderLayerByGeometryType()}\n </Source>\n );\n};\n","import { GeometryType } from \"@evergis/api\";\n\nimport { ClientStyleItem } from \"../../../../../core\";\n\nexport const getClientStyleItemPrefixSuffix = (\n geometryType: GeometryType,\n type: ClientStyleItem[\"type\"],\n): [string, string] => {\n switch (geometryType) {\n case GeometryType.Point:\n return [\"point-layer-\", \"\"];\n case GeometryType.Polyline:\n return [\"polyline-layer-\", \"\"];\n case GeometryType.Polygon:\n switch (type) {\n case \"line\":\n return [\"polygon-stroke-layer-\", \"-stroke\"];\n case \"fill-extrusion\":\n return [\"polygon-extrusion-layer-\", \"-extrusion\"];\n default:\n return [\"polygon-layer-\", \"\"];\n }\n default:\n return [\"\", \"\"];\n }\n};\n","import styled, { css } from \"styled-components\";\n\nimport { HorizontalPosition, ResizerOptions, VerticalPosition } from \"../../hooks\";\n\nimport { HandlePosition } from \"./types\";\n\nexport const ResizablePanelContainer = styled.div<ResizerOptions & { width?: string; height?: string }>`\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n position: relative;\n\n ${({ horizontal, vertical }) =>\n horizontal && !vertical\n ? css`\n height: 100%;\n `\n : !horizontal && vertical\n ? css`\n width: 100%;\n `\n : \"\"}\n\n ${({ horizontal, vertical }) =>\n css`\n will-change: ${[horizontal && \"width\", vertical && \"height\"].filter(Boolean).join(\",\")};\n `}\n\n ${({ maxHeight }) =>\n maxHeight &&\n css`\n max-height: ${maxHeight}px;\n `}\n ${({ minHeight }) =>\n minHeight &&\n css`\n min-height: ${minHeight}px;\n `}\n ${({ maxWidth }) =>\n maxWidth &&\n css`\n max-width: ${maxWidth}px;\n `}\n ${({ height }) =>\n height &&\n css`\n height: ${height};\n `}\n ${({ width }) =>\n width &&\n css`\n width: ${width};\n `}\n`;\n\nexport const getHandlePositionProps = (position: HandlePosition, palette) => {\n switch (position) {\n case HorizontalPosition.Left:\n return css`\n height: 100%;\n border-left: 2px solid ${palette.elementDeep};\n top: 0;\n left: 0;\n cursor: ew-resize;\n `;\n case HorizontalPosition.Right:\n return css`\n height: 100%;\n border-right: 2px solid ${palette.elementDeep};\n top: 0;\n right: 0;\n cursor: ew-resize;\n `;\n case VerticalPosition.Top:\n return css`\n width: 100%;\n border-top: 2px solid ${palette.elementDeep};\n top: 0;\n left: 0;\n cursor: ns-resize;\n `;\n case VerticalPosition.Bottom:\n return css`\n width: 100%;\n border-bottom: 2px solid ${palette.elementDeep};\n bottom: 0;\n left: 0;\n cursor: ns-resize;\n `;\n default:\n return css`\n width: 100%;\n border-top: 2px solid ${palette.elementDeep};\n top: 0;\n left: 0;\n `;\n }\n};\n\nexport const PanelDragHandle = styled.div<{ disabled?: boolean; position: HandlePosition }>`\n position: absolute;\n box-sizing: border-box;\n z-index: 3;\n\n padding: 0.25rem;\n pointer-events: ${({ disabled }) => disabled && \"none\"};\n transition: border-color 150ms cubic-bezier(0.2, 1, 0.6, 1);\n\n &:hover {\n border-color: ${({ theme: { palette } }) => palette.primary};\n }\n\n ${({ position, theme: { palette } }) => getHandlePositionProps(position, palette)}\n`;\n","import React, { FC } from \"react\";\nimport { Layer as MapboxLayer } from \"react-map-gl/mapbox\";\n\nimport { BuildingsLayerProps } from \"./types\";\n\nexport const BuildingsLayer: FC<BuildingsLayerProps> = ({ beforeId, transparent }) => {\n return (\n <MapboxLayer\n id=\"mapbox-3d-buildings\"\n source=\"composite\"\n source-layer=\"building\"\n filter={[\"==\", \"extrude\", \"true\"]}\n type=\"fill-extrusion\"\n minzoom={15}\n beforeId={beforeId}\n paint={{\n \"fill-extrusion-color\": \"#aaaaaa\",\n \"fill-extrusion-height\": [\"interpolate\", [\"linear\"], [\"zoom\"], 15, 0, 15.05, [\"get\", \"height\"]],\n \"fill-extrusion-base\": [\"interpolate\", [\"linear\"], [\"zoom\"], 15, 0, 15.05, [\"get\", \"min_height\"]],\n \"fill-extrusion-opacity\": transparent ? 0 : 0.5,\n }}\n />\n );\n};\n","import React, { FC, useEffect } from \"react\";\n\nimport { RasterLayer } from \"./RasterLayer\";\nimport { VectorLayer } from \"./VectorLayer\";\n\nimport { LayerProps } from \"./types\";\n\nexport const Layer: FC<LayerProps> = ({\n layer,\n layerType,\n visible,\n beforeId,\n tileUrl,\n onMount = () => null,\n}) => {\n useEffect(onMount, [layer.name]); // eslint-disable-line\n\n if (!layer) {\n return null;\n }\n\n if (layerType === \"RasterTileLayer\") {\n return (\n <RasterLayer\n layer={layer}\n tileUrl={tileUrl}\n visible={visible}\n beforeId={beforeId}\n onMount={onMount}\n />\n );\n }\n\n return (\n <VectorLayer\n layer={layer}\n tileUrl={tileUrl}\n visible={visible}\n beforeId={beforeId}\n onMount={onMount}\n />\n );\n};\n","import React, { FC } from \"react\";\nimport { default as MapGL } from \"react-map-gl/mapbox\";\nimport { Map as MapboxGLMap } from \"mapbox-gl\";\nimport \"@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css\";\n\nimport { MapWrapper } from \"./styled\";\n\nimport { useMapContext, useMapDraw } from \"../../hooks\";\n\nimport { MapProps } from \"./types\";\n\nimport \"mapbox-gl/dist/mapbox-gl.css\";\n\nexport const Map: FC<MapProps> = ({\n zIndex,\n lowerSiblings,\n upperSiblings,\n drawTriggerDeps,\n onError,\n children,\n ...rest\n}) => {\n const { map, setLoaded } = useMapContext();\n\n useMapDraw(drawTriggerDeps);\n\n return (\n <MapWrapper $zIndex={zIndex}>\n {lowerSiblings}\n <MapGL\n {...rest}\n renderWorldCopies\n antialias\n doubleClickZoom={false}\n cursor=\"default\"\n onLoad={e => {\n map.current = e.target as MapboxGLMap;\n\n map.current.on(\"error\", onError);\n\n setLoaded(true);\n }}\n >\n {children}\n </MapGL>\n {upperSiblings}\n </MapWrapper>\n );\n};\n","import React, { FC, useMemo } from \"react\";\n\nimport { PanelDragHandle, ResizablePanelContainer } from \"./styled\";\n\nimport { HorizontalPosition, useResizer, VerticalPosition } from \"../../hooks\";\n\nimport { ResizablePanelProps } from \"./types\";\n\nexport const ResizablePanel: FC<ResizablePanelProps> = ({\n className,\n handleClassName,\n width,\n height,\n disabled,\n handleVerticalPosition = VerticalPosition.Top,\n handleHorizontalPosition = HorizontalPosition.Left,\n Handle,\n children,\n ...resizeProps\n}) => {\n const resizerProps = useMemo(\n () => ({\n ...resizeProps,\n handleVerticalPosition,\n handleHorizontalPosition,\n }),\n [resizeProps, handleVerticalPosition, handleHorizontalPosition],\n );\n\n const { containerRef, verticalHandleRef, horizontalHandleRef, onPointerDown } = useResizer(resizerProps);\n const { vertical, horizontal } = resizeProps;\n\n return (\n <ResizablePanelContainer\n ref={containerRef}\n width={width}\n height={height}\n style={disabled ? { height: \"auto\" } : undefined}\n className={className}\n >\n {vertical && (\n <PanelDragHandle\n ref={verticalHandleRef}\n position={handleVerticalPosition}\n disabled={disabled}\n className={handleClassName}\n onPointerDown={onPointerDown}\n />\n )}\n {horizontal && (\n <PanelDragHandle\n ref={horizontalHandleRef}\n position={handleHorizontalPosition}\n disabled={disabled}\n className={handleClassName}\n onPointerDown={onPointerDown}\n />\n )}\n {children}\n </ResizablePanelContainer>\n );\n};\n","import React, { FC, useCallback } from \"react\";\n\nimport { ServerNotificationsContext } from \"./ServerNotificationsContext\";\n\nimport { useServerNotifications } from \"../../hooks\";\n\nimport { ServerNotificationsProviderProps } from \"./types\";\n\nexport const ServerNotificationsProvider: FC<ServerNotificationsProviderProps> = ({ url, initialized, children }) => {\n const connection = useServerNotifications(url, initialized);\n\n const addSubscription = useCallback(\n async (payload?: any): Promise<string | null> => {\n if (!connection || connection.state !== \"Connected\" || !payload) {\n return;\n }\n\n try {\n const id = await connection.invoke(\"AddSubscription\", payload);\n\n console.info(\"Подписка добавлена, id:\", id);\n\n return id;\n } catch (err) {\n console.info(\"Ошибка добавления подписки:\", err);\n\n return Promise.resolve(null);\n }\n },\n [connection],\n );\n\n const updateSubscription = useCallback(\n async (id: string | null, payload?: any): Promise<void> => {\n if (!connection || connection.state !== \"Connected\" || !id || !payload) {\n return;\n }\n\n try {\n await connection.invoke(\"UpdateSubscription\", id, payload);\n } catch (err) {\n console.info(`Ошибка обновления подписки ${id}:`, err);\n }\n },\n [connection],\n );\n\n const unsubscribeById = useCallback(\n async (id: string | null): Promise<void> => {\n if (!connection || connection.state !== \"Connected\" || !id) {\n return;\n }\n\n try {\n await connection.invoke(\"Unsubscribe\", [id]);\n } catch (err) {\n console.info(`Ошибка отписки по ${id}:`, err);\n }\n },\n [connection],\n );\n\n return (\n <ServerNotificationsContext.Provider value={{ connection, addSubscription, updateSubscription, unsubscribeById }}>\n {children}\n </ServerNotificationsContext.Provider>\n );\n};\n","import { DrawMode } from \"@mapbox/mapbox-gl-draw\";\n\nimport { GeometrySelectionTypes } from \"../../components\";\n\nexport const drawModeToGeometrySelectionType = (mode: DrawMode | string): GeometrySelectionTypes => {\n switch (mode) {\n case \"draw_point\":\n return GeometrySelectionTypes.Point;\n case \"draw_polygon\":\n return GeometrySelectionTypes.Polygon;\n case \"draw_line_string\":\n return GeometrySelectionTypes.Line;\n default:\n return GeometrySelectionTypes.Point;\n }\n};\n","import { toMercator, toWgs84, point, polygon, lineString } from \"@turf/turf\";\nimport { Feature, LineString, Point, Polygon, Position } from \"geojson\";\n\nimport { GeometrySelectionTypes } from \"../../components\";\n\nexport const getGeometrySelectionTurfFeature = (\n coordinates: Position | Position[] | Position[][] | Position[][][],\n selectionType: GeometrySelectionTypes,\n toWgs?: boolean,\n): Feature<Point | LineString | Polygon> => {\n if (toWgs) {\n switch (selectionType) {\n case GeometrySelectionTypes.Point:\n return toWgs84(point(coordinates as Position));\n case GeometrySelectionTypes.Polygon:\n return toWgs84(polygon(coordinates as Position[][]));\n case GeometrySelectionTypes.Line:\n return toWgs84(lineString(coordinates as Position[]));\n default:\n }\n }\n\n switch (selectionType) {\n case GeometrySelectionTypes.Point:\n return toMercator(point(coordinates as Position));\n case GeometrySelectionTypes.Polygon:\n return toMercator(polygon(coordinates as Position[][]));\n case GeometrySelectionTypes.Line:\n return toMercator(lineString(coordinates as Position[]));\n default:\n }\n};\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { isEmpty } from \"lodash\";\nimport { ExpressionSpecification } from \"mapbox-gl\";\n\nimport { findAttributeInExpression } from \"./findAttributeInExpression\";\n\nimport { ClientStyle } from \"../types\";\n\nexport const parseClientStyle = (style?: ClientStyle): string[] => {\n if (!style) {\n return [];\n }\n\n return style?.items?.reduce((acc: string[], curr) => {\n if (!curr.paint || isEmpty(curr.paint)) {\n return acc;\n }\n\n return Object.entries(curr.paint)?.reduce((paintAcc: string[], [, value]) => {\n if (!Array.isArray(value)) {\n return paintAcc;\n }\n\n return [...new Set([...paintAcc, ...findAttributeInExpression(value as ExpressionSpecification)])];\n }, []);\n }, []);\n};\n","import { useMemo } from \"react\";\n\nimport { GeometryEditorMode } from \"../../components/MapContext\";\n\nimport { useGeometryEditor } from \"./useGeometryEditor\";\nimport { useCurrentSelectedFeature } from \"./useCurrentSelectedFeature\";\n\nexport const useEditingFeature = (): boolean => {\n const [{ layerName, active, mode }] = useGeometryEditor();\n const currentSelectedFeature = useCurrentSelectedFeature();\n\n return useMemo(() => {\n return (\n active &&\n ((mode === GeometryEditorMode.Edit && layerName === currentSelectedFeature?.layer) ||\n mode === GeometryEditorMode.Create)\n );\n }, [active, currentSelectedFeature, layerName, mode]);\n};\n","import { useMemo } from \"react\";\nimport { isEmpty } from \"lodash\";\n\nimport { useGeometrySelection } from \"./useGeometrySelection\";\nimport { geometryToWkt } from \"../../utils\";\n\nimport { GeometrySelectionTypes } from \"../../components\";\n\nexport const useEwktGeometry = () => {\n const [{ history, type }] = useGeometrySelection();\n\n return useMemo(() => {\n if (history.step === -1) {\n return \"\";\n }\n\n return type === GeometrySelectionTypes.Zones\n ? !isEmpty(history.zones[history.step]?.[0])\n ? `SRID=3857;${geometryToWkt(history.zones[history.step]?.[0])}`\n : `SRID=3857;${geometryToWkt(history.features[history.step])}`\n : `SRID=3857;${geometryToWkt(history.features[history.step])}`;\n }, [history.features, history.step, history.zones, type]);\n};\n","import { useMemo } from \"react\";\n\nimport { useGeometrySelection } from \"./useGeometrySelection\";\n\nexport const useGeometrySelectionBuffer = (): string | undefined => {\n const [\n {\n settings: { bufferRadius, bufferMultiplier },\n isBuffer,\n },\n ] = useGeometrySelection();\n\n return useMemo((): string | undefined => {\n if (!isBuffer || !bufferRadius) {\n return undefined;\n }\n\n return Number((+bufferRadius || 0) * +bufferMultiplier).toFixed(2);\n }, [isBuffer, bufferRadius, bufferMultiplier]);\n};\n","import { useCallback } from \"react\";\nimport { VectorSourceImpl } from \"mapbox-gl\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useRedrawLayer = () => {\n const { map } = useMapContext();\n\n return useCallback(\n (layerName: string) => {\n const layerTileSource: VectorSourceImpl = map.current.getSource(layerName);\n\n layerTileSource.setTiles(layerTileSource.tiles);\n },\n [map],\n );\n};\n","import { useMemo } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesCount = (): number => {\n const { selectFeatures } = useMapContext();\n\n return useMemo(() => {\n return selectFeatures.features?.[selectFeatures.layerName]?.length ?? 0;\n }, [selectFeatures]);\n};\n","import { useMemo } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesCurrentIndex = (): number => {\n const { selectFeatures } = useMapContext();\n\n return useMemo(() => {\n return selectFeatures.features?.[selectFeatures.layerName]?.length\n ? selectFeatures.features?.[selectFeatures.layerName]?.findIndex(\n feature => feature.id === selectFeatures.currentId,\n )\n : -1;\n }, [selectFeatures]);\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesGeometryMasking = (): [boolean, (state: boolean) => void] => {\n const { selectFeatures, setSelectFeaturesGeometryMasking } = useMapContext();\n\n const update = useCallback(\n (state: boolean) => {\n setSelectFeaturesGeometryMasking(state);\n },\n [setSelectFeaturesGeometryMasking],\n );\n\n return [selectFeatures.geometryMasking, update];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesInitialized = (): [boolean, (value: boolean) => void] => {\n const { selectFeatures, setSelectFeaturesInitialized } = useMapContext();\n\n const update = useCallback(\n (state: boolean) => {\n setSelectFeaturesInitialized(state);\n },\n [setSelectFeaturesInitialized],\n );\n\n return [selectFeatures.initialized, update];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesLayerName = (): [string, (name?: string) => void] => {\n const { selectFeatures, setSelectFeaturesLayerName } = useMapContext();\n\n const update = useCallback(\n (name: string) => {\n setSelectFeaturesLayerName(name);\n },\n [setSelectFeaturesLayerName],\n );\n\n return [selectFeatures.layerName, update];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesPagination = () => {\n const { setNextFeature, setPrevFeature } = useMapContext();\n\n const onNext = useCallback(() => {\n setNextFeature();\n }, [setNextFeature]);\n\n const onPrev = useCallback(() => {\n setPrevFeature();\n }, [setPrevFeature]);\n\n return { onNext, onPrev } as const;\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesStatisticsActive = (): [boolean, (state: boolean) => void] => {\n const { selectFeatures, setSelectFeaturesStatisticsActive } = useMapContext();\n\n const update = useCallback(\n (state: boolean) => {\n setSelectFeaturesStatisticsActive(state);\n },\n [setSelectFeaturesStatisticsActive],\n );\n\n return [selectFeatures.statisticsActive, update];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useSelectFeaturesTotalCounts = (): [\n Record<string, number>,\n (totalCounts: Record<string, number>) => void,\n] => {\n const { selectFeatures, setSelectedFeaturesTotalCounts } = useMapContext();\n\n const update = useCallback(\n (totalCounts: Record<string, number>) => {\n setSelectedFeaturesTotalCounts(totalCounts);\n },\n [setSelectedFeaturesTotalCounts],\n );\n\n return [selectFeatures.totalCounts ?? {}, update];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nimport { SelectedFeature } from \"../../components\";\n\nexport const useSelectedFeatures = (): [\n Record<string, SelectedFeature[]>,\n (features: Record<string, SelectedFeature[]>) => void,\n] => {\n const { selectFeatures, setSelectedFeatures } = useMapContext();\n\n const updatSelectedFeatures = useCallback(\n (features: Record<string, SelectedFeature[]>) => {\n setSelectedFeatures(features);\n },\n [setSelectedFeatures],\n );\n\n return [selectFeatures.features ?? ({} as Record<string, SelectedFeature[]>), updatSelectedFeatures];\n};\n","import { useContext } from \"react\";\n\nimport { ServerNotificationsContext } from \"../../components/ServerNotificationsContext/ServerNotificationsContext\";\n\nexport const useServerNotificationsContext = () => {\n return useContext(ServerNotificationsContext);\n};\n","import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nimport { SelectedFeature } from \"../../components\";\n\nexport const useUpdateCurrentFeature = () => {\n const { updateCurrentFeature } = useMapContext();\n\n return useCallback(\n (values: Partial<SelectedFeature>) => {\n updateCurrentFeature(values);\n },\n [updateCurrentFeature],\n );\n};\n","import { useCallback } from \"react\";\nimport { bbox } from \"@turf/turf\";\n\nimport { useMapContext } from \"./useMapContext\";\nimport { convertSpToTurfFeature } from \"../../core\";\n\nimport { FeatureDcExtended } from \"../../components\";\n\nexport const useZoomToFeatures = () => {\n const { map } = useMapContext();\n\n return useCallback(\n (features?: FeatureDcExtended[], padding?: number) => {\n if (!features) {\n return;\n }\n\n const currentFeatureCenter = bbox({\n type: \"FeatureCollection\",\n features: features.map(feature => convertSpToTurfFeature(feature.geometry)),\n });\n\n map.current.fitBounds(currentFeatureCenter as [number, number, number, number], { padding: padding ?? 150 });\n },\n [map],\n );\n};\n","import { useCallback } from \"react\";\nimport { BulkExtentsDc } from \"@evergis/api\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nconst DEFAULT_PADDING = 50;\n\ninterface ZoomToLayerOptions {\n discardFilters?: boolean;\n padding?: number;\n}\n\nexport const useZoomToLayer = () => {\n const { map } = useMapContext();\n\n return useCallback(\n async (bulkExtent: BulkExtentsDc, options?: ZoomToLayerOptions) => {\n if (!bulkExtent || !bulkExtent.overall) {\n return;\n }\n\n map.current.fitBounds(\n [...bulkExtent.overall.coordinates[0], ...bulkExtent.overall.coordinates[1]] as [\n number,\n number,\n number,\n number,\n ],\n { padding: options?.padding ?? DEFAULT_PADDING },\n );\n },\n [map],\n );\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useZoomToPoint = () => {\n const { map } = useMapContext();\n\n return useCallback(\n (options, callback?: VoidFunction) => {\n if (map.current) {\n if (callback) {\n map.current.once(\"moveend\", () => {\n callback();\n });\n }\n\n map.current.flyTo(options);\n } else {\n callback?.();\n }\n },\n [map],\n );\n};\n"],"names":["ErrorBoundaryContainer","styled","div","ErrorBoundary","hasError","Component","error","console","children","errorContents","this","props","state","React","MapWrapper","$zIndex","useMapContext","useContext","MapContext","useCurrentSelectedFeature","selectFeatures","useMemo","features","_selectFeatures$featu","layerName","find","item","id","currentId","createContext","BaseMapTheme","GeometrySelectionTypes","GeometrySelectionToolTypes","GeometrySelectionZoneTypes","GeometrySelectionRouteTypes","GeometryEditorMode","initialGeometrySelection","active","loading","type","Point","currentTool","Replace","history","zones","step","editHistory","isBuffer","settings","zoneDuration","zoneType","Walking","routeType","bufferRadius","bufferMultiplier","bufferInclude","selectOutside","initialGeometryEditor","initialSelectFeatures","initialized","undefined","selectionOffset","totalCounts","statisticsActive","geometryMasking","useGeometryEditor","geometryEditor","setGeometryEditor","useCallback","newState","prevState","useGeometrySelection","geometrySelection","setGeometrySelection","NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","geometryToWkt","length","stringify","customModes","MapboxDraw","modes","static","StaticMode","setActionableState","geojson","display","draw","displayControlsDefault","styles","filter","paint","layout","defaultMode","controls","trash","useMapDraw","triggerDeps","map","drawContext","loaded","basemapName","useEffect","current","addControl","hasControl","removeControl","findAttributeInExpression","expression","Array","isArray","reduce","acc","curr","Set","getActualExtrusionHeight","convertSpToTurfFeature","geometry","GeometryType","point","coordinates","Multipoint","multiPoint","Polyline","multiLineString","Polygon","Envelope","polygon","useServerNotifications","url","hubConnection","useRef","connection","setConnection","useState","HubConnectionBuilder","withUrl","withCredentials","configureLogging","LogLevel","Information","build","start","then","info","catch","err","finally","invoke","ServerNotificationsContext","VerticalPosition","HorizontalPosition","useResizer","handleVerticalPosition","handleHorizontalPosition","minWidth","Number","MIN_SAFE_INTEGER","maxWidth","MAX_SAFE_INTEGER","horizontal","minHeight","maxHeight","vertical","useResize","onResize","onResizeEnd","onResizeStart","containerRef","verticalHandleRef","horizontalHandleRef","updateSizes","width","height","newWidth","newHeight","Math","min","window","innerWidth","_horizontalHandleRef$","clientWidth","innerHeight","_verticalHandleRef$cu","clientHeight","requestAnimationFrame","isNil","style","onPointerMove","pointerMoveEvent","x","y","_containerRef$current","getBoundingClientRect","reverseHorizontal","Right","reverseVertical","Bottom","pageX","offsetWidth","pageY","offsetHeight","document","body","userSelect","onPointerDown","addEventListener","removeEventListener","once","useLayoutEffect","RasterLayer","layer","tileUrl","visible","beforeId","Source","name","tiles","MapboxLayer","visibility","DEFAULT_CIRCLE_PAINT","DEFAULT_FILL_PAINT","DEFAULT_FILL_EXTRUSION_PAINT","DEFAULT_LINE_PAINT","VectorLayer","getLayerTempStyle","onMount","clientStyle","configuration","_layer$configuration","idAttribute","geometryType","layerDefinition","renderLayerByGeometryType","_getLayerTempStyle","_getLayerTempStyle2","key","_getLayerTempStyle3","fill","showBottomSurface","Boolean","_getLayerTempStyle5","_getLayerTempStyle6","_getLayerTempStyle7","_getLayerTempStyle9","_getLayerTempStyle10","minzoom","maxzoom","_getLayerTempStyle11","_getLayerTempStyle12","_getLayerTempStyle13","_getLayerTempStyle14","renderClientStyle","items","mockItem","prefixSuffix","getClientStyleItemPrefixSuffix","isExtrusionItem","isPolygonPart","some","fillExtrusionPaint","_clientStyle$items","_getLayerTempStyle15","currentSettings","_getLayerTempStyle16","processedExtrusionHeight","hasExtrusion","_currentSettings$fill2","_getLayerTempStyle17","_getLayerTempStyle18","promoteId","ResizablePanelContainer","css","join","PanelDragHandle","disabled","theme","palette","primary","position","Left","elementDeep","Top","getHandlePositionProps","transparent","source","layerType","zIndex","lowerSiblings","upperSiblings","drawTriggerDeps","onError","rest","setLoaded","MapGL","renderWorldCopies","antialias","doubleClickZoom","cursor","onLoad","e","target","on","basemapItems","defaultBasemap","setBasemapName","globeProjection","setGlobeProjection","setSelectFeatures","resetGeometrySelection","resetGeometryEditor","setNextFeature","currentIndex","_features$layerName","findIndex","_features$layerName3","setPrevFeature","_features$layerName4","_features$layerName5","setSelectedFeatures","payload","offset","firstNotNullLayerName","Object","keys","featureIdsToSelect","_features$firstNotNul","setSelectedFeaturesTotalCounts","setSelectFeaturesInitialized","setSelectFeaturesLayerName","_state$features","setSelectFeaturesStatisticsActive","setSelectFeaturesGeometryMasking","updateCurrentFeature","changeProps","_state$features2","resetSelectedFeatures","Provider","value","className","handleClassName","resizeProps","resizerProps","ref","addSubscription","async","Promise","resolve","updateSubscription","unsubscribeById","mode","Line","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","selectionType","toWgs","toWgs84","lineString","toMercator","number","isNaN","parseFloat","isFinite","_style$items","isEmpty","entries","_Object$entries","paintAcc","currentSelectedFeature","Edit","Create","Zones","_history$zones$histor","_history$zones$histor2","toFixed","layerTileSource","getSource","setTiles","_selectFeatures$featu2","feature","update","onNext","onPrev","updatSelectedFeatures","initial","setState","toggle","values","padding","currentFeatureCenter","bbox","fitBounds","bulkExtent","options","overall","callback","flyTo"],"mappings":"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"}
1
+ {"version":3,"file":"react.cjs.production.min.js","sources":["../src/components/ErrorBoundary/index.tsx","../src/components/Layer/constants.ts","../src/components/Layer/RasterLayer.tsx","../src/core/classification/findAttributeInExpression.ts","../src/core/classification/getActualExtrusionHeight.ts","../src/core/feature/convertSpToTurfFeature.ts","../src/components/Layer/VectorLayer.tsx","../src/components/Layer/utils/getClientStyleItemPrefixSuffix.ts","../src/components/Map/styled.ts","../src/hooks/map/useMapDraw/customModes.ts","../src/contexts/MapContext/MapContext.ts","../src/contexts/MapContext/types.ts","../src/contexts/ServerNotificationsContext/ServerNotificationsContext.ts","../src/hooks/map/useMapContext.ts","../src/hooks/map/useMapDraw/index.ts","../src/hooks/map/useMapDraw/customStyles.ts","../src/utils/date.ts","../src/utils/debounce.ts","../src/components/Layer/Layer.tsx","../src/components/Map/Map.tsx","../src/contexts/MapContext/MapProvider.tsx","../src/contexts/ServerNotificationsContext/ServerNotificationsProvider.tsx","../src/contexts/ServerNotificationsContext/hooks/useServerNotifications.ts","../src/utils/isNumeric.ts","../src/utils/isObject.ts","../src/core/classification/parseClientStyle.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/map/useRedrawLayer.ts","../src/hooks/serverNotifications/useServerNotificationsContext.ts","../src/hooks/useToggle.ts","../src/hooks/useWindowResize.ts","../src/hooks/map/useZoomToFeatures.ts","../src/hooks/map/useZoomToPoint.ts"],"sourcesContent":["import React, { Component } from \"react\";\n\nimport { ErrorBoundaryProps, ErrorBoundaryState } from \"./types\";\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n public state = { hasError: false };\n\n public static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n public componentDidCatch(error: Error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n\n public render() {\n const { children, errorContents } = this.props;\n const { hasError } = this.state;\n\n return !hasError ? (\n <>{children}</>\n ) : (\n <>{errorContents}</>\n );\n }\n}\n","import { CirclePaint, FillPaint, FillExtrusionPaint, LinePaint } from \"mapbox-gl\";\n\nconst DEFAULT_COLOR = \"#00ffff\";\nconst DEFAULT_OPACITY = 0.5;\nconst DEFAULT_SIZE = 4;\nconst DEFAULT_LINE_WIDTH = 1;\n\nexport const DEFAULT_CIRCLE_PAINT = {\n \"circle-radius\": DEFAULT_SIZE,\n \"circle-color\": DEFAULT_COLOR,\n \"circle-opacity\": DEFAULT_OPACITY,\n \"circle-stroke-width\": 0,\n \"circle-stroke-color\": DEFAULT_COLOR,\n \"circle-stroke-opacity\": DEFAULT_OPACITY,\n} as CirclePaint;\n\nexport const DEFAULT_FILL_PAINT = {\n \"fill-color\": DEFAULT_COLOR,\n \"fill-opacity\": DEFAULT_OPACITY,\n} as FillPaint;\n\nexport const DEFAULT_FILL_EXTRUSION_PAINT = {\n \"fill-extrusion-base\": 0,\n \"fill-extrusion-vertical-gradient\": true,\n \"fill-extrusion-color\": DEFAULT_COLOR,\n \"fill-extrusion-opacity\": DEFAULT_OPACITY,\n \"fill-extrusion-height\": 0,\n} as FillExtrusionPaint;\n\nexport const DEFAULT_LINE_PAINT = {\n \"line-color\": DEFAULT_COLOR,\n \"line-width\": DEFAULT_LINE_WIDTH,\n \"line-opacity\": DEFAULT_OPACITY,\n} as LinePaint;\n","import React, { FC } from \"react\";\nimport { Source, Layer as MapboxLayer } from \"react-map-gl/mapbox\";\n\nimport { LayerProps } from \"./types\";\n\nexport const RasterLayer: FC<Omit<LayerProps, \"layerType\" | \"onMount\">> = ({\n layer,\n tileUrl,\n visible,\n beforeId,\n}) => {\n if (!layer) {\n return null;\n }\n\n return (\n <Source id={layer.name} type=\"raster\" tiles={[tileUrl]}>\n <MapboxLayer\n id={layer.name}\n type=\"raster\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{ visibility: visible ? \"visible\" : \"none\" }}\n />\n </Source>\n );\n};\n","import { ExpressionSpecification } from \"mapbox-gl\";\n\nexport const findAttributeInExpression = (expression: ExpressionSpecification): string[] => {\n if (Array.isArray(expression) && expression.length === 2 && expression[0] === \"get\") {\n return [expression[1]];\n }\n\n return expression.reduce((acc: string[], curr) => {\n if (!Array.isArray(curr)) {\n return acc;\n }\n\n if (curr[0] === \"get\") {\n return [...new Set([...acc, curr[1]])];\n }\n\n return [...new Set([...acc, ...findAttributeInExpression(curr as ExpressionSpecification)])];\n }, []);\n};\n","import { AnyPaint } from \"mapbox-gl\";\n\nexport const getActualExtrusionHeight = (paint: AnyPaint) => {\n return Array.isArray(paint?.[\"fill-extrusion-height\"]) && paint?.[\"fill-extrusion-height\"][0] === \"+\"\n ? paint?.[\"fill-extrusion-height\"][1]\n : paint?.[\"fill-extrusion-height\"];\n};\n","import { FeatureDc, GeometryType, PositionDc } from \"@evergis/api\";\nimport { multiLineString, multiPoint, point, polygon } from \"@turf/turf\";\nimport { Feature } from \"geojson\";\n\nexport const convertSpToTurfFeature = (geometry?: FeatureDc[\"geometry\"]): Feature<any> | undefined => {\n if (!geometry) {\n return;\n }\n\n switch (geometry.type) {\n case GeometryType.Point:\n return point(geometry.coordinates as PositionDc);\n case GeometryType.Multipoint:\n return multiPoint(geometry.coordinates as PositionDc[]);\n case GeometryType.Polyline:\n return multiLineString(geometry.coordinates as PositionDc[][]);\n case GeometryType.Polygon:\n case GeometryType.Envelope:\n return polygon(geometry.coordinates as PositionDc[][]);\n default:\n }\n};\n","import React, { FC, useCallback } from \"react\";\nimport { Layer as MapboxLayer, Source } from \"react-map-gl/mapbox\";\nimport { FeatureLayerServiceInfoDc, GeometryType, QueryLayerServiceConfigurationDc } from \"@evergis/api\";\nimport { AnyPaint, CirclePaint, FillExtrusionPaint, FillPaint, LinePaint } from \"mapbox-gl\";\n\nimport {\n DEFAULT_CIRCLE_PAINT,\n DEFAULT_FILL_EXTRUSION_PAINT,\n DEFAULT_FILL_PAINT,\n DEFAULT_LINE_PAINT,\n} from \"./constants\";\n\nimport { getClientStyleItemPrefixSuffix } from \"./utils/getClientStyleItemPrefixSuffix\";\nimport { getActualExtrusionHeight } from \"../../core\";\n\nimport { LayerProps } from \"./types\";\nimport { ClientStyle } from \"../../types\";\n\nexport const VectorLayer: FC<Omit<LayerProps, \"layerType\" | \"onMount\">> = ({\n layer,\n tileUrl,\n visible,\n beforeId,\n getLayerTempStyle,\n}) => {\n const clientStyle = (layer?.configuration as QueryLayerServiceConfigurationDc)?.clientStyle as ClientStyle;\n const { idAttribute, geometryType } = (layer as FeatureLayerServiceInfoDc).layerDefinition || {};\n\n const renderLayerByGeometryType = useCallback(() => {\n const visibility = visible ? \"visible\" : \"none\";\n\n switch (geometryType) {\n case GeometryType.Point:\n return (\n <MapboxLayer\n id={layer.name}\n type=\"circle\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"circle\")?.layout,\n visibility,\n }}\n paint={{\n ...DEFAULT_CIRCLE_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"circle\")?.paint as CirclePaint),\n }}\n />\n );\n case GeometryType.Polygon:\n return [\n <MapboxLayer\n key={`polygon-layer-${layer.name}`}\n id={layer.name}\n type=\"fill\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"fill\")?.layout,\n visibility:\n visible &&\n getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.settings?.fill?.showBottomSurface !== false &&\n Boolean(\n getActualExtrusionHeight({\n ...DEFAULT_FILL_EXTRUSION_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint as FillExtrusionPaint),\n }),\n )\n ? \"visible\"\n : \"none\",\n }}\n paint={{\n ...DEFAULT_FILL_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill\")?.paint as FillPaint),\n }}\n />,\n <MapboxLayer\n key={`polygon-stroke-layer-${layer.name}`}\n id={`${layer.name}-stroke`}\n type=\"line\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"line\")?.layout,\n visibility:\n visible &&\n getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.settings?.fill?.showBottomSurface !== false &&\n Boolean(\n getActualExtrusionHeight({\n ...DEFAULT_FILL_EXTRUSION_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint as FillExtrusionPaint),\n }),\n )\n ? \"visible\"\n : \"none\",\n }}\n paint={{\n ...DEFAULT_LINE_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"line\")?.paint as LinePaint),\n }}\n />,\n <MapboxLayer\n key={`polygon-extrusion-layer-${layer.name}`}\n id={`${layer.name}-extrusion`}\n type=\"fill-extrusion\"\n source-layer=\"default\"\n beforeId={beforeId}\n minzoom={0}\n maxzoom={23}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.layout,\n visibility,\n }}\n paint={{\n ...DEFAULT_FILL_EXTRUSION_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint as FillExtrusionPaint),\n }}\n />,\n ];\n case GeometryType.Polyline:\n return (\n <MapboxLayer\n id={layer.name}\n type=\"line\"\n source-layer=\"default\"\n beforeId={beforeId}\n layout={{\n ...getLayerTempStyle?.(layer.name, \"line\")?.layout,\n visibility,\n }}\n paint={{\n ...DEFAULT_LINE_PAINT,\n ...(getLayerTempStyle?.(layer.name, \"line\")?.paint as LinePaint),\n }}\n />\n );\n default:\n return null;\n }\n }, [\n geometryType,\n layer,\n beforeId,\n visible,\n getLayerTempStyle?.(layer.name, \"circle\"),\n getLayerTempStyle?.(layer.name, \"fill\"),\n getLayerTempStyle?.(layer.name, \"fill-extrusion\"),\n getLayerTempStyle?.(layer.name, \"line\"),\n ]);\n\n const renderClientStyle = useCallback(() => {\n return clientStyle.items.map(mockItem => {\n const prefixSuffix = getClientStyleItemPrefixSuffix(geometryType, mockItem.type);\n const isExtrusionItem = mockItem.type === \"fill-extrusion\";\n const isPolygonPart =\n clientStyle.items.some(item => item.type === \"fill-extrusion\") &&\n (mockItem.type === \"fill\" || mockItem.type === \"line\");\n const fillExtrusionPaint =\n isPolygonPart || isExtrusionItem\n ? {\n ...clientStyle.items?.find(item => item.type === \"fill-extrusion\")?.paint,\n ...getLayerTempStyle?.(layer.name, \"fill-extrusion\")?.paint,\n }\n : undefined;\n const currentSettings = {\n ...clientStyle?.settings,\n ...getLayerTempStyle?.(layer.name, mockItem.type)?.settings,\n };\n const processedExtrusionHeight = getActualExtrusionHeight(fillExtrusionPaint);\n const hasExtrusion = Boolean(processedExtrusionHeight);\n const visibility =\n visible &&\n ((isExtrusionItem && hasExtrusion) ||\n (!isPolygonPart && !isExtrusionItem) ||\n (isPolygonPart && (!hasExtrusion || (currentSettings?.fill?.showBottomSurface ?? true))))\n ? \"visible\"\n : \"none\";\n\n return (\n <MapboxLayer\n key={`${prefixSuffix[0]}${layer.name}`}\n id={`${layer.name}${prefixSuffix[1]}`}\n type={mockItem.type}\n source-layer=\"default\"\n beforeId={beforeId}\n minzoom={clientStyle?.minzoom ?? 0}\n maxzoom={clientStyle?.maxzoom ?? 23}\n layout={{\n ...mockItem.layout,\n ...getLayerTempStyle?.(layer.name, mockItem.type)?.layout,\n visibility,\n }}\n paint={\n {\n ...mockItem.paint,\n ...getLayerTempStyle?.(layer.name, mockItem.type)?.paint,\n } as AnyPaint\n }\n />\n );\n });\n }, [\n beforeId,\n clientStyle,\n geometryType,\n layer.name,\n visible,\n getLayerTempStyle?.(layer.name, \"circle\"),\n getLayerTempStyle?.(layer.name, \"fill\"),\n getLayerTempStyle?.(layer.name, \"fill-extrusion\"),\n getLayerTempStyle?.(layer.name, \"line\"),\n ]);\n\n if (!layer) {\n return null;\n }\n\n return (\n <Source\n promoteId={idAttribute}\n id={layer.name}\n type=\"vector\"\n tiles={[tileUrl]}\n >\n {clientStyle?.items ? renderClientStyle() : renderLayerByGeometryType()}\n </Source>\n );\n};\n","import { GeometryType } from \"@evergis/api\";\n\nimport { ClientStyleItem } from \"../../../types\";\n\nexport const getClientStyleItemPrefixSuffix = (\n geometryType: GeometryType,\n type: ClientStyleItem[\"type\"],\n): [string, string] => {\n switch (geometryType) {\n case GeometryType.Point:\n return [\"point-layer-\", \"\"];\n case GeometryType.Polyline:\n return [\"polyline-layer-\", \"\"];\n case GeometryType.Polygon:\n switch (type) {\n case \"line\":\n return [\"polygon-stroke-layer-\", \"-stroke\"];\n case \"fill-extrusion\":\n return [\"polygon-extrusion-layer-\", \"-extrusion\"];\n default:\n return [\"polygon-layer-\", \"\"];\n }\n default:\n return [\"\", \"\"];\n }\n};\n","import { CSSProperties } from \"react\";\nimport styled from \"styled-components\";\n\nexport const MapWrapper = styled.div<{ $zIndex?: CSSProperties[\"zIndex\"] }>`\n position: relative;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n z-index: ${({ $zIndex }) => $zIndex ?? 1};\n\n .mapbox-gl-draw_trash {\n display: none;\n }\n\n .mapboxgl-ctrl-logo {\n display: none;\n }\n\n .mapboxgl-ctrl.mapboxgl-ctrl-attrib {\n display: none;\n }\n\n .mapboxgl-ctrl-geocoder.mapboxgl-ctrl {\n width: 350px;\n }\n`;\n","import MapboxDraw, { DrawCustomMode } from \"@mapbox/mapbox-gl-draw\";\n\ninterface ExtendedMapboxDrawModes extends MapboxDraw.Modes {\n [key: string]: DrawCustomMode;\n static: DrawCustomMode;\n}\n\nexport const customModes = MapboxDraw.modes as ExtendedMapboxDrawModes;\n\nconst StaticMode = {} as DrawCustomMode;\n\nStaticMode.onSetup = function () {\n this.setActionableState(undefined);\n\n return {};\n};\n\nStaticMode.toDisplayFeatures = function (state, geojson, display) {\n display(geojson);\n};\n\ncustomModes.static = StaticMode;\n","import { createContext } from \"react\";\n\nimport { MapContextProps } from \"./types\";\n\nexport const MapContext = createContext<MapContextProps>({});\n","import { Dispatch, MutableRefObject, PropsWithChildren, SetStateAction } from \"react\";\nimport { Map as MapboxGLMap } from \"mapbox-gl\";\nimport MapboxDraw from \"@mapbox/mapbox-gl-draw\";\n\nexport enum BaseMapTheme {\n Light = \"light\",\n Dark = \"dark\",\n}\n\nexport interface BaseMapItem {\n name: string;\n source: string;\n preview?: string;\n imgSrc?: string;\n title: string;\n theme?: BaseMapTheme;\n opacity?: number;\n color?: string;\n}\n\nexport interface MapContextProps {\n map?: MutableRefObject<MapboxGLMap>;\n draw?: MutableRefObject<Omit<MapboxDraw, \"getDefaultPosition\">>;\n loaded?: boolean;\n setLoaded?: Dispatch<SetStateAction<boolean>>;\n basemapItems?: BaseMapItem[];\n basemapName?: string;\n setBasemapName?: Dispatch<SetStateAction<string>>;\n defaultBasemap?: string;\n}\n\nexport interface MapProviderProps extends PropsWithChildren {\n basemapItems: BaseMapItem[];\n defaultBasemap: string;\n}\n","import { createContext } from \"react\";\n\nimport { ServerNotificationsContextProps } from \"./types\";\n\nexport const ServerNotificationsContext = createContext<ServerNotificationsContextProps>({});\n","import { useContext } from \"react\";\n\nimport { MapContext } from \"../../contexts\";\n\nexport const useMapContext = () => {\n return useContext(MapContext);\n};\n","import { useEffect } from \"react\";\nimport MapboxDraw from \"@mapbox/mapbox-gl-draw\";\n\nimport { customModes } from \"./customModes\";\nimport { customStyles } from \"./customStyles\";\n\nimport { useMapContext } from \"../useMapContext\";\n\nconst draw = new MapboxDraw({\n displayControlsDefault: false,\n styles: customStyles,\n modes: customModes,\n defaultMode: \"draw_point\",\n controls: {\n trash: true,\n },\n});\n\nexport const useMapDraw = (triggerDeps: Array<unknown> = []) => {\n const { map, draw: drawContext, loaded, basemapName } = useMapContext();\n\n useEffect(() => {\n if (!loaded || !map.current) {\n return;\n }\n\n drawContext.current = draw;\n map.current.addControl(drawContext.current);\n }, [loaded]); // eslint-disable-line\n\n useEffect(() => {\n if (map.current && map.current.hasControl(drawContext.current)) {\n map.current.removeControl(drawContext.current);\n map.current.addControl(drawContext.current);\n }\n }, [basemapName, ...triggerDeps]); // eslint-disable-line\n};\n","export const customStyles = [\n {\n id: \"gl-draw-point\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"]],\n paint: {\n \"circle-radius\": 5,\n \"circle-color\": \"#D20C0C\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 3,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"highlight-inactive-points\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"meta\", \"feature\"], [\"==\", \"active\", \"false\"]],\n paint: {\n \"circle-radius\": 5,\n \"circle-color\": \"#D20C0C\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 3,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"highlight-active-points\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"meta\", \"feature\"], [\"==\", \"active\", \"true\"]],\n paint: {\n \"circle-radius\": 3,\n \"circle-color\": \"#fbb03b\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 1,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"gl-draw-polygon-fill-static\",\n type: \"fill\",\n filter: [\"all\", [\"==\", \"$type\", \"Polygon\"]],\n paint: {\n \"fill-color\": \"#D20C0C\",\n \"fill-outline-color\": \"#D20C0C\",\n \"fill-opacity\": 0.1,\n },\n },\n {\n id: \"gl-draw-line\",\n type: \"line\",\n filter: [\"all\", [\"==\", \"$type\", \"LineString\"]],\n layout: {\n \"line-cap\": \"round\",\n \"line-join\": \"round\",\n },\n paint: {\n \"line-color\": \"#D20C0C\",\n \"line-dasharray\": [0.2, 2],\n \"line-width\": 2,\n },\n },\n {\n id: \"gl-draw-polygon-fill\",\n type: \"fill\",\n filter: [\"all\", [\"==\", \"$type\", \"Polygon\"]],\n paint: {\n \"fill-color\": \"#D20C0C\",\n \"fill-outline-color\": \"#D20C0C\",\n \"fill-opacity\": 0.1,\n },\n },\n {\n id: \"gl-draw-polygon-midpoint\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"$type\", \"Point\"], [\"==\", \"meta\", \"midpoint\"]],\n paint: {\n \"circle-radius\": 3,\n \"circle-color\": \"#fbb03b\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 1,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n {\n id: \"gl-draw-polygon-stroke-active\",\n type: \"line\",\n filter: [\"all\", [\"==\", \"$type\", \"Polygon\"]],\n layout: {\n \"line-cap\": \"round\",\n \"line-join\": \"round\",\n },\n paint: {\n \"line-color\": \"#D20C0C\",\n \"line-dasharray\": [0.2, 2],\n \"line-width\": 2,\n },\n },\n {\n id: \"gl-draw-polygon-and-line-vertex-active\",\n type: \"circle\",\n filter: [\"all\", [\"==\", \"meta\", \"vertex\"], [\"==\", \"$type\", \"Point\"]],\n paint: {\n \"circle-radius\": 3,\n \"circle-color\": \"#D20C0C\",\n \"circle-stroke-color\": \"#FFFFFF\",\n \"circle-stroke-width\": 3,\n \"circle-stroke-opacity\": 0.3,\n },\n },\n];\n","import { parseJSON, parseISO, isValid, format, toDate } from \"date-fns\";\n\nexport const NO_CONTENT_VALUE = \"—\";\n\nexport type DateType = number | Date;\nexport type RawDateType = string | DateType;\n\nexport enum DateFormat {\n ClientDefaultFormat = \"dd.MM.yyyy HH:mm\",\n DateTime = \"dd.MM.yyyy HH:mm:ss\",\n UTC = \"yyyy-MM-dd'T'HH:mm:ss.sssxxx\",\n AxisTooltip = \"d MMMM yyyy\",\n}\n\ninterface FormatDateOptions {\n dateFormat?: DateFormat;\n defaultValue?: RawDateType;\n}\n\nconst stringDateParsers: ((date: string) => DateType)[] = [parseJSON, parseISO, rawDate => new Date(rawDate)];\n\nexport const getDate = (rawDate?: RawDateType | null): Date | null => {\n if (!rawDate) return null;\n\n if (typeof rawDate === \"string\") {\n for (const parser of stringDateParsers) {\n const date = parser(rawDate);\n\n if (isValid(date)) {\n return toDate(date);\n }\n }\n\n return null;\n }\n\n const parsedDate = toDate(rawDate);\n\n return isValid(parsedDate) ? parsedDate : null;\n};\n\nexport const formatDate = (\n date?: RawDateType,\n { dateFormat = DateFormat.ClientDefaultFormat, defaultValue = NO_CONTENT_VALUE }: FormatDateOptions = {},\n): string => {\n const dateValue = date ? getDate(date) : null;\n\n if (isValid(dateValue)) {\n return format(dateValue as Date, dateFormat);\n }\n\n return defaultValue.toString();\n};\n","export const debounce = (callback: any, delay: number): ((...args) => void) => {\n let timeId: number;\n\n return (...args) => {\n if (timeId) {\n window.clearTimeout(timeId);\n }\n\n timeId = window.setTimeout(() => {\n callback(...args);\n }, delay);\n };\n};\n","import React, { FC, useEffect } from \"react\";\n\nimport { RasterLayer } from \"./RasterLayer\";\nimport { VectorLayer } from \"./VectorLayer\";\n\nimport { LayerProps } from \"./types\";\n\nexport const Layer: FC<LayerProps> = ({\n layer,\n layerType,\n visible,\n beforeId,\n tileUrl,\n onMount = () => null,\n}) => {\n useEffect(onMount, []); // eslint-disable-line\n\n if (!layer) {\n return null;\n }\n\n if (layerType === \"RasterTileLayer\") {\n return (\n <RasterLayer\n layer={layer}\n tileUrl={tileUrl}\n visible={visible}\n beforeId={beforeId}\n />\n );\n }\n\n return (\n <VectorLayer\n layer={layer}\n tileUrl={tileUrl}\n visible={visible}\n beforeId={beforeId}\n />\n );\n};\n","import React, { FC } from \"react\";\nimport { default as MapGL } from \"react-map-gl/mapbox\";\nimport { Map as MapboxGLMap } from \"mapbox-gl\";\nimport \"@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css\";\n\nimport { MapWrapper } from \"./styled\";\n\nimport { useMapContext } from \"../../hooks\";\n\nimport { MapProps } from \"./types\";\n\nimport \"mapbox-gl/dist/mapbox-gl.css\";\n\nexport const Map: FC<MapProps> = ({\n zIndex,\n lowerSiblings,\n upperSiblings,\n onError,\n children,\n ...rest\n}) => {\n const { map, setLoaded } = useMapContext();\n\n return (\n <MapWrapper $zIndex={zIndex}>\n {lowerSiblings}\n <MapGL\n {...rest}\n renderWorldCopies\n antialias\n doubleClickZoom={false}\n cursor=\"default\"\n onLoad={e => {\n map.current = e.target as MapboxGLMap;\n\n map.current.on(\"error\", onError);\n\n setLoaded(true);\n }}\n >\n {children}\n </MapGL>\n {upperSiblings}\n </MapWrapper>\n );\n};\n","import React, { FC, useRef, useState } from \"react\";\nimport { Map as MapboxGLMap } from \"mapbox-gl\";\nimport MapboxDraw from \"@mapbox/mapbox-gl-draw\";\n\nimport { MapContext } from \"./MapContext\";\n\nimport { MapProviderProps } from \"./types\";\n\nexport const MapProvider: FC<MapProviderProps> = ({ basemapItems, defaultBasemap, children }) => {\n const map = useRef<MapboxGLMap | undefined>();\n const draw = useRef<MapboxDraw | undefined>();\n const [loaded, setLoaded] = useState<boolean>(false);\n const [basemapName, setBasemapName] = useState(defaultBasemap);\n\n return (\n <MapContext.Provider\n value={{\n map,\n draw,\n loaded,\n setLoaded,\n basemapItems,\n basemapName,\n setBasemapName,\n defaultBasemap,\n }}\n >\n {children}\n </MapContext.Provider>\n );\n};\n","import React, { FC, useCallback } from \"react\";\n\nimport { ServerNotificationsContext } from \"./ServerNotificationsContext\";\n\nimport { useServerNotifications } from \"./hooks/useServerNotifications\";\n\nimport { ServerNotificationsProviderProps } from \"./types\";\n\nexport const ServerNotificationsProvider: FC<ServerNotificationsProviderProps> = ({ url, initialized, children }) => {\n const connection = useServerNotifications(url, initialized);\n\n const addSubscription = useCallback(\n async (payload?: any): Promise<string | null> => {\n if (!connection || connection.state !== \"Connected\" || !payload) {\n return;\n }\n\n try {\n const id = await connection.invoke(\"AddSubscription\", payload);\n\n console.info(\"Подписка добавлена, id:\", id);\n\n return id;\n } catch (err) {\n console.info(\"Ошибка добавления подписки:\", err);\n\n return Promise.resolve(null);\n }\n },\n [connection],\n );\n\n const updateSubscription = useCallback(\n async (id: string | null, payload?: any): Promise<void> => {\n if (!connection || connection.state !== \"Connected\" || !id || !payload) {\n return;\n }\n\n try {\n await connection.invoke(\"UpdateSubscription\", id, payload);\n } catch (err) {\n console.info(`Ошибка обновления подписки ${id}:`, err);\n }\n },\n [connection],\n );\n\n const unsubscribeById = useCallback(\n async (id: string | null): Promise<void> => {\n if (!connection || connection.state !== \"Connected\" || !id) {\n return;\n }\n\n try {\n await connection.invoke(\"Unsubscribe\", [id]);\n } catch (err) {\n console.info(`Ошибка отписки по ${id}:`, err);\n }\n },\n [connection],\n );\n\n return (\n <ServerNotificationsContext.Provider value={{ connection, addSubscription, updateSubscription, unsubscribeById }}>\n {children}\n </ServerNotificationsContext.Provider>\n );\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { HubConnection, HubConnectionBuilder, LogLevel } from \"@microsoft/signalr\";\n\nexport const useServerNotifications = (url: string, initialized: boolean): HubConnection | null => {\n const hubConnection = useRef<HubConnection | null>(null);\n const [connection, setConnection] = useState<HubConnection | null>(null);\n\n useEffect(() => {\n if (!initialized) {\n return;\n }\n\n hubConnection.current = new HubConnectionBuilder()\n .withUrl(url, {\n withCredentials: true,\n })\n .configureLogging(LogLevel.Information)\n .build();\n\n hubConnection.current\n .start()\n .then(() => console.info(\"Серверные нотификации подключены\"))\n .catch(err => console.info(\"Ошибка:\", err))\n .finally(() => setConnection(hubConnection.current));\n }, [initialized]); // eslint-disable-line\n\n useEffect(() => {\n if (!connection || connection.state !== \"Connected\") {\n return;\n }\n\n connection\n .invoke(\"SubscribeNotifications\", [])\n .then(() => console.info(\"Подписка `SubscribeNotifications` оформлена\"))\n .catch(err => console.info(\"Ошибка подписки `SubscribeNotifications`:\", err));\n }, [connection]);\n\n return connection;\n};\n","export const isNumeric = (number: string | number): boolean =>\n !isNaN(parseFloat(number as string)) && isFinite(number as number);\n","export function isObject<T>(value: T | object): value is object {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import { isEmpty } from \"lodash\";\nimport { ExpressionSpecification } from \"mapbox-gl\";\n\nimport { findAttributeInExpression } from \"./findAttributeInExpression\";\n\nimport { ClientStyle } from \"../../types\";\n\nexport const parseClientStyle = (style?: ClientStyle): string[] => {\n if (!style) {\n return [];\n }\n\n return style?.items?.reduce((acc: string[], curr) => {\n if (!curr.paint || isEmpty(curr.paint)) {\n return acc;\n }\n\n return Object.entries(curr.paint)?.reduce((paintAcc: string[], [, value]) => {\n if (!Array.isArray(value)) {\n return paintAcc;\n }\n\n return [...new Set([...paintAcc, ...findAttributeInExpression(value as ExpressionSpecification)])];\n }, []);\n }, []);\n};\n","import { useMemo } from \"react\";\n\nimport { debounce } from \"../utils\";\n\nexport const useDebouncedCallback = <CallbackFn extends () => void>(interval: number): ((cb: CallbackFn) => void) => {\n return useMemo(\n () =>\n debounce((cb: CallbackFn) => {\n cb();\n }, interval),\n [interval],\n );\n};\n","import { useCallback } from \"react\";\nimport { VectorSourceImpl } from \"mapbox-gl\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useRedrawLayer = () => {\n const { map } = useMapContext();\n\n return useCallback(\n (layerName: string) => {\n const layerTileSource: VectorSourceImpl = map.current.getSource(layerName);\n\n layerTileSource.setTiles(layerTileSource.tiles);\n },\n [map],\n );\n};\n","import { useContext } from \"react\";\n\nimport { ServerNotificationsContext } from \"../../contexts\";\n\nexport const useServerNotificationsContext = () => {\n return useContext(ServerNotificationsContext);\n};\n","import { useCallback, useState } from \"react\";\n\nexport const useToggle = (initial?: boolean): [boolean, VoidFunction, (value: boolean) => void] => {\n const [state, setState] = useState(initial !== undefined ? initial : false);\n\n const toggle = useCallback(() => setState(!state), [state]);\n\n return [state, toggle, setState];\n};\n","import { useEffect, useMemo } from \"react\";\n\nimport { debounce } from \"../utils\";\n\nconst DEBOUNCE_DELAY = 144;\n\nexport const useWindowResize = (callback?: (...args: any) => any, delay?: number) => {\n const debounceCallback = useMemo(() => {\n return callback ? debounce(callback, delay || DEBOUNCE_DELAY) : undefined;\n }, [callback, delay]);\n\n useEffect(() => {\n debounceCallback && window.addEventListener(\"resize\", debounceCallback);\n\n return () => debounceCallback && window.removeEventListener(\"resize\", debounceCallback);\n }, [debounceCallback]);\n};\n","import { useCallback } from \"react\";\nimport { bbox } from \"@turf/turf\";\nimport { FeatureDc } from \"@evergis/api\";\n\nimport { useMapContext } from \"./useMapContext\";\nimport { convertSpToTurfFeature } from \"../../core\";\n\nexport const useZoomToFeatures = () => {\n const { map } = useMapContext();\n\n return useCallback(\n (features?: FeatureDc[], padding?: number) => {\n if (!features) {\n return;\n }\n\n const currentFeatureCenter = bbox({\n type: \"FeatureCollection\",\n features: features.map(feature => convertSpToTurfFeature(feature.geometry)),\n });\n\n map.current.fitBounds(currentFeatureCenter as [number, number, number, number], { padding: padding ?? 150 });\n },\n [map],\n );\n};\n","import { useCallback } from \"react\";\n\nimport { useMapContext } from \"./useMapContext\";\n\nexport const useZoomToPoint = () => {\n const { map } = useMapContext();\n\n return useCallback(\n (options, callback?: VoidFunction) => {\n if (map.current) {\n if (callback) {\n map.current.once(\"moveend\", () => {\n callback();\n });\n }\n\n map.current.flyTo(options);\n } else {\n callback?.();\n }\n },\n [map],\n );\n};\n"],"names":["ErrorBoundary","hasError","Component","error","console","children","errorContents","this","props","state","React","DEFAULT_CIRCLE_PAINT","DEFAULT_FILL_PAINT","DEFAULT_FILL_EXTRUSION_PAINT","DEFAULT_LINE_PAINT","RasterLayer","layer","tileUrl","visible","beforeId","Source","id","name","type","tiles","MapboxLayer","layout","visibility","findAttributeInExpression","expression","Array","isArray","length","reduce","acc","curr","Set","getActualExtrusionHeight","paint","convertSpToTurfFeature","geometry","GeometryType","Point","point","coordinates","Multipoint","multiPoint","Polyline","multiLineString","Polygon","Envelope","polygon","VectorLayer","getLayerTempStyle","clientStyle","configuration","_layer$configuration","idAttribute","geometryType","layerDefinition","renderLayerByGeometryType","useCallback","_getLayerTempStyle","_getLayerTempStyle2","key","_getLayerTempStyle3","settings","fill","showBottomSurface","Boolean","_getLayerTempStyle5","_getLayerTempStyle6","_getLayerTempStyle7","_getLayerTempStyle9","_getLayerTempStyle10","minzoom","maxzoom","_getLayerTempStyle11","_getLayerTempStyle12","_getLayerTempStyle13","_getLayerTempStyle14","renderClientStyle","items","map","mockItem","prefixSuffix","getClientStyleItemPrefixSuffix","isExtrusionItem","isPolygonPart","some","item","fillExtrusionPaint","_clientStyle$items","find","_getLayerTempStyle15","undefined","currentSettings","_getLayerTempStyle16","processedExtrusionHeight","hasExtrusion","_currentSettings$fill2","_getLayerTempStyle17","_getLayerTempStyle18","promoteId","MapWrapper","styled","div","$zIndex","customModes","MapboxDraw","modes","static","StaticMode","setActionableState","geojson","display","MapContext","createContext","BaseMapTheme","ServerNotificationsContext","useMapContext","useContext","draw","displayControlsDefault","styles","filter","defaultMode","controls","trash","NO_CONTENT_VALUE","DateFormat","stringDateParsers","parseJSON","parseISO","rawDate","Date","getDate","parser","date","isValid","toDate","parsedDate","debounce","callback","delay","timeId","args","window","clearTimeout","setTimeout","layerType","onMount","useEffect","zIndex","lowerSiblings","upperSiblings","onError","rest","setLoaded","MapGL","renderWorldCopies","antialias","doubleClickZoom","cursor","onLoad","e","current","target","on","basemapItems","defaultBasemap","useRef","loaded","useState","basemapName","setBasemapName","Provider","value","url","initialized","connection","hubConnection","setConnection","HubConnectionBuilder","withUrl","withCredentials","configureLogging","LogLevel","Information","build","start","then","info","catch","err","finally","invoke","useServerNotifications","addSubscription","async","payload","Promise","resolve","updateSubscription","unsubscribeById","dateFormat","ClientDefaultFormat","defaultValue","dateValue","format","toString","number","isNaN","parseFloat","isFinite","style","_style$items","isEmpty","Object","entries","_Object$entries","paintAcc","interval","useMemo","cb","triggerDeps","drawContext","addControl","hasControl","removeControl","layerName","layerTileSource","getSource","setTiles","initial","setState","toggle","debounceCallback","addEventListener","removeEventListener","features","padding","currentFeatureCenter","bbox","feature","fitBounds","options","once","flyTo"],"mappings":"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"}