(true);\r\n\r\n useEffect(() => {\r\n async function loadScenario(bfsNr: number) {\r\n try {\r\n setLoading(true);\r\n\r\n const responseScenario = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/scenarios/bfsNr/${bfsNr}?status=inKraft&latestOnly=true`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (responseScenario.ok) {\r\n const scenarios: ScenarioDto[] = await responseScenario.json();\r\n\r\n if (scenarios.length === 1) {\r\n const scenario = scenarios[0];\r\n\r\n const responseParameterSet = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets/scenarioId/${scenario.id}?activeOnly=true`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (responseParameterSet.ok) {\r\n const parameterSets: ParameterSetDto[] =\r\n await responseParameterSet.json();\r\n\r\n if (parameterSets.length === 1) {\r\n dispatch({\r\n type: \"setScenarioAndParameterSetLegal\",\r\n data: {\r\n scenario: scenario,\r\n parameterSet: parameterSets[0],\r\n },\r\n });\r\n }\r\n } else {\r\n setLoadError(true);\r\n }\r\n }\r\n } else {\r\n setLoadError(true);\r\n }\r\n } catch {\r\n setLoadError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n if (state.selectedMunicipality?.bfsNr !== undefined) {\r\n loadScenario(state.selectedMunicipality.bfsNr);\r\n }\r\n\r\n return () => setLoadError(false);\r\n }, [state.selectedMunicipality?.bfsNr, dispatch]);\r\n\r\n if (loadError) {\r\n return ;\r\n }\r\n\r\n if (state.selectedMunicipality === undefined) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Gemeinde {state.selectedMunicipality?.gemeinde}\r\n {\" \"}\r\n > Rechtskräftiger Zonenplan > {LINKS[location.pathname]}\r\n \r\n {!loading && (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n","import { ReactElement } from \"react\";\r\n\r\nexport function Help(): ReactElement {\r\n return (\r\n \r\n
\r\n Zonenplan mit / ohne Vorwirkung\r\n \r\n
\r\n LUBAT bietet die Möglichkeit die Bauzonenkapazitäts-Kennzahlen der\r\n verschiedenen Zonenplanzustände (ohne Vorwirkung, mit Vorwirkung,\r\n rechtskräftiger Zonenplan) miteinander zu vergleichen. Der aktuell\r\n rechtskräftige Zonenplan befindet sich dabei bereits auf der kantonalen\r\n Dateninfrastruktur. Die Zonenpläne mit / ohne Vorwirkung sind vorgängig\r\n auf die kantonalen Dateninfrastruktur hochzuladen.\r\n
\r\n
Bitte gehen Sie wie folgt vor:
\r\n
\r\n \r\n Schritt 1: Laden Sie einen neuen\r\n Zonenplan mit / ohne Vorwirkung mittels bestehendem Prozess (GeoShop)\r\n hoch. Erfolgt der Upload vor 12:00 Uhr mittags eines Werktags, werden\r\n die Daten noch am selben Tag verarbeitet und stehen am nächsten\r\n Werktag in der LUBAT-Applikation zur Verfügung.\r\n \r\n \r\n Schritt 2: Die\r\n Bauzonenkapazitäts-Kennzahlen werden jeweils mittels standardisierter\r\n Kennwerte berechnet. Diese Kennwerte können Sie jedoch beliebig\r\n anpassen (z.B. um verschiedene Szenarien zu simulieren oder um die\r\n Kapazitäten zweier Zonenpläne miteinander zu vergleichen), speichern\r\n und zu einem späteren Zeitpunkt wiederverwenden.\r\n \r\n \r\n Schritt 3: Im Menüpunkt\r\n \"Bauzonenkapazitäten vergleichen\" können Sie dann zwei Zonenpläne\r\n auswählen und die Kapazitäten miteinander vergleichen.\r\n Selbstverständlich können Sie dort auch lediglich die Kapazitäten\r\n eines Zonenplans berechnen lassen.\r\n \r\n \r\n
\r\n );\r\n}\r\n","import { ExternalLink } from \"components/common/ExternalLink\";\r\nimport { ReactElement } from \"react\";\r\n\r\nexport function Upload(): ReactElement {\r\n return (\r\n \r\n );\r\n}\r\n","import Tippy from \"@tippyjs/react\";\r\nimport \"tippy.js/dist/tippy.css\";\r\nimport { ReactElement, ReactNode } from \"react\";\r\n\r\nexport function CompareMetric(props: {\r\n name: string;\r\n description: string;\r\n valueLeft?: number | undefined;\r\n valueRight?: number | undefined;\r\n unit?: string | null;\r\n format: boolean;\r\n children?: ReactNode;\r\n}): ReactElement {\r\n return (\r\n <>\r\n \r\n \r\n \r\n {props.name}{\" \"}\r\n {props.unit !== undefined && props.unit !== null\r\n ? `[${props.unit}]`\r\n : \"\"}\r\n \r\n \r\n
\r\n \r\n {props.valueLeft !== undefined\r\n ? props.format\r\n ? props.valueLeft.toLocaleString(\"de-CH\", {\r\n maximumFractionDigits: 2,\r\n })\r\n : props.valueLeft\r\n : \"\"}\r\n
\r\n \r\n {props.valueRight !== undefined\r\n ? props.format\r\n ? props.valueRight.toLocaleString(\"de-CH\", {\r\n maximumFractionDigits: 2,\r\n })\r\n : props.valueRight\r\n : \"\"}\r\n
\r\n \r\n {props.valueLeft !== undefined && props.valueRight !== undefined\r\n ? props.format\r\n ? (props.valueRight - props.valueLeft).toLocaleString(\"de-CH\", {\r\n maximumFractionDigits: 2,\r\n })\r\n : props.valueRight - props.valueLeft\r\n : \"\"}\r\n
\r\n {props.children}\r\n >\r\n );\r\n}\r\n","import { ReactElement, ReactNode } from \"react\";\r\n\r\nexport function CompareSubMetric(props: {\r\n name: string;\r\n valueLeft: number | undefined;\r\n valueRight: number | undefined;\r\n children?: ReactNode;\r\n}): ReactElement {\r\n return (\r\n <>\r\n {props.name}
\r\n \r\n {props.valueLeft !== undefined\r\n ? props.valueLeft.toLocaleString(\"de-CH\", {\r\n maximumFractionDigits: 2,\r\n })\r\n : \"\"}\r\n
\r\n \r\n {props.valueRight !== undefined\r\n ? props.valueRight.toLocaleString(\"de-CH\", {\r\n maximumFractionDigits: 2,\r\n })\r\n : \"\"}\r\n
\r\n \r\n {props.valueLeft !== undefined && props.valueRight !== undefined\r\n ? (props.valueRight - props.valueLeft).toLocaleString(\"de-CH\", {\r\n maximumFractionDigits: 2,\r\n })\r\n : \"\"}\r\n
\r\n >\r\n );\r\n}\r\n","import { MetricValueContext, METRIC_KEY } from \"calculation/metric\";\r\nimport { CompareMetric } from \"components/zoning-plan-draft/CompareMetric\";\r\nimport { CompareSubMetric } from \"components/zoning-plan-draft/CompareSubMetric\";\r\nimport { CalculationTable as CalculationTableSimple } from \"components/zoning-plan-common/CalculationTable\";\r\nimport { ReactElement } from \"react\";\r\nimport { State } from \"state/state\";\r\n\r\nexport function CalculationTable(props: { state: State }): ReactElement {\r\n const state = props.state;\r\n if (state.selectedMunicipality !== undefined) {\r\n return (\r\n <>\r\n {state.metrics !== undefined &&\r\n state.zoningPlanDraft.selectedScenarioLeft !== undefined &&\r\n state.zoningPlanDraft.selectedScenarioRight !== undefined &&\r\n state.zoningPlanDraft.calculationStateLeft !== undefined &&\r\n state.zoningPlanDraft.calculationStateRight !== undefined && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {state.zoningPlanDraft.selectedScenarioLeft.districts.map(\r\n (d) => (\r\n \r\n )\r\n )}\r\n \r\n \r\n {state.zoningPlanDraft.selectedScenarioLeft.districts.map(\r\n (d) => (\r\n \r\n )\r\n )}\r\n \r\n \r\n {state.zoningPlanDraft.selectedScenarioLeft.districts.map(\r\n (d) => (\r\n \r\n )\r\n )}\r\n \r\n \r\n >\r\n )}\r\n {state.metrics !== undefined &&\r\n state.zoningPlanDraft.selectedScenarioLeft !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetLeft !== undefined &&\r\n state.zoningPlanDraft.calculationStateLeft !== undefined &&\r\n (state.zoningPlanDraft.selectedScenarioRight === undefined ||\r\n state.zoningPlanDraft.selectedParameterSetRight === undefined) && (\r\n \r\n )}\r\n >\r\n );\r\n }\r\n return <>>;\r\n}\r\n","import { Overlay } from \"components/common/Overlay\";\r\nimport { Select } from \"components/common/Select\";\r\nimport { ParameterSetDto, ParameterSetNameDto, ScenarioDto } from \"dtos/dtos\";\r\nimport { useEffect } from \"react\";\r\nimport { ReactElement, useState } from \"react\";\r\nimport { Action, State } from \"../../state/state\";\r\n\r\nexport function CalculationHead(props: {\r\n dispatch: (action: Action) => void;\r\n state: State;\r\n}): ReactElement {\r\n const dispatch = props.dispatch;\r\n const state = props.state;\r\n const scenarioNames = state.zoningPlanDraft.scenarioNames;\r\n const parameterSetNamesLeft = state.zoningPlanDraft.parameterSetNamesLeft;\r\n const parameterSetNamesRight = state.zoningPlanDraft.parameterSetNamesRight;\r\n const selectedScenarioLeft = state.zoningPlanDraft.selectedScenarioLeft;\r\n const selectedScenarioRight = state.zoningPlanDraft.selectedScenarioRight;\r\n const selectedParameterSetLeft =\r\n state.zoningPlanDraft.selectedParameterSetLeft;\r\n const selectedParameterSetRight =\r\n state.zoningPlanDraft.selectedParameterSetRight;\r\n\r\n const [loading, setLoading] = useState(false);\r\n const [loadScenarioIdLeft, setLoadScenarioIdLeft] = useState();\r\n const [loadParameterSetIdLeft, setLoadParameterSetIdLeft] =\r\n useState();\r\n const [loadScenarioIdRight, setLoadScenarioIdRight] = useState();\r\n const [loadParameterSetIdRight, setLoadParameterSetIdRight] =\r\n useState();\r\n\r\n async function loadScenario(\r\n id: string\r\n ): Promise<\r\n | { scenario: ScenarioDto; parameterSetNames: ParameterSetNameDto[] }\r\n | undefined\r\n > {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/scenarios/id/${id}`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n if (response.ok) {\r\n const scenario: ScenarioDto = await response.json();\r\n\r\n const parameterSetNamesResponse = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersetnames/${scenario.id}`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (parameterSetNamesResponse.ok) {\r\n const parameterSetNames: ParameterSetNameDto[] =\r\n await parameterSetNamesResponse.json();\r\n return { scenario: scenario, parameterSetNames: parameterSetNames };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n return undefined;\r\n } catch {}\r\n }\r\n\r\n async function loadParameterSet(\r\n id: string\r\n ): Promise {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets/id/${id}`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n if (response.ok) {\r\n const parameterSet: ParameterSetDto = await response.json();\r\n return parameterSet;\r\n }\r\n return undefined;\r\n } catch {}\r\n }\r\n\r\n useEffect(() => {\r\n async function load(scenarioId: string): Promise {\r\n setLoading(true);\r\n const result = await loadScenario(scenarioId);\r\n dispatch({\r\n type: \"setSelectedScenarioLeft\",\r\n data: {\r\n scenario: result?.scenario,\r\n parameterSetNames: result?.parameterSetNames,\r\n },\r\n });\r\n setLoading(false);\r\n }\r\n\r\n if (loadScenarioIdLeft !== undefined) {\r\n load(loadScenarioIdLeft);\r\n }\r\n }, [loadScenarioIdLeft, dispatch]);\r\n\r\n useEffect(() => {\r\n async function load(scenarioId: string): Promise {\r\n setLoading(true);\r\n const result = await loadScenario(scenarioId);\r\n dispatch({\r\n type: \"setSelectedScenarioRight\",\r\n data: {\r\n scenario: result?.scenario,\r\n parameterSetNames: result?.parameterSetNames,\r\n },\r\n });\r\n setLoading(false);\r\n }\r\n\r\n if (loadScenarioIdRight !== undefined && loadScenarioIdRight !== \"\") {\r\n load(loadScenarioIdRight);\r\n } else if (loadScenarioIdRight === \"\") {\r\n dispatch({\r\n type: \"setSelectedScenarioRight\",\r\n data: {\r\n scenario: undefined,\r\n },\r\n });\r\n }\r\n }, [loadScenarioIdRight, dispatch]);\r\n\r\n useEffect(() => {\r\n async function load(parameterSetId: string) {\r\n const parameterSet = await loadParameterSet(parameterSetId);\r\n dispatch({\r\n type: \"setSelectedParameterSetLeft\",\r\n data: { parameterSet: parameterSet },\r\n });\r\n setLoadParameterSetIdLeft(undefined);\r\n }\r\n\r\n if (loadParameterSetIdLeft !== undefined) {\r\n load(loadParameterSetIdLeft);\r\n }\r\n }, [loadParameterSetIdLeft, dispatch]);\r\n\r\n useEffect(() => {\r\n async function load(parameterSetId: string) {\r\n const parameterSet = await loadParameterSet(parameterSetId);\r\n dispatch({\r\n type: \"setSelectedParameterSetRight\",\r\n data: { parameterSet: parameterSet },\r\n });\r\n setLoadParameterSetIdRight(undefined);\r\n }\r\n\r\n if (loadParameterSetIdRight !== undefined) {\r\n load(loadParameterSetIdRight);\r\n }\r\n }, [loadParameterSetIdRight, dispatch]);\r\n\r\n useEffect(() => {\r\n if (\r\n selectedScenarioLeft === undefined &&\r\n scenarioNames !== undefined &&\r\n scenarioNames.length === 1\r\n ) {\r\n setLoadScenarioIdLeft(scenarioNames[0].id.toString());\r\n }\r\n }, [selectedScenarioLeft, scenarioNames]);\r\n\r\n useEffect(() => {\r\n if (\r\n selectedParameterSetLeft === undefined &&\r\n parameterSetNamesLeft !== undefined &&\r\n parameterSetNamesLeft.length === 1\r\n ) {\r\n setLoadParameterSetIdLeft(parameterSetNamesLeft[0].id.toString());\r\n }\r\n }, [selectedParameterSetLeft, parameterSetNamesLeft]);\r\n\r\n useEffect(() => {\r\n if (\r\n selectedParameterSetRight === undefined &&\r\n parameterSetNamesRight !== undefined &&\r\n parameterSetNamesRight.length === 1\r\n ) {\r\n setLoadParameterSetIdRight(parameterSetNamesRight[0].id.toString());\r\n }\r\n }, [selectedParameterSetRight, parameterSetNamesRight]);\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
Zonenplan Basis
\r\n
{\r\n return {\r\n value: s.id.toString(),\r\n displayValue: `${s.name} ${s.status}`,\r\n };\r\n })}\r\n value={selectedScenarioLeft?.id.toString()}\r\n width=\"w-auto\"\r\n visible={true}\r\n onChange={(value) => setLoadScenarioIdLeft(value)}\r\n />\r\n {\r\n return { value: ps.id.toString(), displayValue: ps.name };\r\n })}\r\n value={selectedParameterSetLeft?.id.toString()}\r\n width=\"w-auto\"\r\n visible={true}\r\n onChange={(value) => setLoadParameterSetIdLeft(value)}\r\n />\r\n \r\n \r\n
Zonenplan Vergleich
\r\n
{\r\n return {\r\n value: s.id.toString(),\r\n displayValue: `${s.name} ${s.status}`,\r\n };\r\n })}\r\n value={selectedScenarioRight?.id.toString()}\r\n width=\"w-auto\"\r\n visible={true}\r\n onChange={(value) => setLoadScenarioIdRight(value)}\r\n />\r\n {\r\n return { value: ps.id.toString(), displayValue: ps.name };\r\n })}\r\n value={selectedParameterSetRight?.id.toString()}\r\n width=\"w-auto\"\r\n visible={true}\r\n onChange={(value) => setLoadParameterSetIdRight(value)}\r\n />\r\n \r\n Differenz
\r\n >\r\n );\r\n}\r\n","import { MetricValues } from \"calculation/metric\";\r\nimport { useEffect } from \"react\";\r\nimport { ReactElement } from \"react\";\r\nimport { ParameterValues } from \"calculation/parameter\";\r\nimport { Action, State } from \"../../state/state\";\r\nimport { calculate } from \"calculation/calculate\";\r\nimport { CalculationTable } from \"./CalculationTable\";\r\nimport { ReportLinks } from \"components/zoning-plan-common/ReportLinks\";\r\nimport { CalculationHead } from \"./CalculationHead\";\r\nimport { NoData } from \"components/common/NoData\";\r\n\r\nexport function Calculation(props: {\r\n dispatch: (action: Action) => void;\r\n state: State;\r\n}): ReactElement {\r\n const dispatch = props.dispatch;\r\n const state = props.state;\r\n\r\n useEffect(() => {\r\n async function calculateCapacity() {\r\n if (\r\n state.metrics !== undefined &&\r\n state.selectedMunicipality !== undefined &&\r\n state.zoningPlanDraft.selectedScenarioLeft !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetLeft !== undefined\r\n ) {\r\n if (state.zoningPlanDraft.calculationStateLeft === undefined) {\r\n const metricValuesLeft = new MetricValues(\r\n state.zoningPlanDraft.selectedScenarioLeft.metricValues\r\n );\r\n\r\n const parameterValuesLeft = new ParameterValues(\r\n state.zoningPlanDraft.selectedParameterSetLeft.parameterValues\r\n );\r\n\r\n const calculationStateLeft = await calculate(\r\n state.metrics,\r\n metricValuesLeft,\r\n parameterValuesLeft,\r\n state.zoningPlanDraft.selectedScenarioLeft\r\n );\r\n\r\n dispatch({\r\n type: \"setCalculationStateLeft\",\r\n data: {\r\n calculationState: calculationStateLeft,\r\n },\r\n });\r\n }\r\n\r\n if (\r\n state.zoningPlanDraft.selectedScenarioRight !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetRight !== undefined &&\r\n state.zoningPlanDraft.calculationStateRight === undefined\r\n ) {\r\n const metricValuesRight = new MetricValues(\r\n state.zoningPlanDraft.selectedScenarioRight.metricValues\r\n );\r\n\r\n const parameterValuesRight = new ParameterValues(\r\n state.zoningPlanDraft.selectedParameterSetRight.parameterValues\r\n );\r\n\r\n const calculationStateRight = await calculate(\r\n state.metrics,\r\n metricValuesRight,\r\n parameterValuesRight,\r\n state.zoningPlanDraft.selectedScenarioRight\r\n );\r\n\r\n dispatch({\r\n type: \"setCalculationStateRight\",\r\n data: {\r\n calculationState: calculationStateRight,\r\n },\r\n });\r\n }\r\n }\r\n }\r\n calculateCapacity();\r\n }, [\r\n dispatch,\r\n state.selectedMunicipality,\r\n state.metrics,\r\n state.parameters,\r\n state.zoningPlanDraft.selectedScenarioLeft,\r\n state.zoningPlanDraft.selectedScenarioRight,\r\n state.zoningPlanDraft.selectedParameterSetLeft,\r\n state.zoningPlanDraft.selectedParameterSetRight,\r\n state.zoningPlanDraft.calculationStateLeft,\r\n state.zoningPlanDraft.calculationStateRight,\r\n ]);\r\n\r\n const hasData =\r\n state.metrics !== undefined &&\r\n state.selectedMunicipality !== undefined &&\r\n state.zoningPlanDraft.scenarioNames !== undefined &&\r\n state.zoningPlanDraft.scenarioNames.length > 0;\r\n\r\n return (\r\n \r\n {!hasData &&
}\r\n {hasData && (\r\n <>\r\n
\r\n Bauzonenkapazitäten vergleichen\r\n \r\n
\r\n Sie können hier die Bauzonenkapazitäten zweier Zonenpläne berechnen\r\n und vergleichen lassen. Sie können auch nur einen Zonenplan mit\r\n Kennzahlen selektieren, um die Kapazitätskennzahlen berechnen zu\r\n lassen.\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n {state.zoningPlanDraft.selectedScenarioLeft !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetLeft !== undefined &&\r\n state.zoningPlanDraft.calculationStateLeft !== undefined && (\r\n
\r\n
Downloads \r\n \r\n \r\n )}\r\n {state.zoningPlanDraft.selectedScenarioRight !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetRight !== undefined &&\r\n state.zoningPlanDraft.calculationStateRight !== undefined && (\r\n
\r\n
Downloads \r\n \r\n \r\n )}\r\n
\r\n {state.zoningPlanDraft.calculationStateLeft !== undefined &&\r\n state.zoningPlanDraft.calculationStateLeft.metricCalculationResultMessages\r\n .filter((m) => m.severity === \"error\")\r\n .map((m) =>
{m.message}
)}\r\n >\r\n )}\r\n
\r\n );\r\n}\r\n","import { Button } from \"components/common/Button\";\r\nimport { Input } from \"components/common/Input\";\r\nimport { useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { ReactElement } from \"react\";\r\n\r\nexport function ModalSaveAs(props: {\r\n initialParameterSetName: string;\r\n visible: boolean;\r\n setShowModal: React.Dispatch>;\r\n saveAction: (parameterSetName: string) => void;\r\n}): ReactElement {\r\n const { initialParameterSetName, visible, setShowModal, saveAction } = props;\r\n const [parameterSetName, setParameterSetName] = useState(\"\");\r\n\r\n useEffect(() => {\r\n setParameterSetName(initialParameterSetName);\r\n }, [initialParameterSetName]);\r\n\r\n return (\r\n \r\n
\r\n
\r\n
Speichern unter
\r\n
\r\n
setParameterSetName(e.target.value)}\r\n />\r\n
\r\n {\r\n setShowModal(false);\r\n }}\r\n >\r\n Abbrechen\r\n \r\n {\r\n saveAction(parameterSetName);\r\n setShowModal(false);\r\n }}\r\n >\r\n Speichern\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { Button } from \"components/common/Button\";\r\nimport { Input } from \"components/common/Input\";\r\nimport { ReactElement } from \"react\";\r\n\r\nexport function ModalDelete(props: {\r\n visible: boolean;\r\n setShowModal: React.Dispatch>;\r\n deleteAction: () => void;\r\n}): ReactElement {\r\n const { visible, setShowModal, deleteAction } = props;\r\n\r\n return (\r\n \r\n
\r\n
\r\n Wollen Sie die Kennwerte wirklich löschen? Dieser Vorgang kann nicht\r\n rückgängig gemacht werden.\r\n
\r\n
\r\n {\r\n setShowModal(false);\r\n }}\r\n >\r\n Abbrechen\r\n \r\n {\r\n deleteAction();\r\n setShowModal(false);\r\n }}\r\n >\r\n Löschen\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { Button } from \"components/common/Button\";\r\nimport { Input } from \"components/common/Input\";\r\nimport { useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { ReactElement } from \"react\";\r\n\r\nexport function ModalRename(props: {\r\n initialParameterSetName: string;\r\n visible: boolean;\r\n setShowModal: React.Dispatch>;\r\n renameAction: (parameterSetName: string) => void;\r\n}): ReactElement {\r\n const { initialParameterSetName, visible, setShowModal, renameAction } =\r\n props;\r\n const [parameterSetName, setParameterSetName] = useState(\"\");\r\n\r\n useEffect(() => {\r\n setParameterSetName(initialParameterSetName);\r\n }, [initialParameterSetName]);\r\n\r\n return (\r\n \r\n
\r\n
setParameterSetName(e.target.value)}\r\n />\r\n
\r\n {\r\n setShowModal(false);\r\n }}\r\n >\r\n Abbrechen\r\n \r\n {\r\n renameAction(parameterSetName);\r\n setShowModal(false);\r\n }}\r\n >\r\n Speichern\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { ParameterValues } from \"calculation/parameter\";\r\nimport { useState } from \"react\";\r\nimport { ReactElement } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { URL } from \"myconstants\";\r\nimport { ModalSaveAs } from \"./ModalSaveAs\";\r\nimport { Action, State } from \"../../state/state\";\r\nimport { ParameterSetDto, ParameterSetNameDto, ScenarioDto } from \"dtos/dtos\";\r\nimport { exportParametersCsv } from \"reports/reports\";\r\nimport { ParametersTable } from \"components/zoning-plan-common/ParametersTable\";\r\nimport { DownloadButton } from \"components/common/DownloadButton\";\r\nimport { NoData } from \"components/common/NoData\";\r\nimport { Select } from \"components/common/Select\";\r\nimport { useEffect } from \"react\";\r\nimport { Button } from \"components/common/Button\";\r\nimport { StatusBar } from \"components/common/StatusBar\";\r\nimport { Overlay } from \"components/common/Overlay\";\r\nimport { ModalDelete } from \"./ModalDelete\";\r\nimport { ModalRename } from \"./ModalRename\";\r\nimport moment from \"moment\";\r\n\r\nexport function Parameters(props: {\r\n dispatch: (action: Action) => void;\r\n state: State;\r\n}): ReactElement {\r\n const dispatch = props.dispatch;\r\n const state = props.state;\r\n const scenarioNames = state.zoningPlanDraft.scenarioNames?.filter(\r\n (s) => s.status !== \"inKraft\"\r\n );\r\n const parameterSetNames = state.zoningPlanDraft.parameterSetNames;\r\n const selectedScenario = state.zoningPlanDraft.selectedScenario;\r\n const selectedParameterSet = state.zoningPlanDraft.selectedParameterSet;\r\n const [loadScenarioId, setLoadScenarioId] = useState();\r\n const [loadParameterSetId, setLoadParameterSetId] = useState();\r\n const [showStatusBar, setShowStatusBar] = useState(false);\r\n const [loading, setLoading] = useState(false);\r\n const [showSaveAsModal, setShowSaveAsModal] = useState(false);\r\n const [showDeleteModal, setShowDeleteModal] = useState(false);\r\n const [showRenameModal, setShowRenameModal] = useState(false);\r\n const [parameterValues, setParameterValues] = useState();\r\n const [hasPendingChanges, setHasPendingChanges] = useState(false);\r\n const history = useHistory();\r\n\r\n async function saveSelectedParameterSet() {\r\n if (selectedParameterSet !== undefined && parameterValues !== undefined) {\r\n selectedParameterSet.parameterValues =\r\n parameterValues.createParameterValueDtos();\r\n selectedParameterSet.modifiedAt = moment().format();\r\n try {\r\n await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets/${selectedParameterSet.id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n method: \"PUT\",\r\n body: JSON.stringify(selectedParameterSet),\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n dispatch({\r\n type: \"saveParameterSet\",\r\n data: { parameterSet: selectedParameterSet },\r\n });\r\n setShowStatusBar(true);\r\n setTimeout(() => setShowStatusBar(false), 1500);\r\n setHasPendingChanges(false);\r\n } catch {\r\n history.replace(URL.error);\r\n }\r\n }\r\n }\r\n\r\n async function deleteSelectedParameterSet() {\r\n if (selectedParameterSet !== undefined) {\r\n try {\r\n await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets/${selectedParameterSet.id}`,\r\n {\r\n method: \"DELETE\",\r\n credentials: \"include\",\r\n }\r\n );\r\n dispatch({\r\n type: \"deleteParameterSet\",\r\n data: { parameterSetId: selectedParameterSet.id },\r\n });\r\n setShowStatusBar(true);\r\n setTimeout(() => setShowStatusBar(false), 1500);\r\n } catch {\r\n history.replace(URL.error);\r\n }\r\n }\r\n }\r\n\r\n async function renameSelectedParameterSet(newName: string) {\r\n if (selectedParameterSet !== undefined) {\r\n try {\r\n await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets/${selectedParameterSet.id}`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n method: \"PATCH\",\r\n body: JSON.stringify({\r\n name: newName,\r\n }),\r\n credentials: \"include\",\r\n }\r\n );\r\n dispatch({\r\n type: \"renameParameterSet\",\r\n data: { parameterSetId: selectedParameterSet.id, newName: newName },\r\n });\r\n setShowStatusBar(true);\r\n setTimeout(() => setShowStatusBar(false), 1500);\r\n } catch {\r\n history.replace(URL.error);\r\n }\r\n }\r\n }\r\n\r\n async function saveSelectedParameterSetAs(newParameterSetName: string) {\r\n if (\r\n selectedParameterSet !== undefined &&\r\n parameterValues !== undefined &&\r\n state.user.user !== undefined\r\n ) {\r\n const copyParameterValuesDtos =\r\n parameterValues.createParameterValueDtos();\r\n\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets`,\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n method: \"POST\",\r\n body: JSON.stringify({\r\n name: newParameterSetName,\r\n userId: state.user.user.id,\r\n scenarioId: selectedParameterSet.scenarioId,\r\n readonly: false,\r\n active: false,\r\n parameterValues: copyParameterValuesDtos,\r\n }),\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (response.ok) {\r\n const addedParameterSetDto: ParameterSetDto = await response.json();\r\n dispatch({\r\n type: \"addParameterSet\",\r\n data: { parameterSet: addedParameterSetDto },\r\n });\r\n }\r\n } catch {\r\n history.replace(URL.error);\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n async function loadScenario(scenarioId: string) {\r\n setLoading(true);\r\n\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/scenarios/id/${scenarioId}`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (response.ok) {\r\n const scenario: ScenarioDto = await response.json();\r\n const parameterSetNamesResponse = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersetnames/${scenario.id}`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (parameterSetNamesResponse.ok) {\r\n const parameterSetNames: ParameterSetNameDto[] =\r\n await parameterSetNamesResponse.json();\r\n\r\n dispatch({\r\n type: \"setSelectedScenarioDraft\",\r\n data: {\r\n scenario: scenario,\r\n parameterSetNames: parameterSetNames,\r\n },\r\n });\r\n }\r\n }\r\n } catch {\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n if (loadScenarioId !== undefined) {\r\n loadScenario(loadScenarioId);\r\n }\r\n }, [loadScenarioId, dispatch]);\r\n\r\n useEffect(() => {\r\n async function load(parameterSetId: string) {\r\n setLoading(true);\r\n\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/parametersets/id/${parameterSetId}`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n if (response.ok) {\r\n const parameterSet: ParameterSetDto = await response.json();\r\n dispatch({\r\n type: \"setSelectedParameterSetDraft\",\r\n data: { parameterSet: parameterSet },\r\n });\r\n }\r\n } catch {\r\n } finally {\r\n setLoading(false);\r\n setLoadParameterSetId(undefined);\r\n }\r\n }\r\n\r\n if (loadParameterSetId !== undefined) {\r\n load(loadParameterSetId);\r\n }\r\n }, [loadParameterSetId, dispatch]);\r\n\r\n useEffect(() => {\r\n if (\r\n selectedScenario === undefined &&\r\n scenarioNames !== undefined &&\r\n scenarioNames.length === 1\r\n ) {\r\n setLoadScenarioId(scenarioNames[0].id.toString());\r\n }\r\n }, [selectedScenario, scenarioNames]);\r\n\r\n useEffect(() => {\r\n if (selectedParameterSet === undefined) {\r\n if (parameterSetNames !== undefined && parameterSetNames.length === 1) {\r\n setLoadParameterSetId(parameterSetNames[0].id.toString());\r\n } else {\r\n setParameterValues(undefined);\r\n }\r\n } else {\r\n setParameterValues(\r\n new ParameterValues(selectedParameterSet.parameterValues)\r\n );\r\n }\r\n }, [selectedParameterSet, parameterSetNames]);\r\n\r\n useEffect(() => {\r\n setHasPendingChanges(false);\r\n }, [selectedParameterSet]);\r\n\r\n const hasData =\r\n state.parameters !== undefined &&\r\n scenarioNames !== undefined &&\r\n scenarioNames.length > 0;\r\n\r\n return (\r\n \r\n
\r\n
\r\n saveSelectedParameterSetAs(parameterSetName)\r\n }\r\n />\r\n \r\n renameSelectedParameterSet(parameterSetName)\r\n }\r\n />\r\n deleteSelectedParameterSet()}\r\n />\r\n \r\n {!hasData && }\r\n {hasData && (\r\n \r\n
\r\n
Kennwerte \r\n
\r\n Sie können die standardmässigen Kennwerte laden, editieren und für\r\n spätere Zwecke speichern. Diese Kennzahlen dienen dann als Basis\r\n zur Berechnung der Bauzonenkapazitäten im nächsten Schritt.\r\n
\r\n
\r\n \r\n Anwendungsbeispiel \"Vergleich Zonenplan mit zwei verschiedenen\r\n Kennzahlen\":\r\n \r\n \r\n Editieren Sie die Kennzahlen und speichern diese als \"Szenario\r\n Kennzahlen 1\". Editieren Sie erneut Kennzahlen und speichern diese\r\n ab unter \"Szenario Kennzahlen 2\". Im nächsten Schritt wählen Sie\r\n zweimal den identischen Zonenplan (mit / ohne Vorwirkung), jedoch\r\n einmal mit \"Szenario Kennzahlen 1\" und \"Szenario Kennzahlen 2\".\r\n
\r\n
\r\n
{\r\n return {\r\n value: s.id.toString(),\r\n displayValue: `${s.name} ${s.status}`,\r\n };\r\n })}\r\n value={selectedScenario?.id.toString()}\r\n width=\"w-80\"\r\n visible={true}\r\n onChange={(value) => setLoadScenarioId(value)}\r\n />\r\n {\r\n return { value: ps.id.toString(), displayValue: ps.name };\r\n })}\r\n value={selectedParameterSet?.id.toString()}\r\n width=\"w-80\"\r\n visible={true}\r\n onChange={(value) => setLoadParameterSetId(value)}\r\n />\r\n {selectedScenario !== undefined && parameterValues !== undefined && (\r\n <>\r\n setHasPendingChanges(true)}\r\n />\r\n {!hasPendingChanges &&
}\r\n {hasPendingChanges && (\r\n \r\n Sie haben ungespeicherte Änderungen!\r\n \r\n )}\r\n \r\n saveSelectedParameterSet()}\r\n disabled={hasPendingChanges ? false : true}\r\n >\r\n Speichern\r\n \r\n {\r\n if (selectedParameterSet !== undefined) {\r\n setParameterValues(\r\n new ParameterValues(\r\n selectedParameterSet.parameterValues\r\n )\r\n );\r\n setHasPendingChanges(false);\r\n }\r\n }}\r\n disabled={hasPendingChanges ? false : true}\r\n >\r\n Rückgängig\r\n \r\n setShowSaveAsModal(true)}\r\n >\r\n Speichern unter\r\n \r\n setShowRenameModal(true)}\r\n >\r\n Umbenennen\r\n \r\n setShowDeleteModal(true)}\r\n >\r\n Löschen\r\n \r\n
\r\n \r\n
Downloads \r\n \r\n exportParametersCsv(\r\n state.parameters!,\r\n parameterValues!,\r\n selectedScenario!,\r\n selectedParameterSet === undefined\r\n ? \"\"\r\n : selectedParameterSet.name,\r\n state.selectedMunicipality!.gemeinde\r\n )\r\n }\r\n />\r\n \r\n >\r\n )}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import { ReactElement, useState } from \"react\";\r\nimport { LINKS, URL } from \"myconstants\";\r\nimport { Redirect, Route, Switch, useLocation } from \"react-router-dom\";\r\nimport { Help as ZoningPlanDraftHelp } from \"../zoning-plan-draft/Help\";\r\nimport { Upload as ZoningPlanDraftUpload } from \"../zoning-plan-draft/Upload\";\r\nimport { Calculation } from \"../zoning-plan-draft/Calculation\";\r\nimport { Parameters } from \"components/zoning-plan-draft/Parameters\";\r\nimport { Action, State } from \"../../state/state\";\r\nimport { useEffect } from \"react\";\r\nimport { Navigation } from \"components/common/Navigation\";\r\nimport { ScenarioNameDto } from \"dtos/dtos\";\r\nimport { Overlay } from \"components/common/Overlay\";\r\n\r\nexport function ZoningPlanDraft(props: {\r\n dispatch: (action: Action) => void;\r\n state: State;\r\n}): ReactElement {\r\n const dispatch = props.dispatch;\r\n const state = props.state;\r\n const location = useLocation();\r\n const [loadError, setLoadError] = useState(false);\r\n const [loading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n async function loadScenarioNames(bfsNr: number): Promise {\r\n try {\r\n setLoading(true);\r\n\r\n const scenarioNamesResponse = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/scenarionames/bfsNr/${bfsNr}?status=alle`,\r\n {\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (scenarioNamesResponse.ok) {\r\n const scenarioNames: ScenarioNameDto[] =\r\n await scenarioNamesResponse.json();\r\n\r\n dispatch({\r\n type: \"setScenarioNamesDraft\",\r\n data: { scenarioNames: scenarioNames },\r\n });\r\n } else {\r\n setLoadError(true);\r\n }\r\n } catch {\r\n setLoadError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n if (state.selectedMunicipality?.bfsNr !== undefined) {\r\n loadScenarioNames(state.selectedMunicipality.bfsNr);\r\n }\r\n\r\n return () => setLoadError(false);\r\n }, [state.selectedMunicipality?.bfsNr, dispatch]);\r\n\r\n if (loadError) {\r\n return ;\r\n }\r\n\r\n if (state.selectedMunicipality === undefined) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n Gemeinde {state.selectedMunicipality?.gemeinde}\r\n {\" \"}\r\n > Zonenplan mit / ohne Vorwirkung > {LINKS[location.pathname]}\r\n \r\n {!loading && (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n","import { ReactElement } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { URL } from \"myconstants\";\r\n\r\nexport function Error(): ReactElement {\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n Es ist ein unerwarteter Fehler aufgetreten. Versuchen Sie es bitte\r\n noch einmal, indem Sie die{\" \"}\r\n \r\n Startseite\r\n {\" \"}\r\n aufrufen.\r\n
\r\n
\r\n \r\n );\r\n}\r\n","export const styleToObject = (input: string): Record => {\n const attributes = input.split(/ ?; ?/);\n\n return attributes.reduce((acc: Record, d: string) => {\n const [key, value] = d.split(/ ?: ?/);\n\n if (key && value) {\n acc[key.replace(/-(\\w)/g, (_$0, $1) => $1.toUpperCase())] = Number.isNaN(Number(value))\n ? value\n : Number(value);\n }\n\n return acc;\n }, {});\n};\n\n/* istanbul ignore next */\nexport function randomString(length = 6): string {\n const characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n let result = '';\n\n for (let i = length; i > 0; --i) {\n result += characters[Math.round(Math.random() * (characters.length - 1))];\n }\n\n return result;\n}\n\nexport const noTextChildNodes = [\n 'br',\n 'col',\n 'colgroup',\n 'dl',\n 'hr',\n 'iframe',\n 'img',\n 'input',\n 'link',\n 'menuitem',\n 'meta',\n 'ol',\n 'param',\n 'select',\n 'table',\n 'tbody',\n 'tfoot',\n 'thead',\n 'tr',\n 'ul',\n 'wbr',\n];\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// Taken from https://raw.githubusercontent.com/facebook/react/baff5cc2f69d30589a5dc65b089e47765437294b/packages/react-dom/src/shared/possibleStandardNames.js\n// tslint:disable:object-literal-sort-keys\nexport const possibleStandardNames: Record = {\n // HTML\n 'accept-charset': 'acceptCharset',\n acceptcharset: 'acceptCharset',\n accesskey: 'accessKey',\n allowfullscreen: 'allowFullScreen',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n charset: 'charSet',\n class: 'className',\n classid: 'classID',\n classname: 'className',\n colspan: 'colSpan',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controlslist: 'controlsList',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n datetime: 'dateTime',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n enctype: 'encType',\n for: 'htmlFor',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n maxlength: 'maxLength',\n mediagroup: 'mediaGroup',\n minlength: 'minLength',\n nomodule: 'noModule',\n novalidate: 'noValidate',\n playsinline: 'playsInline',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rowspan: 'rowSpan',\n spellcheck: 'spellCheck',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n tabindex: 'tabIndex',\n typemustmatch: 'typeMustMatch',\n usemap: 'useMap',\n\n // SVG\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n diffuseconstant: 'diffuseConstant',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n edgemode: 'edgeMode',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n externalresourcesrequired: 'externalResourcesRequired',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n numoctaves: 'numOctaves',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n ychannelselector: 'yChannelSelector',\n zoomandpan: 'zoomAndPan',\n\n // event handlers\n onblur: 'onBlur',\n onchange: 'onChange',\n onclick: 'onClick',\n oncontextmenu: 'onContextMenu',\n ondoubleclick: 'onDoubleClick',\n ondrag: 'onDrag',\n ondragend: 'onDragEnd',\n ondragenter: 'onDragEnter',\n ondragexit: 'onDragExit',\n ondragleave: 'onDragLeave',\n ondragover: 'onDragOver',\n ondragstart: 'onDragStart',\n ondrop: 'onDrop',\n onerror: 'onError',\n onfocus: 'onFocus',\n oninput: 'onInput',\n oninvalid: 'onInvalid',\n onkeydown: 'onKeyDown',\n onkeypress: 'onKeyPress',\n onkeyup: 'onKeyUp',\n onload: 'onLoad',\n onmousedown: 'onMouseDown',\n onmouseenter: 'onMouseEnter',\n onmouseleave: 'onMouseLeave',\n onmousemove: 'onMouseMove',\n onmouseout: 'onMouseOut',\n onmouseover: 'onMouseOver',\n onmouseup: 'onMouseUp',\n onscroll: 'onScroll',\n onsubmit: 'onSubmit',\n ontouchcancel: 'onTouchCancel',\n ontouchend: 'onTouchEnd',\n ontouchmove: 'onTouchMove',\n ontouchstart: 'onTouchStart',\n onwheel: 'onWheel',\n};\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport * as React from 'react';\n\nimport { noTextChildNodes, possibleStandardNames, randomString, styleToObject } from './helpers';\n\ninterface Options {\n actions?: Action[];\n index?: number;\n level?: number;\n nodeOnly?: boolean;\n randomKey?: boolean;\n selector?: string;\n type?: string;\n}\n\ninterface Attributes {\n [index: string]: any;\n\n key: string;\n}\n\nexport interface Action {\n // If this returns true, the two following functions are called if they are defined\n condition: (node: Node, key: string, level: number) => boolean;\n\n // Use this to inject a component or remove the node\n // It must return something that can be rendered by React\n post?: (node: Node, key: string, level: number) => React.ReactNode;\n\n // Use this to update or replace the node\n // e.g. for removing or adding attributes, changing the node type\n pre?: (node: Node, key: string, level: number) => Node;\n}\n\nfunction parseAttributes(node: Node, reactKey: string): Attributes {\n const attributes: Attributes = {\n key: reactKey,\n };\n\n /* istanbul ignore else */\n if (node instanceof Element) {\n const nodeClassNames = node.getAttribute('class');\n\n if (nodeClassNames) {\n attributes.className = nodeClassNames;\n }\n\n [...node.attributes].forEach(d => {\n switch (d.name) {\n // this is manually handled above, so break;\n case 'class':\n break;\n case 'style':\n attributes[d.name] = styleToObject(d.value);\n break;\n case 'allowfullscreen':\n case 'allowpaymentrequest':\n case 'async':\n case 'autofocus':\n case 'autoplay':\n case 'checked':\n case 'controls':\n case 'default':\n case 'defer':\n case 'disabled':\n case 'formnovalidate':\n case 'hidden':\n case 'ismap':\n case 'itemscope':\n case 'loop':\n case 'multiple':\n case 'muted':\n case 'nomodule':\n case 'novalidate':\n case 'open':\n case 'readonly':\n case 'required':\n case 'reversed':\n case 'selected':\n case 'typemustmatch':\n attributes[possibleStandardNames[d.name] || d.name] = true;\n break;\n default:\n attributes[possibleStandardNames[d.name] || d.name] = d.value;\n }\n });\n }\n\n return attributes;\n}\n\nfunction parseChildren(childNodeList: NodeList, level: number, options: Options) {\n const children: React.ReactNode[] = [...childNodeList]\n .map((node, index) =>\n convertFromNode(node, {\n ...options,\n index,\n level: level + 1,\n }),\n )\n .filter(Boolean);\n\n if (!children.length) {\n return null;\n }\n\n return children;\n}\n\nfunction parseName(nodeName: string) {\n if (/[a-z]+[A-Z]+[a-z]+/.test(nodeName)) {\n return nodeName;\n }\n\n return nodeName.toLowerCase();\n}\n\nexport function convertFromNode(input: Node, options: Options = {}): React.ReactNode {\n if (!input || !(input instanceof Node)) {\n return null;\n }\n\n const { actions = [], index = 0, level = 0, randomKey } = options;\n\n let node = input;\n let key = `${level}-${index}`;\n const result: Array = [];\n\n if (randomKey && level === 0) {\n key = `${randomString()}-${key}`;\n }\n\n /* istanbul ignore else */\n if (Array.isArray(actions)) {\n actions.forEach((action: Action) => {\n if (action.condition(node, key, level)) {\n if (typeof action.pre === 'function') {\n node = action.pre(node, key, level);\n\n if (!(node instanceof Node)) {\n node = input;\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.warn(\n 'The `pre` method always must return a valid DomNode (instanceof Node) - your modification will be ignored (Hint: if you want to render a React-component, use the `post` method instead)',\n );\n }\n }\n }\n\n if (typeof action.post === 'function') {\n result.push(action.post(node, key, level));\n }\n }\n });\n }\n\n if (result.length) {\n return result;\n }\n\n switch (node.nodeType) {\n case 1: {\n // regular dom-node\n return React.createElement(\n parseName(node.nodeName),\n parseAttributes(node, key),\n parseChildren(node.childNodes, level, options),\n );\n }\n case 3: {\n // textnode\n const nodeText = node.nodeValue?.toString() || '';\n\n /* istanbul ignore else */\n if (/^\\s+$/.test(nodeText) && !/[\\u202F\\u00A0]/.test(nodeText)) {\n return null;\n }\n\n /* istanbul ignore next */\n if (!node.parentNode) {\n return nodeText;\n }\n\n const parentNodeName = node.parentNode.nodeName.toLowerCase();\n\n if (noTextChildNodes.indexOf(parentNodeName) !== -1) {\n /* istanbul ignore else */\n if (/\\S/.test(nodeText)) {\n // eslint-disable-next-line no-console\n console.warn(\n `A textNode is not allowed inside '${parentNodeName}'. Your text \"${nodeText}\" will be ignored`,\n );\n }\n\n return null;\n }\n\n return nodeText;\n }\n case 8: {\n // html-comment\n return null;\n }\n /* istanbul ignore next */\n default: {\n return null;\n }\n }\n}\n\nexport function convertFromString(input: string, options: Options = {}): React.ReactNode | Node {\n if (!input || typeof input !== 'string') {\n return null;\n }\n\n const { nodeOnly = false, selector = 'body > *', type = 'text/html' } = options;\n\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, type as DOMParserSupportedType);\n const node = doc.querySelector(selector);\n\n if (!(node instanceof Node)) {\n throw new Error('Error parsing input');\n }\n\n if (nodeOnly) {\n return node;\n }\n\n return convertFromNode(node, options);\n } catch (error) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n\n return null;\n}\n\nexport default function convert(\n input: Node | string,\n options: Options = {},\n): React.ReactNode | Node {\n if (typeof input === 'string') {\n return convertFromString(input, options);\n }\n\n if (input instanceof Node) {\n return convertFromNode(input, options);\n }\n\n return null;\n}\n","import { canUseDOM as canUseDOMFlag } from 'exenv';\n\nimport { PlainObject } from './types';\n\nexport const STATUS = {\n FAILED: 'failed',\n LOADED: 'loaded',\n LOADING: 'loading',\n PENDING: 'pending',\n READY: 'ready',\n UNSUPPORTED: 'unsupported',\n};\n\nexport function canUseDOM(): boolean {\n return canUseDOMFlag;\n}\n\nexport function isSupportedEnvironment(): boolean {\n return supportsInlineSVG() && typeof window !== 'undefined' && window !== null;\n}\n\nexport function supportsInlineSVG(): boolean {\n /* istanbul ignore next */\n if (!document) {\n return false;\n }\n\n const div = document.createElement('div');\n div.innerHTML = ' ';\n return !!div.firstChild && div.firstChild.namespaceURI === 'http://www.w3.org/2000/svg';\n}\n\nexport function randomString(length: number): string {\n const letters = 'abcdefghijklmnopqrstuvwxyz';\n const numbers = '1234567890';\n const charset = `${letters}${letters.toUpperCase()}${numbers}`;\n\n const randomCharacter = (character: string) =>\n character[Math.floor(Math.random() * character.length)];\n\n let R = '';\n for (let i = 0; i < length; i++) {\n R += randomCharacter(charset);\n }\n\n return R;\n}\n\n/**\n * Remove properties from an object\n */\nexport function removeProperties(\n input: T,\n ...filter: K[]\n): Omit {\n const output: any = {};\n\n for (const key in input) {\n /* istanbul ignore else */\n if ({}.hasOwnProperty.call(input, key)) {\n if (!filter.includes((key as unknown) as K)) {\n output[key] = input[key];\n }\n }\n }\n\n return output;\n}\n","import * as React from 'react';\n\nimport convert from 'react-from-dom';\n\nimport {\n STATUS,\n canUseDOM,\n isSupportedEnvironment,\n randomString,\n removeProperties,\n} from './helpers';\nimport { FetchError, Props, State, StorageItem } from './types';\n\nexport const cacheStore: { [key: string]: StorageItem } = Object.create(null);\n\nexport default class InlineSVG extends React.PureComponent {\n constructor(props: Props) {\n super(props);\n\n this.state = {\n content: '',\n element: null,\n hasCache: !!props.cacheRequests && !!cacheStore[props.src],\n status: STATUS.PENDING,\n };\n\n this.hash = props.uniqueHash || randomString(8);\n }\n\n private isActive = false;\n private readonly hash: string;\n\n public static defaultProps = {\n cacheRequests: true,\n uniquifyIDs: false,\n };\n\n public componentDidMount(): void {\n this.isActive = true;\n\n if (!canUseDOM()) {\n return;\n }\n\n const { status } = this.state;\n const { src } = this.props;\n\n try {\n /* istanbul ignore else */\n if (status === STATUS.PENDING) {\n /* istanbul ignore else */\n if (!isSupportedEnvironment()) {\n throw new Error('Browser does not support SVG');\n }\n\n /* istanbul ignore else */\n if (!src) {\n throw new Error('Missing src');\n }\n\n this.load();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n public componentDidUpdate(prevProps: Props, prevState: State): void {\n if (!canUseDOM()) {\n return;\n }\n\n const { hasCache, status } = this.state;\n const { onLoad, src } = this.props;\n\n if (prevState.status !== STATUS.READY && status === STATUS.READY) {\n /* istanbul ignore else */\n if (onLoad) {\n onLoad(src, hasCache);\n }\n }\n\n if (prevProps.src !== src) {\n if (!src) {\n this.handleError(new Error('Missing src'));\n return;\n }\n\n this.load();\n }\n }\n\n public componentWillUnmount(): void {\n this.isActive = false;\n }\n\n private processSVG() {\n const { content } = this.state;\n const { preProcessor } = this.props;\n\n if (preProcessor) {\n return preProcessor(content);\n }\n\n return content;\n }\n\n private updateSVGAttributes(node: SVGSVGElement): SVGSVGElement {\n const { baseURL = '', uniquifyIDs } = this.props;\n const replaceableAttributes = ['id', 'href', 'xlink:href', 'xlink:role', 'xlink:arcrole'];\n const linkAttributes = ['href', 'xlink:href'];\n const isDataValue = (name: string, value: string) =>\n linkAttributes.indexOf(name) >= 0 && (value ? value.indexOf('#') < 0 : false);\n\n if (!uniquifyIDs) {\n return node;\n }\n\n [...node.children].map((d) => {\n if (d.attributes && d.attributes.length) {\n const attributes = Object.values(d.attributes).map((a) => {\n const attr = a;\n const match = a.value.match(/url\\((.*?)\\)/);\n\n if (match && match[1]) {\n attr.value = a.value.replace(match[0], `url(${baseURL}${match[1]}__${this.hash})`);\n }\n\n return attr;\n });\n\n replaceableAttributes.forEach((r) => {\n const attribute = attributes.find((a) => a.name === r);\n\n if (attribute && !isDataValue(r, attribute.value)) {\n attribute.value = `${attribute.value}__${this.hash}`;\n }\n });\n }\n\n if (d.children.length) {\n return this.updateSVGAttributes(d as SVGSVGElement);\n }\n\n return d;\n });\n\n return node;\n }\n\n private getNode() {\n const { description, title } = this.props;\n\n try {\n const svgText = this.processSVG();\n const node = convert(svgText, { nodeOnly: true });\n\n if (!node || !(node instanceof SVGSVGElement)) {\n throw new Error('Could not convert the src to a DOM Node');\n }\n\n const svg = this.updateSVGAttributes(node);\n\n if (description) {\n const originalDesc = svg.querySelector('desc');\n\n if (originalDesc && originalDesc.parentNode) {\n originalDesc.parentNode.removeChild(originalDesc);\n }\n\n const descElement = document.createElement('desc');\n descElement.innerHTML = description;\n svg.prepend(descElement);\n }\n\n if (title) {\n const originalTitle = svg.querySelector('title');\n\n if (originalTitle && originalTitle.parentNode) {\n originalTitle.parentNode.removeChild(originalTitle);\n }\n\n const titleElement = document.createElement('title');\n titleElement.innerHTML = title;\n svg.prepend(titleElement);\n }\n\n return svg;\n } catch (error) {\n return this.handleError(error);\n }\n }\n\n private getElement() {\n try {\n const node = this.getNode() as Node;\n const element = convert(node);\n\n if (!element || !React.isValidElement(element)) {\n throw new Error('Could not convert the src to a React element');\n }\n\n this.setState({\n element,\n status: STATUS.READY,\n });\n } catch (error) {\n this.handleError(new Error(error.message));\n }\n }\n\n private load() {\n /* istanbul ignore else */\n if (this.isActive) {\n this.setState(\n {\n content: '',\n element: null,\n status: STATUS.LOADING,\n },\n () => {\n const { cacheRequests, src } = this.props;\n const cache = cacheRequests && cacheStore[src];\n if (cache) {\n /* istanbul ignore else */\n if (cache.status === STATUS.LOADING) {\n cache.queue.push(this.handleCacheQueue);\n } else if (cache.status === STATUS.LOADED) {\n this.handleLoad(cache.content);\n }\n return;\n }\n\n const dataURI = src.match(/data:image\\/svg[^,]*?(;base64)?,(.*)/);\n let inlineSrc;\n\n if (dataURI) {\n inlineSrc = dataURI[1] ? atob(dataURI[2]) : decodeURIComponent(dataURI[2]);\n } else if (src.indexOf('= 0) {\n inlineSrc = src;\n }\n\n if (inlineSrc) {\n this.handleLoad(inlineSrc);\n return;\n }\n\n this.request();\n },\n );\n }\n }\n\n private handleCacheQueue = (content: string | Error) => {\n /* istanbul ignore else */\n if (typeof content === 'string') {\n this.handleLoad(content);\n return;\n }\n\n this.handleError(content);\n };\n\n private handleLoad = (content: string) => {\n /* istanbul ignore else */\n if (this.isActive) {\n this.setState(\n {\n content,\n status: STATUS.LOADED,\n },\n this.getElement,\n );\n }\n };\n\n private handleError = (error: Error | FetchError) => {\n const { onError } = this.props;\n const status =\n error.message === 'Browser does not support SVG' ? STATUS.UNSUPPORTED : STATUS.FAILED;\n\n /* istanbul ignore else */\n if (this.isActive) {\n this.setState({ status }, () => {\n /* istanbul ignore else */\n if (typeof onError === 'function') {\n onError(error);\n }\n });\n }\n };\n\n private request = () => {\n const { cacheRequests, fetchOptions, src } = this.props;\n\n try {\n if (cacheRequests) {\n cacheStore[src] = { content: '', status: STATUS.LOADING, queue: [] };\n }\n\n return fetch(src, fetchOptions)\n .then((response) => {\n const contentType = response.headers.get('content-type');\n const [fileType] = (contentType || '').split(/ ?; ?/);\n\n if (response.status > 299) {\n throw new Error('Not found');\n }\n\n if (!['image/svg+xml', 'text/plain'].some((d) => fileType.indexOf(d) >= 0)) {\n throw new Error(`Content type isn't valid: ${fileType}`);\n }\n\n return response.text();\n })\n .then((content) => {\n const { src: currentSrc } = this.props;\n\n // the current src don't match the previous one, skipping...\n if (src !== currentSrc) {\n return;\n }\n\n this.handleLoad(content);\n\n /* istanbul ignore else */\n if (cacheRequests) {\n const cache = cacheStore[src];\n\n /* istanbul ignore else */\n if (cache) {\n cache.content = content;\n cache.status = STATUS.LOADED;\n\n cache.queue = cache.queue.filter((cb) => {\n cb(content);\n\n return false;\n });\n }\n }\n })\n .catch((error) => {\n this.handleError(error);\n\n /* istanbul ignore else */\n if (cacheRequests) {\n const cache = cacheStore[src];\n\n /* istanbul ignore else */\n if (cache) {\n cache.queue.forEach((cb: (content: string) => void) => {\n cb(error);\n });\n\n delete cacheStore[src];\n }\n }\n });\n } catch (error) {\n return this.handleError(new Error(error.message));\n }\n };\n\n public render(): React.ReactNode {\n const { element, status } = this.state;\n const { children = null, innerRef, loader = null } = this.props;\n const elementProps = removeProperties(\n this.props,\n 'baseURL',\n 'cacheRequests',\n 'children',\n 'description',\n 'fetchOptions',\n 'innerRef',\n 'loader',\n 'onError',\n 'onLoad',\n 'preProcessor',\n 'src',\n 'title',\n 'uniqueHash',\n 'uniquifyIDs',\n );\n\n if (!canUseDOM()) {\n return loader;\n }\n\n if (element) {\n return React.cloneElement(element as React.ReactElement, { ref: innerRef, ...elementProps });\n }\n\n if ([STATUS.UNSUPPORTED, STATUS.FAILED].indexOf(status) > -1) {\n return children;\n }\n\n return loader;\n }\n}\n\nexport * from './types';\n","var _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgKantonslogoLuzern(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n x: \"0px\",\n y: \"0px\",\n viewBox: \"0 0 41.5 300\",\n style: {\n enableBackground: \"new 0 0 41.5 300\"\n },\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, /*#__PURE__*/React.createElement(\"path\", {\n style: {\n opacity: 0.5,\n height: \"100%\",\n fill: \"#fff\"\n },\n className: \"st0\",\n d: \"M32.1,141.7v-20.1h8.3l-0.1,40.2L17.9,145l-8.6-6.3v18.9H0v-38.2L32.1,141.7L32.1,141.7z M0,11.1V0h40.4v10.3L16.2,29.6h24.2v10.9H0V30.5l24.3-19.4H0z M25.4,190.2c2.8-0.3,5.8-1.6,6.6-4.5c0.9-2.9,0.5-6.6-2.1-8.6c-1.4-1-3.1-1.2-4.8-1.4H0v-12l28.2,0.1c5.4,0.5,10,4.1,11.8,9.2c2.4,8.1,2.5,19-3.6,25.3c-3.9,3.9-9.3,4.1-14.9,4l-21.5,0v-12L25.4,190.2L25.4,190.2z M8.9,89.7v14.5h6.8V91.5h8.8v12.7h7.6V89.7h8.3v25.2H0V89.7H8.9zM31.1,220.2v-14h9.3v26.1l-40.4,0v-12.1H31.1z M25.4,70l15-12.4V44.1l-10.5,9.3l-6.4,5.3c-0.7-2.4-2.1-4.6-3.9-6.4c-3.1-2.7-7.9-3-11.7-1.8C3.5,52,0.3,56.7,0,61.3v20.9h40.4V70L25.4,70z M18,70.1H7.9c0-2.9-0.5-6.2,2.2-7.7c1.7-1,3.7-1.1,5.5-0.3C18.3,63.5,18,67.2,18,70.1L18,70.1z\"\n }), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6.6,274.4V300h0.3v-25.6C6.9,274.4,6.6,274.4,6.6,274.4z M13.4,274.4l0,25.6h0.3v-25.6H13.4z M13.4,260.7h0.3v-76.9h-0.3C13.4,183.9,13.4,260.7,13.4,260.7z M20.2,274.4V300h0.3l0-25.6H20.2z M20.2,260.7h0.3v-76.9h-0.3V260.7z M11.8,275 L8,275v-0.3h4.5v0.1l-3.9,3.6H10l2.3,0v0.4H7.8v-0.1L11.8,275L11.8,275z M11.7,288.1l-3.7,0v-0.4h4.5v0.1l-3.9,3.6h1.7l2.1,0v0.4 H7.8v-0.1L11.7,288.1z M8.3,284.4v1.1l0,0h4.1v0.4H8.3l0,1.1H8v-2.6L8.3,284.4L8.3,284.4z M10,299.4L10,299.4l-2-2v-0.5l2.1,2 l2.3-2.1v0.5L10,299.4l2.3,0l0,0.4H8v-0.4C8,299.4,10,299.4,10,299.4z M18.3,289.9v-2.2l0.9,0l0,4.3l-2.4-1.8l-0.9-0.7l0,2h-1v-4.1 L18.3,289.9z M17.4,275.8L17.4,275.8l-2.6,0v-1.2h4.4v1.1l-2.6,2.1l2.6,0v1.2h-4.4v-1.1L17.4,275.8L17.4,275.8z M17.5,295.2 c0.3,0,0.6-0.2,0.7-0.5c0.1-0.3,0-0.7-0.2-0.9c-0.2-0.1-0.3-0.1-0.5-0.2h-2.7v-1.3h3c0.6,0,1.1,0.4,1.3,1c0.3,0.9,0.2,2-0.4,2.7 c-0.4,0.4-1,0.5-1.6,0.4h-2.3v-1.3L17.5,295.2z M15.7,284.3v1.6l0.7,0v-1.4h1v1.4l0.8,0l0-1.6h0.9v2.7h-4.4v-2.7L15.7,284.3 L15.7,284.3z M18.1,298.4l0-1.5h1l0,2.8h-4.3l0-1.3H18.1z M8,267.5v5.6l0.3,0v-5.6H8z M9.3,267.5v5.6l0.3,0l0-5.6H9.3z M10.7,267.5 v5.6l0.3,0l0-5.6C11,267.5,10.7,267.5,10.7,267.5z M12.1,267.6v5.6h0.3v-5.6H12.1z M13.4,267.6v5.6h0.3v-5.6H13.4z M14.8,267.6v5.6 h0.3l0-5.6H14.8z M16.1,267.6l0,5.4h0.3v-5.4H16.1z M17.5,267.6v4.8l0.3,0v-4.8H17.5z M18.9,267.6v3.7h0.3l0-3.7H18.9z M17.5,282.2 l1.6-1.3v-1.5l-1.1,1l-0.7,0.6c-0.1-0.3-0.2-0.5-0.4-0.7c-0.6-0.4-1.4-0.3-1.8,0.3c-0.2,0.2-0.2,0.5-0.3,0.7v2.2h4.4v-1.3H17.5 L17.5,282.2z M16.7,282.2h-1.1c0-0.3-0.1-0.7,0.2-0.8c0.2-0.1,0.4-0.1,0.6,0C16.8,281.5,16.7,281.9,16.7,282.2z M10.9,295.5v-2 c0,0,0.1,0,0.1-0.1l1.3-0.6v-0.4l-2.1,0.9l-0.8,0.4l-1.6,0.7v0.1l3.5,1.5l1,0.4v-0.4l-1.1-0.5L10.9,295.5L10.9,295.5z M10.6,295.3 l-2.1-0.8c0.7-0.3,1.4-0.6,2.1-0.8V295.3z M12.2,280.6c-0.7-1.1-2.2-1.4-3.3-0.7c-0.5,0.3-0.9,0.8-1,1.4c0,0.2-0.1,0.4-0.1,0.7 c0,0.2,0.1,0.4,0.1,0.6c0.2,0.8,0.8,1.3,1.6,1.5c1,0.3,2.1-0.1,2.6-0.9C12.6,282.4,12.6,281.4,12.2,280.6L12.2,280.6z M12.1,282.6 c-0.2,0.7-0.8,1.2-1.5,1.3c-0.8,0.2-1.5-0.1-2-0.7c-0.5-0.6-0.6-1.4-0.3-2.1c0.2-0.4,0.5-0.8,1-1c0.8-0.4,1.6-0.2,2.3,0.3 C12.1,280.9,12.4,281.8,12.1,282.6L12.1,282.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.8,261.8H6.6v11.4h8.2c3.2-0.1,5.6-2.8,5.5-5.9C20.2,264.3,17.8,261.9,14.8,261.8z M14.8,273H6.9v-10.9h7.9c3,0,5.5,2.4,5.5,5.5C20.3,270.6,17.8,273,14.8,273L14.8,273z M6.6,260.7h0.3v-76.9H6.6C6.6,183.9,6.6,260.7,6.6,260.7z\"\n }))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgKantonslogoLuzern);\nexport default __webpack_public_path__ + \"static/media/kantonslogo-luzern.90565cc2f6feccd0849d415bb8199e15.svg\";\nexport { ForwardRef as ReactComponent };","import { Link } from \"react-router-dom\";\r\nimport SVG from \"react-inlinesvg\";\r\nimport { MUNICIPALITY_STORAGE_KEY, URL } from \"myconstants\";\r\nimport { Action, State } from \"state/state\";\r\nimport cantonLogo from \"assets/images/kantonslogo-luzern.svg\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Select } from \"components/common/Select\";\r\n\r\nexport function Header(props: {\r\n dispatch: (action: Action) => void;\r\n state: State;\r\n}) {\r\n async function logout() {\r\n try {\r\n await fetch(`${process.env.REACT_APP_API_BASE_URL}/users/logout`, {\r\n method: \"POST\",\r\n credentials: \"include\",\r\n });\r\n } finally {\r\n window.sessionStorage.removeItem(MUNICIPALITY_STORAGE_KEY);\r\n dispatch({ type: \"signOut\" });\r\n history.replace(URL.root);\r\n }\r\n }\r\n\r\n function onMunicipalityChange(bfsNr: string) {\r\n const selectedMunicipality = state.user.accessibleMunicipalities?.find(\r\n (m) => m.bfsNr.toString() === bfsNr\r\n );\r\n\r\n if (selectedMunicipality !== undefined) {\r\n dispatch({\r\n type: \"setSelectedMunicipality\",\r\n data: { municipality: selectedMunicipality },\r\n });\r\n\r\n window.sessionStorage.setItem(\r\n MUNICIPALITY_STORAGE_KEY,\r\n selectedMunicipality.bfsNr.toString()\r\n );\r\n }\r\n }\r\n\r\n const { dispatch, state } = props;\r\n const history = useHistory();\r\n\r\n return (\r\n \r\n dispatch({ type: \"clearAll\" })}\r\n to={URL.root}\r\n className=\"absolute w-10 md:w-12 lg:w-14\"\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {state.user.user !== undefined && (\r\n <>\r\n {state.user.user.name} \r\n \r\n \r\n Abmelden\r\n \r\n \r\n >\r\n )}\r\n \r\n \r\n \r\n {\r\n return { value: m.bfsNr.toString(), displayValue: m.gemeinde };\r\n })}\r\n value={state.selectedMunicipality?.bfsNr.toString()}\r\n width=\"w-auto\"\r\n visible={true}\r\n onChange={(value) => onMunicipalityChange(value)}\r\n />\r\n \r\n \r\n \r\n );\r\n}\r\n","// import facebookLogo from \"assets/images/facebook.svg\";\r\n// import twitterLogo from \"assets/images/twitter.svg\";\r\n\r\nexport function Footer() {\r\n return (\r\n \r\n );\r\n}\r\n","import { Redirect, Route, Switch } from \"react-router-dom\";\r\nimport { Login } from \"components/main/Login\";\r\nimport { SelectMunicipality } from \"components/main/SelectMunicipality\";\r\nimport { URL } from \"myconstants\";\r\nimport { Help } from \"components/main/Help\";\r\nimport { useEffect, useReducer } from \"react\";\r\nimport { ZoningPlanLegal } from \"components/main/ZoningPlanLegal\";\r\nimport { ZoningPlanDraft } from \"components/main/ZoningPlanDraft\";\r\nimport { ReactElement } from \"react\";\r\nimport { Error } from \"components/main/Error\";\r\nimport { Action, State } from \"state/state\";\r\nimport { Header } from \"components/main/Header\";\r\nimport { Footer } from \"components/main/Footer\";\r\nimport { ParameterSetDto, ParameterSetNameDto } from \"dtos/dtos\";\r\n\r\nconst initialState: State = {\r\n metrics: undefined,\r\n parameters: undefined,\r\n municipalities: undefined,\r\n selectedMunicipality: undefined,\r\n zoningPlanLegal: {\r\n scenario: undefined,\r\n parameterSet: undefined,\r\n calculationState: undefined,\r\n },\r\n zoningPlanDraft: {\r\n scenarioNames: undefined,\r\n parameterSetNames: undefined,\r\n parameterSetNamesLeft: undefined,\r\n parameterSetNamesRight: undefined,\r\n selectedScenarioLeft: undefined,\r\n selectedScenarioRight: undefined,\r\n selectedParameterSetLeft: undefined,\r\n selectedParameterSetRight: undefined,\r\n calculationStateLeft: undefined,\r\n calculationStateRight: undefined,\r\n selectedScenario: undefined,\r\n selectedParameterSet: undefined,\r\n },\r\n user: { user: undefined, accessibleMunicipalities: undefined },\r\n};\r\n\r\nfunction reducer(state: State, action: Action): State {\r\n switch (action.type) {\r\n case \"clearAll\":\r\n return {\r\n metrics: undefined,\r\n parameters: undefined,\r\n municipalities: undefined,\r\n selectedMunicipality: undefined,\r\n zoningPlanLegal: {\r\n scenario: undefined,\r\n parameterSet: undefined,\r\n calculationState: undefined,\r\n },\r\n zoningPlanDraft: {\r\n scenarioNames: undefined,\r\n parameterSetNames: undefined,\r\n parameterSetNamesLeft: undefined,\r\n parameterSetNamesRight: undefined,\r\n selectedScenarioLeft: undefined,\r\n selectedScenarioRight: undefined,\r\n selectedParameterSetLeft: undefined,\r\n selectedParameterSetRight: undefined,\r\n calculationStateLeft: undefined,\r\n calculationStateRight: undefined,\r\n selectedScenario: undefined,\r\n selectedParameterSet: undefined,\r\n },\r\n user: state.user,\r\n };\r\n case \"setMetadata\":\r\n return {\r\n ...state,\r\n metrics: action.data.metrics,\r\n parameters: action.data.parameters,\r\n municipalities: action.data.municipalities,\r\n zoningPlanLegal: {\r\n ...state.zoningPlanLegal,\r\n calculationState: undefined,\r\n },\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n calculationStateLeft: undefined,\r\n calculationStateRight: undefined,\r\n },\r\n };\r\n\r\n case \"setSelectedMunicipality\":\r\n return {\r\n ...state,\r\n selectedMunicipality: action.data.municipality,\r\n zoningPlanLegal: {\r\n scenario: undefined,\r\n parameterSet: undefined,\r\n calculationState: undefined,\r\n },\r\n zoningPlanDraft: {\r\n scenarioNames: undefined,\r\n parameterSetNames: undefined,\r\n parameterSetNamesLeft: undefined,\r\n parameterSetNamesRight: undefined,\r\n selectedScenarioLeft: undefined,\r\n selectedScenarioRight: undefined,\r\n selectedParameterSetLeft: undefined,\r\n selectedParameterSetRight: undefined,\r\n calculationStateLeft: undefined,\r\n calculationStateRight: undefined,\r\n selectedScenario: undefined,\r\n selectedParameterSet: undefined,\r\n },\r\n };\r\n\r\n case \"setCalculationStateLegal\":\r\n return {\r\n ...state,\r\n zoningPlanLegal: {\r\n ...state.zoningPlanLegal,\r\n calculationState: action.data.calculationState,\r\n },\r\n };\r\n\r\n case \"setScenarioNamesDraft\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n scenarioNames: action.data.scenarioNames,\r\n parameterSetNames: undefined,\r\n parameterSetNamesLeft: undefined,\r\n parameterSetNamesRight: undefined,\r\n selectedScenarioLeft: undefined,\r\n selectedScenarioRight: undefined,\r\n selectedParameterSetLeft: undefined,\r\n selectedParameterSetRight: undefined,\r\n calculationStateLeft: undefined,\r\n calculationStateRight: undefined,\r\n selectedScenario: undefined,\r\n selectedParameterSet: undefined,\r\n },\r\n };\r\n\r\n case \"setScenarioAndParameterSetLegal\":\r\n return {\r\n ...state,\r\n zoningPlanLegal: {\r\n ...state.zoningPlanLegal,\r\n scenario: action.data.scenario,\r\n parameterSet: action.data.parameterSet,\r\n calculationState: undefined,\r\n },\r\n };\r\n\r\n case \"setSelectedScenarioLeft\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedScenarioLeft: action.data.scenario,\r\n parameterSetNamesLeft: action.data.parameterSetNames,\r\n selectedParameterSetLeft: undefined,\r\n calculationStateLeft: undefined,\r\n },\r\n };\r\n\r\n case \"setSelectedScenarioRight\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedScenarioRight: action.data.scenario,\r\n parameterSetNamesRight: action.data.parameterSetNames,\r\n selectedParameterSetRight: undefined,\r\n calculationStateRight: undefined,\r\n },\r\n };\r\n\r\n case \"setSelectedParameterSetLeft\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedParameterSetLeft: action.data.parameterSet,\r\n calculationStateLeft: undefined,\r\n },\r\n };\r\n\r\n case \"setSelectedParameterSetRight\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedParameterSetRight: action.data.parameterSet,\r\n calculationStateRight: undefined,\r\n },\r\n };\r\n\r\n case \"setCalculationStateLeft\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n calculationStateLeft: action.data.calculationState,\r\n },\r\n };\r\n\r\n case \"setCalculationStateRight\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n calculationStateRight: action.data.calculationState,\r\n },\r\n };\r\n\r\n case \"setSelectedScenarioDraft\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedScenario: action.data.scenario,\r\n selectedParameterSet: undefined,\r\n parameterSetNames: action.data.parameterSetNames,\r\n },\r\n };\r\n\r\n case \"setSelectedParameterSetDraft\":\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedParameterSet: action.data.parameterSet,\r\n },\r\n };\r\n\r\n case \"saveParameterSet\": {\r\n const parameterSet: ParameterSetDto = action.data.parameterSet;\r\n\r\n const updateLegal =\r\n state.zoningPlanLegal.parameterSet !== undefined &&\r\n state.zoningPlanLegal.parameterSet.id === parameterSet.id;\r\n\r\n const updateLeft =\r\n state.zoningPlanDraft.selectedParameterSetLeft !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetLeft.id === parameterSet.id;\r\n\r\n const updateRight =\r\n state.zoningPlanDraft.selectedParameterSetRight !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetRight.id === parameterSet.id;\r\n\r\n return {\r\n ...state,\r\n zoningPlanLegal: {\r\n ...state.zoningPlanLegal,\r\n parameterSet: updateLegal\r\n ? parameterSet\r\n : state.zoningPlanLegal.parameterSet,\r\n calculationState: updateLegal\r\n ? undefined\r\n : state.zoningPlanLegal.calculationState,\r\n },\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedParameterSetLeft: updateLeft\r\n ? parameterSet\r\n : state.zoningPlanDraft.selectedParameterSetLeft,\r\n selectedParameterSetRight: updateRight\r\n ? parameterSet\r\n : state.zoningPlanDraft.selectedParameterSetRight,\r\n calculationStateLeft: updateLeft\r\n ? undefined\r\n : state.zoningPlanDraft.calculationStateLeft,\r\n calculationStateRight: updateRight\r\n ? undefined\r\n : state.zoningPlanDraft.calculationStateRight,\r\n },\r\n };\r\n }\r\n\r\n case \"renameParameterSet\": {\r\n const parameterSetId: number = action.data.parameterSetId;\r\n const newName: string = action.data.newName;\r\n const parameterSetName = state.zoningPlanDraft.parameterSetNames?.find(\r\n (ps) => ps.id === parameterSetId\r\n );\r\n const parameterSetNameLeft =\r\n state.zoningPlanDraft.parameterSetNamesLeft?.find(\r\n (ps) => ps.id === parameterSetId\r\n );\r\n const parameterSetNameRight =\r\n state.zoningPlanDraft.parameterSetNamesRight?.find(\r\n (ps) => ps.id === parameterSetId\r\n );\r\n const selectedParameterSet = state.zoningPlanDraft.selectedParameterSet;\r\n const selectedParameterSetLeft =\r\n state.zoningPlanDraft.selectedParameterSetLeft;\r\n const selectedParameterSetRight =\r\n state.zoningPlanDraft.selectedParameterSetRight;\r\n\r\n if (parameterSetName !== undefined) {\r\n parameterSetName.name = newName;\r\n }\r\n\r\n if (parameterSetNameLeft !== undefined) {\r\n parameterSetNameLeft.name = newName;\r\n }\r\n\r\n if (parameterSetNameRight !== undefined) {\r\n parameterSetNameRight.name = newName;\r\n }\r\n\r\n if (\r\n selectedParameterSet !== undefined &&\r\n selectedParameterSet.id === parameterSetId\r\n ) {\r\n selectedParameterSet.name = newName;\r\n }\r\n\r\n if (\r\n selectedParameterSetLeft !== undefined &&\r\n selectedParameterSetLeft.id === parameterSetId\r\n ) {\r\n selectedParameterSetLeft.name = newName;\r\n }\r\n\r\n if (\r\n selectedParameterSetRight !== undefined &&\r\n selectedParameterSetRight.id === parameterSetId\r\n ) {\r\n selectedParameterSetRight.name = newName;\r\n }\r\n\r\n return {\r\n ...state,\r\n };\r\n }\r\n\r\n case \"deleteParameterSet\": {\r\n const parameterSetId: number = action.data.parameterSetId;\r\n\r\n const updateLeft =\r\n state.zoningPlanDraft.selectedParameterSetLeft !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetLeft.id === parameterSetId;\r\n const updateRight =\r\n state.zoningPlanDraft.selectedParameterSetRight !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSetRight.id === parameterSetId;\r\n\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n parameterSetNames:\r\n state.zoningPlanDraft.parameterSetNames !== undefined\r\n ? state.zoningPlanDraft.parameterSetNames.filter(\r\n (ps) => ps.id !== parameterSetId\r\n )\r\n : undefined,\r\n parameterSetNamesLeft:\r\n state.zoningPlanDraft.parameterSetNamesLeft !== undefined\r\n ? state.zoningPlanDraft.parameterSetNamesLeft.filter(\r\n (ps) => ps.id !== parameterSetId\r\n )\r\n : undefined,\r\n parameterSetNamesRight:\r\n state.zoningPlanDraft.parameterSetNamesRight !== undefined\r\n ? state.zoningPlanDraft.parameterSetNamesRight.filter(\r\n (ps) => ps.id !== parameterSetId\r\n )\r\n : undefined,\r\n selectedParameterSet:\r\n state.zoningPlanDraft.selectedParameterSet !== undefined &&\r\n state.zoningPlanDraft.selectedParameterSet.id === parameterSetId\r\n ? undefined\r\n : state.zoningPlanDraft.selectedParameterSet,\r\n selectedParameterSetLeft: updateLeft\r\n ? undefined\r\n : state.zoningPlanDraft.selectedParameterSetLeft,\r\n selectedParameterSetRight: updateRight\r\n ? undefined\r\n : state.zoningPlanDraft.selectedParameterSetRight,\r\n calculationStateLeft: updateLeft\r\n ? undefined\r\n : state.zoningPlanDraft.calculationStateLeft,\r\n calculationStateRight: updateRight\r\n ? undefined\r\n : state.zoningPlanDraft.calculationStateRight,\r\n },\r\n };\r\n }\r\n\r\n case \"addParameterSet\":\r\n const addedParameterSet: ParameterSetDto = action.data.parameterSet;\r\n\r\n let newParameterSetNames: ParameterSetNameDto[] | undefined = undefined;\r\n if (\r\n state.zoningPlanDraft.selectedScenario !== undefined &&\r\n state.zoningPlanDraft.parameterSetNames !== undefined &&\r\n state.zoningPlanDraft.selectedScenario.id ===\r\n addedParameterSet.scenarioId\r\n ) {\r\n newParameterSetNames = [\r\n ...state.zoningPlanDraft.parameterSetNames,\r\n { id: addedParameterSet.id, name: addedParameterSet.name },\r\n ];\r\n } else {\r\n newParameterSetNames = state.zoningPlanDraft.parameterSetNames;\r\n }\r\n\r\n let newParameterSetNamesLeft: ParameterSetNameDto[] | undefined =\r\n undefined;\r\n if (\r\n state.zoningPlanDraft.selectedScenarioLeft !== undefined &&\r\n state.zoningPlanDraft.parameterSetNamesLeft !== undefined &&\r\n state.zoningPlanDraft.selectedScenarioLeft.id ===\r\n addedParameterSet.scenarioId\r\n ) {\r\n newParameterSetNamesLeft = [\r\n ...state.zoningPlanDraft.parameterSetNamesLeft,\r\n { id: addedParameterSet.id, name: addedParameterSet.name },\r\n ];\r\n } else {\r\n newParameterSetNamesLeft = state.zoningPlanDraft.parameterSetNamesLeft;\r\n }\r\n\r\n let newParameterSetNamesRight: ParameterSetNameDto[] | undefined =\r\n undefined;\r\n if (\r\n state.zoningPlanDraft.selectedScenarioRight !== undefined &&\r\n state.zoningPlanDraft.parameterSetNamesRight !== undefined &&\r\n state.zoningPlanDraft.selectedScenarioRight.id ===\r\n addedParameterSet.scenarioId\r\n ) {\r\n newParameterSetNamesRight = [\r\n ...state.zoningPlanDraft.parameterSetNamesRight,\r\n { id: addedParameterSet.id, name: addedParameterSet.name },\r\n ];\r\n } else {\r\n newParameterSetNamesRight =\r\n state.zoningPlanDraft.parameterSetNamesRight;\r\n }\r\n\r\n return {\r\n ...state,\r\n zoningPlanDraft: {\r\n ...state.zoningPlanDraft,\r\n selectedParameterSet: addedParameterSet,\r\n parameterSetNames: newParameterSetNames,\r\n parameterSetNamesLeft: newParameterSetNamesLeft,\r\n parameterSetNamesRight: newParameterSetNamesRight,\r\n },\r\n };\r\n\r\n case \"signIn\":\r\n return {\r\n ...state,\r\n user: {\r\n user: action.data.user,\r\n accessibleMunicipalities: undefined,\r\n },\r\n };\r\n\r\n case \"setAccessibleMunicipalities\":\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n accessibleMunicipalities: action.data.municipalities,\r\n },\r\n };\r\n\r\n case \"signOut\":\r\n return initialState;\r\n\r\n default:\r\n throw Error();\r\n }\r\n}\r\n\r\nfunction App(): ReactElement {\r\n const [state, dispatch] = useReducer(reducer, initialState);\r\n\r\n useEffect(() => {\r\n async function authenticate() {\r\n try {\r\n const response = await fetch(\r\n `${process.env.REACT_APP_API_BASE_URL}/users/authenticate`,\r\n {\r\n method: \"GET\",\r\n credentials: \"include\",\r\n }\r\n );\r\n\r\n if (response.ok) {\r\n const user = await response.json();\r\n dispatch({ type: \"signIn\", data: { user: user } });\r\n }\r\n } catch (error) {\r\n dispatch({ type: \"signOut\" });\r\n }\r\n }\r\n\r\n authenticate();\r\n }, []);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n >\r\n );\r\n}\r\n\r\nexport default App;\r\n","// see https://create-react-app.dev/docs/measuring-performance/\n\nconst reportWebVitals = (onPerfEntry) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import(\"web-vitals\").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { createRoot } from \"react-dom/client\";\nimport \"index.css\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport App from \"App\";\nimport reportWebVitals from \"reportWebVitals\";\n\nconst container = document.getElementById(\"root\");\nconst root = createRoot(container!);\nroot.render(\n //\n \n \n \n // \n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"names":["canUseDOM","window","document","createElement","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","addEventListener","attachEvent","canUseViewport","screen","define","b","a","autoBom","console","warn","test","type","Blob","c","d","XMLHttpRequest","open","responseType","onload","g","response","onerror","error","send","status","e","dispatchEvent","MouseEvent","createEvent","initMouseEvent","f","self","global","navigator","userAgent","saveAs","HTMLAnchorElement","prototype","h","i","URL","webkitURL","j","name","download","rel","href","origin","location","target","createObjectURL","setTimeout","revokeObjectURL","msSaveOrOpenBlob","title","body","innerText","HTMLElement","safari","FileReader","k","onloadend","result","replace","readAsDataURL","l","m","module","exports","reactIs","require","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","length","caller","callee","arguments","arity","MEMO_STATICS","compare","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","defineProperty","Object","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyDescriptor","getPrototypeOf","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","keys","concat","targetStatics","sourceStatics","key","descriptor","hookCallback","some","hooks","apply","setHookCallback","callback","isArray","input","Array","toString","call","isObject","hasOwnProp","hasOwnProperty","isObjectEmpty","obj","isUndefined","isNumber","isDate","Date","map","arr","fn","res","arrLen","push","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","t","this","len","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","Moment","config","updateOffset","isMoment","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","args","argLen","slice","join","Error","stack","deprecations","deprecateSimple","isFunction","Function","set","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","source","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","calendar","mom","now","output","_calendar","zeroFill","number","targetLength","forceSign","absNumber","Math","abs","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","localeData","removeFormattingTokens","match","makeFormatFunction","array","formatMoment","expandFormat","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","_longDateFormat","formatUpper","toUpperCase","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","future","past","s","ss","mm","hh","dd","w","ww","M","MM","y","yy","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","u","sort","isLeapYear","year","absFloor","ceil","floor","toInt","argumentForCoercion","coercedNumber","value","isFinite","makeGetSet","keepTime","set$1","get","month","date","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","_a","indexOf","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","mod","n","x","modMonth","o","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","defaultLocaleMonths","split","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","isFormat","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","min","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","parseInt","getSetYear","getIsLeapYear","createDate","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","charAt","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","isLower","globalLocale","baseConfig","dayOfMonthOrdinalParse","meridiemParse","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","next","loadLocale","isLocaleNameSane","oldLocale","_abbr","aliasedRequire","getSetGlobalLocale","values","data","getLocale","defineLocale","abbr","parentLocale","forEach","updateLocale","tmpLocale","listLocales","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","exec","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","temp","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","hour","isPm","meridiemHour","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","parts","matches","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","tmp","isAdding","invalid","isString","String","isMomentInput","isNumberOrStringArray","isMomentInputObject","property","objectTest","propertyTest","properties","propertyLen","arrayTest","dataTypeTest","filter","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","toISOString","keepOffset","toDate","inspect","prefix","datetime","suffix","zone","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","localeEras","eras","_eras","since","until","localeErasParse","eraName","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","eraYearOrdinalParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","Symbol","for","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","firstDayOfWeek","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","argWithSuffix","argThresholds","withSuffix","th","assign","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","toFixed","proto$2","toIsoString","version","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","propFullName","secret","err","getShim","isRequired","ReactPropTypes","bigint","bool","object","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","aa","ca","p","encodeURIComponent","da","Set","ea","fa","ha","ia","ja","ka","la","ma","v","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","z","ra","sa","ta","pa","qa","oa","removeAttribute","setAttribute","setAttributeNS","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","iterator","Ka","La","A","Ma","trim","Na","Oa","prepareStackTrace","Reflect","construct","includes","Pa","tag","Qa","$$typeof","_context","_payload","_init","Ra","Sa","Ta","nodeName","Va","_valueTracker","constructor","configurable","enumerable","getValue","setValue","stopTracking","Ua","Wa","checked","Xa","activeElement","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","ownerDocument","eb","fb","options","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","children","hb","ib","jb","textContent","kb","lb","mb","nb","namespaceURI","innerHTML","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","ob","lastChild","nodeType","nodeValue","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","qb","rb","sb","style","setProperty","substring","tb","menuitem","area","br","col","embed","hr","img","keygen","link","meta","param","track","wbr","ub","vb","is","wb","xb","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","removeEventListener","Nb","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","Wb","memoizedState","dehydrated","Xb","Zb","child","sibling","current","Yb","$b","ac","unstable_scheduleCallback","bc","unstable_cancelCallback","cc","unstable_shouldYield","dc","unstable_requestPaint","B","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","clz32","pc","qc","log","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","xc","yc","zc","Ac","eventTimes","Cc","C","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Map","Pc","Qc","Rc","Sc","delete","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","isDehydrated","containerInfo","Xc","Yc","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","ed","transition","fd","gd","hd","id","Uc","stopPropagation","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","fromCharCode","code","repeat","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","email","password","range","search","tel","text","url","me","ne","oe","event","listeners","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","De","Ee","Fe","He","Ie","Je","Ke","nextSibling","Le","contains","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","Ne","contentEditable","Oe","focusedElem","selectionRange","documentElement","start","end","selectionStart","selectionEnd","defaultView","getSelection","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","left","scrollLeft","top","scrollTop","focus","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","animation","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","nf","Ub","instance","listener","D","of","has","pf","qf","rf","random","sf","bind","capture","passive","J","F","tf","uf","parentWindow","vf","wf","na","xa","$a","ba","je","char","ke","unshift","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","Gf","clearTimeout","Hf","Promise","Jf","queueMicrotask","resolve","then","catch","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","G","Vf","H","Wf","Xf","Yf","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","deletions","Cg","pendingProps","treeContext","retryLane","Dg","mode","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","_currentValue","Sg","childLanes","Tg","dependencies","firstContext","lanes","Ug","Vg","context","memoizedValue","Wg","Xg","Yg","interleaved","Zg","$g","ah","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","bh","ch","eventTime","lane","payload","dh","K","eh","fh","gh","q","r","ih","jh","Component","refs","kh","nh","isMounted","_reactInternals","enqueueSetState","lh","mh","enqueueReplaceState","enqueueForceUpdate","oh","shouldComponentUpdate","isPureReactComponent","ph","state","updater","qh","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","rh","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","sh","ref","_owner","_stringRef","uh","vh","wh","xh","yh","implementation","zh","Ah","done","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","tagName","Jh","Kh","Lh","Mh","revealOrder","Nh","Oh","_workInProgressVersionPrimary","Ph","ReactCurrentDispatcher","Qh","Rh","N","O","P","Sh","Th","Uh","Vh","Q","Wh","Xh","Yh","Zh","$h","ai","bi","ci","baseQueue","queue","di","ei","fi","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","dispatch","gi","hi","ji","ki","getSnapshot","li","mi","R","ni","lastEffect","stores","oi","pi","qi","ri","create","destroy","deps","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ki","message","digest","Li","Mi","Ni","WeakMap","Oi","Pi","Qi","Ri","componentDidCatch","Si","componentStack","Ti","pingCache","Ui","Vi","Wi","Xi","ReactCurrentOwner","Yi","Zi","$i","aj","bj","cj","dj","ej","baseLanes","cachePool","transitions","fj","gj","hj","ij","jj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","kj","lj","pendingContext","mj","Aj","Cj","Dj","nj","oj","pj","fallback","qj","rj","tj","dataset","dgst","uj","vj","_reactRetry","sj","subtreeFlags","wj","xj","isBackwards","rendering","renderingStartTime","last","tail","tailMode","yj","Ej","S","Fj","Gj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","size","createElementNS","autoFocus","createTextNode","T","Hj","Ij","Jj","Kj","U","Lj","WeakSet","V","Mj","Nj","Oj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","insertBefore","_reactRootContainer","Xj","X","Yj","Zj","ak","onCommitFiberUnmount","componentWillUnmount","bk","ck","dk","ek","fk","isHidden","gk","hk","display","ik","jk","kk","lk","__reactInternalSnapshotBeforeUpdate","src","Wk","mk","nk","ok","pk","Y","Z","qk","rk","sk","tk","uk","Infinity","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","finishedWork","finishedLanes","Qk","timeoutHandle","Rk","Sk","Tk","Uk","Vk","mutableReadLanes","Bc","Pj","onCommitFiberRoot","mc","onRecoverableError","Xk","onPostCommitFiberRoot","Yk","Zk","al","isReactComponent","pendingChildren","bl","mutableSourceEagerHydrationData","cl","cache","pendingSuspenseBoundaries","dl","el","fl","gl","hl","il","jl","zj","$k","ll","reportError","ml","_internalRoot","nl","ol","pl","ql","sl","rl","unmount","unstable_scheduleHydration","splice","querySelectorAll","JSON","stringify","form","tl","usingClientEntryPoint","Events","ul","findFiberByHostInstance","bundleType","rendererPackageName","vl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","wl","isDisabled","supportsFiber","inject","createPortal","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","isarray","pathToRegexp","parse","compile","str","tokensToFunction","tokensToRegExp","PATH_REGEXP","path","defaultDelimiter","delimiter","escaped","group","modifier","asterisk","partial","optional","pattern","escapeGroup","escapeString","encodeURIComponentPretty","encodeURI","charCodeAt","opts","encode","pretty","segment","TypeError","attachKeys","sensitive","route","endsWithDelimiter","groups","regexpToRegexp","arrayToRegexp","stringToRegexp","__self","__source","jsx","jsxs","setState","forceUpdate","escape","_status","_result","default","Children","count","only","PureComponent","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","pop","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","delay","unstable_wrapCallback","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","__esModule","definition","chunkId","all","reduce","promises","miniCssF","globalThis","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","getAttribute","charset","timeout","nc","onScriptComplete","prev","doneFns","head","toStringTag","nmd","paths","installedChunks","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","_setPrototypeOf","setPrototypeOf","__proto__","_inheritsLoose","subClass","superClass","isAbsolute","pathname","spliceOne","list","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","up","part","valueEqual","every","aValue","bValue","invariant","condition","addLeadingSlash","stripLeadingSlash","stripBasename","hasBasename","stripTrailingSlash","createPath","hash","createLocation","currentLocation","hashIndex","searchIndex","parsePath","_extends","decodeURI","URIError","resolvePathname","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","appendListener","isActive","notifyListeners","_len","_key","getConfirmation","confirm","PopStateEvent","HashChangeEvent","getHistoryState","history","createBrowserHistory","globalHistory","canUseHistory","supportsHistory","needsHashChangeListener","_props","_props$forceRefresh","forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","basename","getDOMLocation","historyState","_ref","_window$location","createKey","transitionManager","nextState","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","fromLocation","toLocation","toIndex","allKeys","fromIndex","delta","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","isBlocked","pushState","prevIndex","nextKeys","replaceState","goBack","goForward","block","unblock","listen","unlisten","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","decodePath","noslash","slash","stripHash","getHashPath","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","encodedPath","prevLocation","allPaths","lastIndexOf","baseTag","querySelector","pushHashPath","nextPaths","clamp","lowerBound","upperBound","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","entries","entry","nextIndex","nextEntries","canGo","MAX_SIGNED_31_BIT_INT","commonjsGlobal","createEventEmitter","handlers","on","handler","off","newValue","changedBits","React","calculateChangedBits","_Provider$childContex","_Consumer$contextType","contextProp","getUniqueId","_Component","_this","emitter","_proto","nextProps","oldValue","_Component2","_this2","onUpdate","observedBits","_proto2","excluded","sourceKeys","createNamedContext","historyContext","Router","_isMounted","_pendingLocation","staticContext","computeRootMatch","params","isExact","RouterContext","HistoryContext","Lifecycle","onMount","prevProps","onUnmount","cacheCount","generatePath","generator","compilePath","Redirect","computedMatch","method","matchPath","cacheKey","pathCache","regexp","Route","isEmptyChildren","createURL","staticHandler","methodName","noop","Switch","useHistory","useLocation","BrowserRouter","createHistory","resolveToLocation","normalizeToLocation","forwardRefShim","LinkAnchor","forwardedRef","innerRef","navigate","rest","ex","isModifiedEvent","Link","isDuplicateNavigation","ariaCurrent","activeClassName","activeStyle","classNameProp","className","isActiveProp","locationProp","styleProp","escapedPath","classnames","joinClassnames","_typeof","_regeneratorRuntime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","writable","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isGeneratorFunction","genFun","ctor","mark","awrap","async","iter","reverse","skipTempReset","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_arrayLikeToArray","_unsupportedIterableToArray","minLen","_slicedToArray","_s","_e","_arr","_n","_toConsumableArray","_defineProperty","ownKeys","enumerableOnly","symbols","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","MUNICIPALITY_STORAGE_KEY","LINKS","Input","placeholder","onChange","maxLength","SubmitButton","Login","userName","setUserName","setPassword","errorMsg","setErrorMsg","fetch","process","headers","Accept","credentials","json","user","selectedMunicipality","onSubmit","Button","Select","header","visible","selectedValue","setSelectedValue","optionElements","enabled","displayValue","_classCallCheck","Constructor","_defineProperties","_createClass","protoProps","staticProps","METRIC_KEY","wPersHw","wPersHwBest","popInc","popDec","popTh","populationVariation","populationTemporary","populationPending","populationRelevant","populationPotCovered","populationPotTotalCovered","populationPotUncovered","populationCapacityCovered","populationCapacityUncovered","populationCapacity","populationCorrection","wohnflEinw","wohnflBest","wohnflImbBew","areaRealizedCovered","areaPotCovered","areaPotUncovered","fBebaut","fUnbebaut","fTotal","wohnWnart3010Best","wohnWnart3010Best0E","wohnWnart3010ImbBew","wohnWnart3020Best","wohnWnart3020ImbBew","wohnWnart3030Best","wohnWnart3030ImbBew","wohnWnart3031Best","wohnWnart3031ImbBew","wohnWnart3032Best","wohnWnart3032ImbBew","wohnWnart3033Best","wohnWnart3033ImbBew","wohnWnart3034Best","wohnWnart3034ImbBew","wohnWnart3035Best","wohnWnart3035ImbBew","wohnWnart3036Best","wohnWnart3036ImbBew","wohnWnart3037Best","wohnWnart3037ImbBew","wohnWnart3038Best","wohnWnart3038ImbBew","wohnWnart3070Best","wohnWnart3070ImbBew","wohnWnartNullBest","wohnWnartNullImbBew","wohnant","az","uez","varUezFinal","avgBuildingHeight","avgBuildingHeightFinal","fahoeMax","geshoe","varHabitationRatioFinal","lBuildingAreaDemandActual","mBuildingAreaDemandExpected","bPopulationCapacityTotal","populationKgwrFinal","cPopulationGrowth","ePopulationGrowthAnnual","qPopulationFuture","rPopulationNewZonesDemand","pVarFactorRp","dPopulationGrowthPercent","fPopulationGrowthAnnualPercent","oBuildingAreaDemandComparison","aPopulationActual","populationHist","compensation","MetricValueContext","metricKey","level","bfsNr","bfsNr1999","zonTypGde","zonTypPbg","Metrics","metrics","metricRecord","createMetricRecord","metric","MetricValue","getHash","MetricValues","sourceValues","valueRecord","metricValueDto","getMetric","zonTypKt","newN","aggregationType","updateOrAddValue","levelFilter","getAllValues","metricValue","addValue","PARAMETER_KEY","ParameterValueContext","parameterKey","Parameters","parameters","parameterRecord","createParameterRecord","parameter","ParameterValue","displayDefaultValue","ParameterValues","parameterValues","createParameterValueRecord","parameterValue","parameterValueDtos","parameterValueRecord","parameterValueDto","Overlay","show","SelectMunicipality","setError","loading","setLoading","municipalities","metricsResponse","parametersResponse","municipalitiesResponse","loadMetaData","accessibleMunicipalities","loadAccessibleMunicipalities","bfsNrString","sessionStorage","getItem","find","municipality","gemeinde","setItem","onMunicipalityChange","Help","ExternalLink","xmlns","fill","viewBox","stroke","strokeLinecap","strokeLinejoin","UndevelopedBuildingZones","template","setSendingStatus","formData","URLSearchParams","append","setMessage","sendingStatus","_createForOfIteratorHelper","allowArrayLike","it","normalCompletion","didErr","step","_e2","calculationState","scenario","rows","districts","district","zonesGde","zoneGde","metadata","nameZonTypGde","metricValues","blob","timestamp","moment","zonTypPbgSet","namesZonTypPbg","nameZonTypPbg","zonTypPbgs","pdfReport","gdeKatCode","parameterSetModifiedAt","parameterSetModifiedAtFormatted","scenarioName","createdAt","highestDichteKat","dichteKatToDistrict","dichteKat","finalDistrict","scenario_date","scenario_name","scenario_legal","bfs_nr","gdekat_code","population_hist","Q_population_future","A_population_actual","B_population_capacity_total","C_population_growth","D_population_growth_percent","building_area_demand","district_name","gem1999","M_building_area_demand_expected","L_building_area_demand_acutal","O_building_area_demand_comparison","P_var_factor_rp","R_population_new_zones_demand","E_population_growth_annual","F_population_growth_annual_percent","population_pot_covered","population_relevant","summary_table_bz","zone_pbg_name","zone_pbg","fl_bebaut","population_capacity_covered","fl_unbebaut","population_capacity_uncovered","population_capacity","summary_table_nbz","population_variation","population_correction","population_temporary","population_pending","population_kgwr_final","param_year_previous_rp","param_relevant_year_population","param_observ_period","results","click","exportParametersCsv","parameterSetName","getAllParameters","dimensionsValue","ParameterInput","parameterDefaultValue","required","ParameterSelect","selectedOptionValue","setSelectedOptionValue","option","valueMatches","displayValueMatch","getParameterDefaultValue","zoneTypKt","dimensionsDefaultValue","defaultValues","ParametersTable","readonlyParameterSet","selectedTab","setSelectedTab","tabs","metricValueTables","manageLevel","metricValueTable","getParameter","tableRows","DownloadButton","label","alt","NoData","fillRule","clipRule","StatusBar","showStatusBar","setShowStatusBar","hasPendingChanges","setHasPendingChanges","setParameterValues","saveSelectedParameterSet","zoningPlanLegal","parameterSet","modifiedAt","hasData","readonly","createParameterValueDtos","isAdmin","getWindow","isHTMLElement","isShadowRoot","ShadowRoot","getBoundingClientRect","includeScale","rect","scaleX","scaleY","offsetHeight","offsetWidth","right","bottom","getWindowScroll","win","pageXOffset","pageYOffset","getNodeName","getDocumentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","clientRect","offsetLeft","offsetTop","getParentNode","assignedSlot","host","getScrollParent","listScrollParents","_element$ownerDocumen","scrollParent","isBody","visualViewport","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","auto","basePlacements","viewport","popper","variationPlacements","acc","placement","placements","modifierPhases","modifiers","visited","requires","requiresIfExists","dep","depModifier","debounce","DEFAULT_OPTIONS","strategy","areValidElements","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","orderedModifiers","modifiersData","elements","attributes","styles","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","_ref3","_ref3$options","effect","cleanupFn","noopFn","update","_state$elements","rects","_state$orderedModifie","_state$orderedModifie2","_options","onFirstUpdate","_options$scroll","_options$resize","resize","getBasePlacement","getVariation","getMainAxisFromPlacement","computeOffsets","basePlacement","variation","commonX","commonY","mainAxis","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","dpr","devicePixelRatio","roundOffsetsByDPR","_ref3$x","_ref3$y","hasX","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","initialStyles","margin","arrow","attribute","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","getOppositePlacement","getOppositeVariationPlacement","parent","rootNode","getRootNode","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","html","clientWidth","clientHeight","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","axis","within","mathMax","mathMin","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","mainSide","altSide","additive","maxLen","arrowElement","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_mainSide","_altSide","_min","_max","_preventedOffset","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","createPopper","eventListeners","_ref4","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","applyStyles","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","check","_loop","fittingPlacement","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","CONTENT_CLASS","BACKDROP_CLASS","ARROW_CLASS","SVG_ARROW_CLASS","TOUCH_OPTIONS","getValueAtIndexOrReturn","isType","invokeWithArgsOrReturn","normalizeToArray","pushIfUnique","arrayFrom","div","isMouseEvent","isReferenceElement","_tippy","getArrayOfElements","isNodeList","setTransitionDuration","els","transitionDuration","setVisibilityState","getOwnerDocument","elementOrElements","updateTransitionEndListener","box","currentInput","isTouch","lastMouseMoveTime","onDocumentTouchStart","onDocumentMouseMove","onWindowBlur","blur","isVisible","isIE","pluginProps","animateFill","followCursor","inlinePositioning","sticky","appendTo","aria","content","expanded","getReferenceClientRect","hideOnClick","ignoreAttributes","interactive","interactiveBorder","interactiveDebounce","moveTransition","onAfterUpdate","onBeforeUpdate","onCreate","onDestroy","onHidden","onHide","onShow","onShown","onTrigger","onUntrigger","onClickOutside","plugins","popperOptions","showOnCreate","touch","trigger","triggerTarget","allowHTML","inertia","maxWidth","role","theme","defaultKeys","getExtendedPassedProps","passedProps","plugin","evaluateProps","valueAsString","getDataAttributeProps","createArrowElement","setContent","getChildren","firstElementChild","boxChildren","classList","backdrop","$$tippy","idCounter","mouseMoveListeners","mountedInstances","createTippy","showTimeout","hideTimeout","scheduleHideAnimationFrame","lastTriggerEvent","currentTransitionEndListener","isVisibleFromClick","didHideDueToDocumentMouseDown","didTouchMove","ignoreOnFirstUpdate","debouncedOnMouseMove","onMouseMove","popperInstance","isEnabled","isShown","clearDelayTimeouts","cancelAnimationFrame","setProps","partialProps","invokeHook","removeListeners","addListeners","cleanupInteractiveMouseListeners","handleAriaExpandedAttribute","handleStyles","createPopperInstance","getNestedPopperTree","nestedPopper","requestAnimationFrame","isAlreadyVisible","isTouchAndTouchDisabled","getCurrentTarget","hasAttribute","getIsDefaultRenderFn","visibility","addDocumentPress","getDefaultTemplateChildren","handleAriaContentAttribute","onTransitionEnd","onTransitionedIn","mount","hide","isAlreadyHidden","removeDocumentPress","onTransitionedOut","hideWithInteractivity","getDocument","enable","disable","destroyPopperInstance","pluginsHooks","hasAriaExpanded","scheduleShow","getNormalizedTouchSettings","getIsCustomTouchBehavior","_instance$props$rende","getDelay","isShow","pointerEvents","hook","shouldInvokePropsHook","pluginHooks","attr","currentValue","nextValue","onDocumentPress","onTouchMove","onTouchStart","doc","eventType","onMouseLeave","Boolean","onBlurOrFocusOut","shouldScheduleClickHide","isEventListenerStopped","wasFocused","scheduleHide","isCursorOverReferenceOrPopper","popperTreeData","_instance$popperInsta","popperState","topDistance","bottomDistance","leftDistance","rightDistance","exceedsTop","exceedsBottom","exceedsLeft","exceedsRight","isCursorOutsideInteractiveBorder","computedReference","tippyModifier","touchValue","touchDelay","tippy","targets","optionalProps","instances","setDefaultProps","isBrowser","preserveRef","ssrSafeCreateDiv","deepEqual","uniqueByShape","outputItem","deepPreserveProps","instanceProps","componentProps","useIsomorphicLayoutEffect","useMutableBox","updateClassName","classNames","classNamePlugin","isDefaultRenderFn","TippyGenerator","singleton","restOfNativeProps","isControlledMode","isSingletonMode","mounted","setMounted","attrs","setAttrs","singletonContent","setSingletonContent","mutableBox","container","renders","computedProps","_","cleanup","hideData","_state$modifiersData","referenceHidden","dataAttrs","toDataAttributes","Tippy","Metric","description","toLocaleString","maximumFractionDigits","SubMetric","CalculationTable","roundDynamic","quotient","roundMultiple","roundDecimal","digits","factor","metricValueLevel","messages","getMetricValue","paramYearlyDecrease","getParameterValue","paramObservPeriod","wpershw","formulas","getMissingInputsMessage","severity","paramAreaPerResident","apartmentInfo","wohnWnartAndParamPair","wohnWnartMetricValue","paramPopulationPerApartmentParameterValue","wohnWnart","paramPopulationPerApartment","paramDensificationRatioCovered","paramUezRatio","paramDevelopRatioCovered","getCalculateWithUezMessage","getCalculateWithAzMessage","getSkipPbgCalculationMessage","paramUez","paramBuildingHeight","paramDevelopRatioUnCovered","paramDevelopRatioUncovered","paramDensificationRatioUncovered","metricValueLevelLocal","paramRelevantYearPopulation","paramBuildingAreaDemand","paramFactorRp","aParamPopulationActual","paramPopulationHist","metricValueContext","parameterValueContext","metricOrParameterKey","getLevelText","levelText","calculate","aggregateZoneGde","metricCalculators","calculators","calculator","aggregate","metricCalculationResultMessages","ReportLinks","gdeCategory","success","exportZonTypGdeCsv","exportZonTypPbgCsv","Calculation","calculateCapacity","NavLink","Navigation","ZoningPlanLegal","loadError","setLoadError","responseScenario","scenarios","responseParameterSet","parameterSets","loadScenario","Upload","CompareMetric","valueLeft","valueRight","CompareSubMetric","zoningPlanDraft","selectedScenarioLeft","selectedScenarioRight","calculationStateLeft","calculationStateRight","selectedParameterSetLeft","selectedParameterSetRight","CalculationHead","scenarioNames","parameterSetNamesLeft","parameterSetNamesRight","loadScenarioIdLeft","setLoadScenarioIdLeft","loadParameterSetIdLeft","setLoadParameterSetIdLeft","loadScenarioIdRight","setLoadScenarioIdRight","loadParameterSetIdRight","setLoadParameterSetIdRight","parameterSetNamesResponse","parameterSetNames","loadParameterSet","scenarioId","load","parameterSetId","ps","metricValuesLeft","parameterValuesLeft","metricValuesRight","parameterValuesRight","ModalSaveAs","initialParameterSetName","setShowModal","saveAction","setParameterSetName","ModalDelete","deleteAction","ModalRename","renameAction","selectedScenario","selectedParameterSet","loadScenarioId","setLoadScenarioId","loadParameterSetId","setLoadParameterSetId","showSaveAsModal","setShowSaveAsModal","showDeleteModal","setShowDeleteModal","showRenameModal","setShowRenameModal","newName","newParameterSetName","copyParameterValuesDtos","userId","active","addedParameterSetDto","saveSelectedParameterSetAs","renameSelectedParameterSet","deleteSelectedParameterSet","ZoningPlanDraft","scenarioNamesResponse","loadScenarioNames","noTextChildNodes","possibleStandardNames","acceptcharset","accesskey","allowfullscreen","autocapitalize","autocomplete","autocorrect","autofocus","autoplay","autosave","cellpadding","cellspacing","class","classid","classname","colspan","contenteditable","contextmenu","controlslist","crossorigin","dangerouslysetinnerhtml","defaultchecked","defaultvalue","enctype","formmethod","formaction","formenctype","formnovalidate","formtarget","frameborder","hreflang","htmlfor","httpequiv","icon","innerhtml","inputmode","itemid","itemprop","itemref","itemscope","itemtype","keyparams","keytype","marginwidth","marginheight","maxlength","mediagroup","minlength","nomodule","novalidate","playsinline","radiogroup","referrerpolicy","rowspan","spellcheck","srcdoc","srclang","srcset","tabindex","typemustmatch","usemap","accentheight","alignmentbaseline","allowreorder","arabicform","attributename","attributetype","autoreverse","basefrequency","baselineshift","baseprofile","calcmode","capheight","clippath","clippathunits","cliprule","colorinterpolation","colorinterpolationfilters","colorprofile","colorrendering","contentscripttype","contentstyletype","diffuseconstant","dominantbaseline","edgemode","enablebackground","externalresourcesrequired","fillopacity","fillrule","filterres","filterunits","floodopacity","floodcolor","fontfamily","fontsize","fontsizeadjust","fontstretch","fontstyle","fontvariant","fontweight","glyphname","glyphorientationhorizontal","glyphorientationvertical","glyphref","gradienttransform","gradientunits","horizadvx","horizoriginx","imagerendering","kernelmatrix","kernelunitlength","keypoints","keysplines","keytimes","lengthadjust","letterspacing","lightingcolor","limitingconeangle","markerend","markerheight","markermid","markerstart","markerunits","markerwidth","maskcontentunits","maskunits","numoctaves","overlineposition","overlinethickness","paintorder","pathlength","patterncontentunits","patterntransform","patternunits","pointerevents","pointsatx","pointsaty","pointsatz","preservealpha","preserveaspectratio","primitiveunits","refx","refy","renderingintent","repeatcount","repeatdur","requiredextensions","requiredfeatures","shaperendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stopcolor","stopopacity","strikethroughposition","strikethroughthickness","strokedasharray","strokedashoffset","strokelinecap","strokelinejoin","strokemiterlimit","strokewidth","strokeopacity","suppresscontenteditablewarning","suppresshydrationwarning","surfacescale","systemlanguage","tablevalues","targetx","targety","textanchor","textdecoration","textlength","textrendering","underlineposition","underlinethickness","unicodebidi","unicoderange","unitsperem","unselectable","valphabetic","vectoreffect","vertadvy","vertoriginx","vertoriginy","vhanging","videographic","viewbox","viewtarget","vmathematical","wordspacing","writingmode","xchannelselector","xheight","xlinkactuate","xlinkarcrole","xlinkhref","xlinkrole","xlinkshow","xlinktitle","xlinktype","xmlbase","xmllang","xmlnsxlink","xmlspace","ychannelselector","zoomandpan","onblur","onchange","oncontextmenu","ondoubleclick","ondrag","ondragend","ondragenter","ondragexit","ondragleave","ondragover","ondragstart","ondrop","onfocus","oninvalid","onkeydown","onkeypress","onkeyup","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onscroll","onsubmit","ontouchcancel","ontouchend","ontouchmove","ontouchstart","onwheel","parseAttributes","reactKey","nodeClassNames","__spreadArray","_$0","$1","Number","convertFromNode","Node","actions","_b","_c","randomKey","characters","randomString","pre","post","childNodeList","__assign","parseChildren","childNodes","nodeText","parentNodeName","convert","nodeOnly","selector","DOMParser","parseFromString","convertFromString","STATUS","FAILED","LOADED","LOADING","PENDING","READY","UNSUPPORTED","canUseDOMFlag","isSupportedEnvironment","supportsInlineSVG","cacheStore","_super","handleError","handleLoad","getElement","cacheRequests","fetchOptions","contentType","fileType","currentSrc","hasCache","uniqueHash","character","letters","__extends","InlineSVG","prevState","onLoad","preProcessor","baseURL","uniquifyIDs","replaceableAttributes","linkAttributes","attributes_1","updateSVGAttributes","processSVG","SVGSVGElement","svg","originalDesc","descElement","prepend","originalTitle","titleElement","getNode","handleCacheQueue","inlineSrc","dataURI","atob","decodeURIComponent","loader","elementProps","removeProperties","Header","removeItem","cantonLogo","Footer","initialState","reducer","updateLegal","updateLeft","updateRight","parameterSetNameLeft","parameterSetNameRight","addedParameterSet","newParameterSetNames","newParameterSetNamesLeft","newParameterSetNamesRight","authenticate","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","getElementById","reportWebVitals"],"sourceRoot":""}