{"version":3,"file":"static/chunks/147-e79d046b2eb510c0.js","mappings":"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","sources":["webpack://_N_E/./src/components/common/ContentLoader.tsx","webpack://_N_E/./src/components/common/ErrorMessage.tsx","webpack://_N_E/./src/components/common/GraphQLError.tsx","webpack://_N_E/./src/components/general/RangeSelector.tsx","webpack://_N_E/./src/components/general/GoalSelector.tsx","webpack://_N_E/./src/queries/getScenarios.js","webpack://_N_E/./src/components/general/ScenarioSelector.tsx","webpack://_N_E/./src/queries/getParameters.js","webpack://_N_E/./src/components/general/NormalizationWidget.tsx","webpack://_N_E/./src/components/general/GoalOutcomeBar.tsx","webpack://_N_E/./src/components/general/GlobalParameters.tsx","webpack://_N_E/./src/components/general/ActionsSummary.tsx","webpack://_N_E/./src/components/general/CompleteSettings.tsx","webpack://_N_E/./src/components/general/MediumSettings.tsx","webpack://_N_E/./src/components/general/SettingsPanelFull.tsx","webpack://_N_E/./src/common/colors.ts","webpack://_N_E/./src/data/metric.ts","webpack://_N_E/./src/queries/getActionList.js"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Spinner } from 'reactstrap';\nimport { useTranslation } from 'next-i18next';\nconst Loader = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\nconst StyledSpinner = styled(Spinner)`\n width: ${props => props.theme.spaces.s100};\n height: ${props => props.theme.spaces.s100};\n background-color: ${props => props.theme.themeColors.dark};\n`;\ninterface ContentLoaderProps {\n fullPage?: boolean;\n}\nconst ContentLoader = ({\n fullPage = false\n}: ContentLoaderProps) => {\n const {\n t\n } = useTranslation();\n const [displayMessage, setDisplayMessage] = useState(false);\n useEffect(() => {\n const timer = setTimeout(() => setDisplayMessage(true), 250);\n return () => clearTimeout(timer);\n }, []);\n if (!displayMessage) {\n return null;\n }\n return \n \n \n \n
{t('loading')}
\n
;\n};\nexport default ContentLoader;","import { Container } from 'reactstrap';\nexport default function ErrorMessage({\n message\n}) {\n return \n

{message}

\n
;\n}","import { ApolloError } from '@apollo/client';\nimport * as Sentry from '@sentry/nextjs';\nimport { useTranslation } from 'next-i18next';\nimport { Alert, Button, Card, CardBody, UncontrolledCollapse } from 'reactstrap';\nimport { deploymentType } from '@/common/environment';\ntype GraphQLErrorProps = {\n error: ApolloError;\n};\nconst GraphQLError = (props: GraphQLErrorProps) => {\n const {\n error\n } = props;\n const {\n t\n } = useTranslation();\n const isProd = deploymentType === 'production';\n let errorDetailMsg: string | null = null;\n Sentry.captureException(error);\n if (error.networkError) {\n errorDetailMsg = `${t('errors:network-error')}: ${error.networkError.toString()}`;\n }\n return \n

{t('error-loading-data')}

\n {errorDetailMsg}\n {!isProd && error.graphQLErrors?.length ? <>\n \n \n \n \n \n {error.graphQLErrors.map((err, idx) =>
\n                      

\n \n {err?.message}\n \n
\n \n {(err.locations ?? []).map(loc => `column: ${loc.column}, line: ${loc.line}`)}\n \n
\n [{(err.path ?? []).map(pth => `${pth}, `)}]\n

\n
)}\n
\n
\n
\n
\n : null}\n
;\n};\nexport default GraphQLError;","import { useState, useEffect } from 'react';\nimport { Range, getTrackBackground } from 'react-range';\nimport { ButtonToggle } from 'reactstrap';\nimport Icon from 'components/common/icon';\nimport styled, { useTheme } from 'styled-components';\nimport { useTranslation } from 'next-i18next';\nconst SectionWrapper = styled.div`\n display: flex;\n min-width: 320px;\n padding: 0.75rem 0;\n`;\nconst RangeWrapper = styled.div`\n display: flex;\n flex: 0 1 150px;\n margin: 0 0.5rem;\n`;\nconst YearDescription = styled.div`\n font-size: 0.75rem;\n line-height: 1;\n`;\nconst ActiveYear = styled.div`\n font-size: 1rem;\n font-weight: 700;\n line-height: 1;\n`;\nconst ActiveYearDisplay = styled.div`\n flex: 0 1 100px;\n margin: 0;\n padding: 0.25rem 0 0.25rem;\n text-align: center;\n\n .btn {\n color: ${props => props.theme.graphColors.grey050};\n }\n`;\ntype ThumbProps = {\n $dragged: boolean;\n color: string;\n};\nconst Thumb = styled.div`\n height: 28px;\n width: 28px;\n border-radius: 14px;\n background-color: ${props => props.$dragged ? props.color : props.color};\n display: flex;\n justify-content: center;\n align-items: center;\n\n &:focus {\n box-shadow: 0 0 0 0.25rem ${props => props.theme.inputBtnFocusColor};\n }\n`;\nconst StyledButtonToggle = styled(ButtonToggle)`\n &:focus {\n box-shadow: 0 0 0 0.25rem ${props => props.theme.inputBtnFocusColor};\n }\n`;\ntype RangeSelectorProps = {\n min: number;\n max: number;\n referenceYear: number | null;\n handleChange: (range: number[]) => void;\n defaultMin: number;\n defaultMax: number;\n};\nconst RangeSelector = (props: RangeSelectorProps) => {\n const {\n min,\n max,\n referenceYear,\n handleChange,\n defaultMin,\n defaultMax\n } = props;\n const {\n t\n } = useTranslation();\n const theme = useTheme();\n const [referenceYearActive, setReferenceYearActive] = useState(referenceYear !== null ? referenceYear === defaultMin : false);\n const [values, setValues] = useState(referenceYearActive ? [defaultMax] : [defaultMin, defaultMax]);\n useEffect(() => {\n handleChange([defaultMin, defaultMax]);\n }, [defaultMin, defaultMax]);\n const handleSliderChange = (changedValues: number[]) => {\n setValues(changedValues);\n const newRange = referenceYearActive ? [referenceYear!, changedValues[0]] : [changedValues[0], changedValues[1]];\n handleChange(newRange);\n };\n const handleReferenceYear = (referenceYearIsActive: boolean) => {\n if (referenceYearIsActive) {\n setReferenceYearActive(true);\n setValues([values[1]]);\n handleChange([referenceYear!, values[1]]);\n } else {\n setReferenceYearActive(false);\n setValues([min, values[0]]);\n handleChange([min, values[0]]);\n }\n };\n return \n \n {t('comparison-year')}\n \n {referenceYearActive ? referenceYear : values[0]}\n \n {referenceYear && handleReferenceYear(!referenceYearActive)}>\n {referenceYearActive ? \n \n {` ${t('edit')}`}\n : \n {referenceYear}\n }\n }\n \n {referenceYearActive ? \n handleSliderChange(values)} renderTrack={({\n props,\n children\n }) =>
\n
\n {children}\n
\n
} renderThumb={({\n props,\n isDragged,\n index\n }) => \n \n } />\n
: \n handleSliderChange(values)} renderTrack={({\n props,\n children\n }) =>
\n
\n {children}\n
\n
} renderThumb={({\n props,\n isDragged,\n index\n }) => \n {index === 0 ? : }\n } />\n
}\n \n {t('target-year')}\n {referenceYearActive ? values[0] : values[1]}\n \n
;\n};\nexport default RangeSelector;","import { useCallback, useState } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { useReactiveVar } from '@apollo/client';\nimport styled from 'styled-components';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';\nimport { InstanceGoal, useInstance } from 'common/instance';\nimport { activeGoalVar } from 'common/cache';\nconst StyledDropdown = styled(Dropdown)`\n //min-width: 200px;\n\n .btn {\n width: 100%;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n font-size: 0.9rem;\n padding: ${({\n theme\n}) => theme.spaces.s050};\n\n &:focus {\n box-shadow: 0 0 0 0.25rem ${props => props.theme.inputBtnFocusColor};\n }\n }\n`;\nconst StyledDropdownLabel = styled.span`\n display: block;\n position: relative;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n`;\nconst StyledSublabel = styled.span`\n display: block;\n font-style: italic;\n font-size: ${({\n theme\n}) => theme.fontSizeSm};\n line-height: ${({\n theme\n}) => theme.lineHeightSm};\n`;\nconst DropdownLabel = styled.div`\n font-size: 0.8rem;\n`;\nconst GoalSelector = () => {\n const {\n t\n } = useTranslation();\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const toggle = () => setDropdownOpen(prevState => !prevState);\n const instance = useInstance();\n const activeGoal = useReactiveVar(activeGoalVar);\n const selectGoal = useCallback((goal: InstanceGoal) => {\n activeGoalVar(goal);\n }, []);\n return \n {t('target')}\n \n {activeGoal?.label}\n \n \n {t('change-target')}\n {instance.goals.map(goal => selectGoal(goal)}>\n {goal.label}\n {goal.disabled && {t('coming-soon')}}\n )}\n \n ;\n};\nexport default GoalSelector;","import { gql } from '@apollo/client';\n\nconst GET_SCENARIOS = gql`\n query GetScenarios {\n scenarios {\n id\n name\n isActive\n isDefault\n isSelectable\n }\n }\n`;\n\nexport { GET_SCENARIOS };\n","import { useState } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { gql, useQuery, useMutation } from '@apollo/client';\nimport styled from 'styled-components';\nimport { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Spinner } from 'reactstrap';\nimport { activeScenarioVar } from 'common/cache';\nimport { useInstance } from 'common/instance';\nimport { GET_SCENARIOS } from 'queries/getScenarios';\nimport type { ActivateScenarioMutation, ActivateScenarioMutationVariables, GetScenariosQuery } from 'common/__generated__/graphql';\nconst ACTIVATE_SCENARIO = gql`\n mutation ActivateScenario($scenarioId: ID!) {\n activateScenario(id: $scenarioId) {\n ok\n activeScenario {\n id\n name\n }\n }\n }\n`;\nconst StyledDropdown = styled(Dropdown)`\n max-width: 320px;\n\n .btn {\n width: 100%;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n font-size: 0.9rem;\n padding: ${({\n theme\n}) => theme.spaces.s050};\n\n &:focus {\n box-shadow: 0 0 0 0.25rem ${props => props.theme.inputBtnFocusColor};\n }\n }\n`;\nconst DropdownLabel = styled.div`\n font-size: 0.8rem;\n`;\nconst ScenarioSelector = () => {\n const {\n t\n } = useTranslation();\n const instance = useInstance();\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const toggle = () => setDropdownOpen(prevState => !prevState);\n const {\n loading,\n error,\n data\n } = useQuery(GET_SCENARIOS, {\n fetchPolicy: 'network-only',\n notifyOnNetworkStatusChange: true,\n onCompleted: dat => activeScenarioVar(dat.scenarios.find(scen => scen.isActive))\n });\n const [activateScenario, {\n loading: mutationLoading,\n error: mutationError\n }] = useMutation(ACTIVATE_SCENARIO, {\n refetchQueries: 'active'\n });\n if (loading) {\n return \n {t('scenario')}\n \n \n \n \n \n ;\n }\n if (error) {\n //console.log(\"Error\", JSON.stringify(error));\n return
{t('error-loading-data')}
;\n }\n const hideBaseScenario = instance.features?.baselineVisibleInGraphs === false;\n const scenarios = data?.scenarios.filter(scen => scen.isSelectable && (hideBaseScenario ? scen.id !== 'baseline' : true)) ?? [];\n const activeScenario = scenarios.find(scen => scen.isActive);\n return \n {t('scenario')}\n \n {activeScenario.name}\n {activeScenario.id === 'custom' && *}\n \n \n {t('change-scenario')}\n {scenarios?.map(scenario => activateScenario({\n variables: {\n scenarioId: scenario.id\n }\n })}>\n {scenario.name}\n )}\n \n ;\n};\nexport default ScenarioSelector;","import { gql } from '@apollo/client';\nimport { ACTION_PARAMETER_FRAGMENT } from 'components/general/ActionParameters';\n\nconst GET_PARAMETERS = gql`\n query GetParameters {\n availableNormalizations {\n id\n label\n isActive\n }\n parameters {\n ...ActionParameter\n }\n }\n ${ACTION_PARAMETER_FRAGMENT}\n`;\n\nexport { GET_PARAMETERS };\n","import { gql, useMutation, useQuery, NetworkStatus } from '@apollo/client';\nimport styled from 'styled-components';\nimport { Row, Col, FormGroup, Label, Input, Button, InputGroup, FormFeedback } from 'reactstrap';\nimport { GetParametersQuery, SetNormalizationMutation, SetNormalizationMutationVariables } from 'common/__generated__/graphql';\nimport { GET_PARAMETERS } from 'queries/getParameters';\nimport { useTranslation } from 'react-i18next';\nconst SwitchWrapper = styled.div`\n max-width: 160px;\n .form-label {\n margin-bottom: 0;\n line-height: 1;\n font-size: 0.8rem;\n }\n`;\nconst SET_NORMALIZATION_MUTATION = gql`\n mutation SetNormalizationFromWidget($id: ID) {\n setNormalizer(id: $id) {\n ok\n }\n }\n`;\ntype NormalizationWidgetProps = {\n availableNormalizations: GetParametersQuery['availableNormalizations'];\n};\nfunction NormalizationWidget(props: NormalizationWidgetProps) {\n const {\n t\n } = useTranslation();\n const {\n loading,\n error,\n data,\n previousData,\n refetch,\n networkStatus\n } = useQuery(GET_PARAMETERS, {\n notifyOnNetworkStatusChange: true\n });\n const [setNormalization, {\n data: mutationData,\n loading: mutationLoading,\n error: mutationError\n }] = useMutation(SET_NORMALIZATION_MUTATION, {\n refetchQueries: 'active'\n });\n if (loading && !previousData || !data || !data.parameters) {\n return <>-;\n }\n if (error) {\n return <>\n
{t('error-loading-data')}
\n ;\n }\n const {\n availableNormalizations\n } = data;\n if (!availableNormalizations.length) return null;\n const norm = availableNormalizations[0];\n const label = t('normalize-by', {\n node: norm.label\n });\n return \n \n \n {\n setNormalization({\n variables: {\n id: norm.isActive ? null : norm.id\n }\n });\n }} data-sentry-element=\"Input\" data-sentry-source-file=\"NormalizationWidget.tsx\" />\n \n ;\n}\nexport default NormalizationWidget;","import { useEffect } from 'react';\nimport { gql, useQuery, useReactiveVar } from '@apollo/client';\nimport _ from 'lodash';\nimport styled, { useTheme } from 'styled-components';\nimport Icon from 'components/common/icon';\nimport { Spinner, CardBody, UncontrolledCollapse, Button } from 'reactstrap';\nimport { beautifyValue } from 'common/preprocess';\nimport { activeGoalVar, activeScenarioVar, yearRangeVar } from 'common/cache';\nimport { useTranslation } from 'next-i18next';\nimport { GetInstanceGoalOutcomeQuery, GetInstanceGoalOutcomeQueryVariables } from 'common/__generated__/graphql';\nexport const GET_INSTANCE_GOAL_OUTCOME = gql`\n query GetInstanceGoalOutcome($goal: ID!) {\n instance {\n id\n goals(id: $goal) {\n values {\n year\n goal\n actual\n isForecast\n isInterpolated\n }\n unit {\n htmlShort\n }\n }\n }\n }\n`;\nconst AccordionHeader = styled(Button)`\n display: flex;\n justify-content: space-between;\n width: 100%;\n text-align: left;\n border-radius: 0;\n //border-bottom: 2px solid ${props => props.theme.graphColors.grey050};\n border-top: none;\n border-left: none;\n border-right: none;\n background-color: ${props => props.theme.graphColors.grey000};\n color: ${props => props.theme.graphColors.grey090};\n //box-shadow: 0 0 4px 4px rgba(20,20,20,0.05);\n //border-top: 2px solid ${props => props.theme.graphColors.grey050};\n\n &:hover,\n &:active,\n &:focus {\n background-color: ${props => props.theme.graphColors.grey010} !important;\n color: ${props => props.theme.graphColors.grey090} !important;\n }\n`;\nconst OutcomeText = styled.div`\n font-size: ${({\n theme\n}) => theme.fontSizeSm};\n line-height: ${({\n theme\n}) => theme.lineHeightMd};\n`;\nconst EmissionsBar = styled.div`\n position: relative;\n margin: 2.5rem auto;\n max-width: 500px;\n height: 24px;\n`;\nconst BarLabel = styled.div<{\n $side?: 'top' | undefined;\n $negative: boolean;\n $placement: number;\n $small?: boolean;\n}>`\n font-size: 0.75rem;\n text-align: ${props => props.$small ? 'right' : 'left'};\n white-space: nowrap;\n line-height: 1;\n z-index: 1001 + ${props => props.$placement};\n position: absolute;\n padding: ${props => props.$side === 'top' ? `0 5px ${12 + props.$placement * 7}px 5px` : `${24 - props.$placement * 7}px 5px 0 5px`};\n bottom: ${props => props.$side === 'top' ? '0' : 'auto'};\n left: ${props => props.$negative || props.$small ? 'auto' : '-1px'};\n right: ${props => props.$small ? props.$negative ? '-1px' : '100%' : 'auto'};\n border-left: ${props => !props.$small ? `1px solid ${props.theme.graphColors.grey070}` : 'none'};\n border-right: ${props => props.$small ? `1px solid ${props.theme.graphColors.grey070}` : 'none'};\n font-weight: 700;\n`;\nconst Label = styled.div`\n background-color: ${props => props.theme.graphColors.grey000};\n`;\nconst Value = styled.div`\n background-color: ${props => props.theme.graphColors.grey000};\n font-weight: 400;\n`;\nconst Unit = styled.span`\n font-size: 0.75rem;\n`;\nconst EmissionBar = styled.div<{\n $barWidth: number;\n $barColor: string;\n $placement: number;\n $zeroOffset: number;\n}>`\n position: absolute;\n top: ${props => props.$placement * 7}px;\n right: ${props => props.$barWidth < 0 ? 0 : `${Math.abs(props.$zeroOffset)}%`};\n height: 6px;\n width: ${props => Math.abs(props.$barWidth)}%;\n background-color: ${props => props.$barColor};\n border-right: ${props => props.$barWidth > 0 ? `1px solid ${props.theme.graphColors.grey070}` : 'none'};\n border-left: ${props => props.$barWidth < 0 ? `1px solid ${props.theme.graphColors.grey070}` : 'none'};\n`;\nconst Card = styled.div`\n background-color: ${props => props.theme.graphColors.grey000};\n padding: 1rem;\n`;\nconst BarWithLabel = props => {\n const {\n label,\n value,\n unit,\n barWidth,\n barColor,\n labelSide,\n placement,\n zeroOffset\n } = props;\n return \n \n \n \n {beautifyValue(value)}{' '}\n \n \n \n ;\n};\nconst outcomeAsText = (isForecast, scenarioName, goalType, selectedYear, selectedYearDifference, selectedYearValue, nearestGoalYear, nearestGoalValue, t) => {\n if (isForecast) return t('outcome-bar-summary-forecast', {\n scenarioName,\n goalType,\n selectedYear,\n selectedYearValue,\n nearestGoalYear,\n nearestGoalValue,\n interpolation: {\n escapeValue: false\n }\n });\n return t('outcome-bar-summary-historical', {\n goalType,\n selectedYear,\n selectedYearDifference,\n nearestGoalYear,\n nearestGoalValue,\n interpolation: {\n escapeValue: false\n }\n });\n};\ntype GoalOutcomeBarProps = {\n compact?: boolean;\n};\nconst GoalOutcomeBar: React.FC<{}> = (props: GoalOutcomeBarProps) => {\n const {\n compact\n } = props;\n const {\n t\n } = useTranslation();\n const theme = useTheme();\n const activeScenario = useReactiveVar(activeScenarioVar);\n const yearRange = useReactiveVar(yearRangeVar);\n const activeGoal = useReactiveVar(activeGoalVar);\n if (!activeGoal) return null;\n const {\n loading,\n error,\n data,\n refetch\n } = useQuery(GET_INSTANCE_GOAL_OUTCOME, {\n variables: {\n goal: activeGoal.id\n }\n });\n useEffect(() => {\n refetch();\n }, [activeScenario]);\n if (loading) return \n \n ;\n if (error) return
error!
;\n if (!data || !data.instance.goals.length) return
no data
;\n const goal = data.instance.goals[0];\n const firstForecastYear = goal.values.find(val => val.isForecast)?.year;\n const isForecast = yearRange[1] >= firstForecastYear!;\n const valuesByYear = new Map(goal.values.map(goal => [goal.year, goal]));\n const unit = goal.unit.htmlShort;\n const historical = goal.values.filter(val => !val.isForecast);\n const goalValues = goal.values.filter(val => val.goal !== null);\n const outcomeNow = historical[historical.length - 1];\n // Use the closest goal value to the end of the year range\n const comparisonGoal = goalValues.filter(v => v.year >= yearRange[1])[0] || goalValues[goalValues.length - 1];\n // const comparisonGoal = goalValues[goalValues.length - 1];\n const comparisonActual = valuesByYear.get(yearRange[1])!;\n const maxOutcome = _.max([outcomeNow.actual, comparisonActual.actual, comparisonGoal.goal])!;\n const minOutcome = _.min([outcomeNow.actual, comparisonActual.actual, comparisonGoal.goal])!;\n const totalRange = minOutcome < 0 ? maxOutcome - minOutcome : maxOutcome;\n const zeroOffset = minOutcome < 0 ? minOutcome / totalRange * 100 : 0;\n const outcomeColor = comparisonActual.actual! > comparisonGoal.goal! ? theme.graphColors.red050 : theme.graphColors.green050;\n const outcomeNowWidth = outcomeNow.actual! / totalRange * 100;\n const outcomeTotalWidth = comparisonActual.actual! / totalRange * 100;\n const outcomeTargetWidth = comparisonGoal.goal! / totalRange * 100;\n const bars = _.sortBy([{\n label: `${t('emissions')} ${outcomeNow.year}`,\n value: outcomeNow.actual!,\n unit,\n barColor: theme.graphColors.grey030,\n barWidth: outcomeNowWidth,\n labelSide: undefined\n }, {\n label: `${isForecast ? t('scenario-outcome') : t('historical-outcome')} ${comparisonActual.year}`,\n value: comparisonActual.actual!,\n unit,\n barColor: outcomeColor,\n barWidth: outcomeTotalWidth,\n labelSide: 'top'\n }, {\n label: `${t('target')} ${comparisonGoal.year}`,\n value: comparisonGoal.goal!,\n unit,\n barColor: theme.graphColors.green050,\n barWidth: outcomeTargetWidth,\n labelSide: undefined\n }], [bar => -bar.value]);\n const missingFromTarget = comparisonActual.actual! - comparisonGoal.goal!;\n let longUnit = goal.unit.htmlShort;\n // FIXME: Nasty hack to show 'CO2e' where it might be applicable until\n // the backend gets proper support for unit specifiers.\n if (unit === 't∕(Einw.·a)') {\n longUnit = t('tco2-e-inhabitant');\n } else if (unit === 'kt∕a') {\n longUnit = t('ktco2-e');\n }\n const verbalizedOutcome = outcomeAsText(isForecast, activeScenario.name, activeGoal.label, yearRange[1], `${beautifyValue(missingFromTarget)} ${longUnit}`, `${beautifyValue(comparisonActual.actual)} ${longUnit}`, comparisonGoal.year, `${beautifyValue(comparisonGoal.goal)} ${longUnit}`, t);\n return <>\n {compact ?
\n \n {bars.map((bar, index) => )}\n \n
: <>\n \n
\n

\n {isForecast ? t('scenario-outcome') : t('historical-outcome')}\n

\n \n
\n \n
\n \n \n \n
\n \n {bars.map((bar, index) => )}\n \n
\n
\n
\n
\n }\n ;\n};\nexport default GoalOutcomeBar;","import { useEffect, useState } from 'react';\nimport { gql, useMutation, useQuery, NetworkStatus } from '@apollo/client';\nimport type { ObservableQuery } from '@apollo/client';\nimport styled from 'styled-components';\nimport { Row, Col, FormGroup, Label, Input, Button, InputGroup, FormFeedback } from 'reactstrap';\nimport Icon from 'components/common/icon';\nimport ContentLoader from 'components/common/ContentLoader';\nimport { GET_PARAMETERS } from 'queries/getParameters';\nimport { GetParametersQuery, SetNormalizationMutation, SetNormalizationMutationVariables } from 'common/__generated__/graphql';\nimport { useTranslation } from 'react-i18next';\nconst GlobalParametersPanel = styled(Row)`\n .form-group {\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n }\n label {\n font-size: ${props => props.theme.fontSizeSm};\n line-height: 1;\n overflow-wrap: break-word;\n max-width: 100%;\n }\n`;\ntype StyledInputProps = {\n customized: boolean;\n};\nconst StyledInput = styled(Input)`\n background-color: ${props => props.customized ? props.theme.graphColors.blue010 : props.theme.themeColors.white};\n`;\nconst SET_PARAMETER = gql`\n mutation SetGlobalParameter(\n $parameterId: ID!\n $boolValue: Boolean\n $numberValue: Float\n $stringValue: String\n ) {\n setParameter(\n id: $parameterId\n boolValue: $boolValue\n numberValue: $numberValue\n stringValue: $stringValue\n ) {\n ok\n parameter {\n isCustomized\n isCustomizable\n ... on BoolParameterType {\n boolValue: value\n boolDefaultValue: defaultValue\n }\n }\n }\n }\n`;\nconst NumericParameter = props => {\n const {\n id,\n isCustomized,\n refetching,\n value,\n invalid,\n handleUserSelection\n } = props;\n const [currentValue, setCurrentValue] = useState(value);\n useEffect(() => {\n setCurrentValue(value);\n }, [value]);\n const handleInput = e => {\n setCurrentValue(e.target.value);\n // Do a fake submit on every input to check validity\n handleUserSelection({\n type: 'NumberParameterType',\n parameterId: id,\n numberValue: +currentValue,\n char: undefined\n });\n // Do a real submit if user leaves the field or presses enter\n const okToSubmit = !invalid || e.type === 'blur' || e?.charCode === 13;\n if (okToSubmit) {\n handleUserSelection({\n type: 'NumberParameterType',\n parameterId: id,\n numberValue: +currentValue,\n char: 'Enter'\n });\n }\n };\n return \n handleInput(e)} onBlur={e => handleInput(e)} onKeyPress={e => handleInput(e)} data-sentry-element=\"StyledInput\" data-sentry-source-file=\"GlobalParameters.tsx\" />\n {invalid}\n {false && }\n ;\n};\ntype ParameterWidgetProps = {\n param: GetParametersQuery['parameters'][0];\n refetching: boolean;\n refetch: ObservableQuery['refetch'];\n};\nconst ParameterWidget = (props: ParameterWidgetProps) => {\n const {\n refetch,\n refetching,\n param\n } = props;\n const {\n __typename,\n id,\n isCustomizable,\n isCustomized,\n label,\n numberValue,\n boolValue,\n stringValue\n } = props.param;\n const [invalid, setInvalid] = useState(false);\n const [parameterValue, setParameterValue] = useState(numberValue || boolValue || stringValue);\n const [SetParameter, {\n loading: mutationLoading,\n error: mutationError\n }] = useMutation(SET_PARAMETER, {\n notifyOnNetworkStatusChange: true,\n refetchQueries: 'all',\n onCompleted: dat => {\n //console.log(\"set param---------\", dat);\n }\n });\n useEffect(() => {\n const validity = isInvalid({\n __typename,\n numberValue,\n stringValue,\n boolValue\n });\n setInvalid(validity);\n }, [numberValue, stringValue, boolValue]);\n const isInvalid = input => {\n switch (__typename) {\n case 'NumberParameterType':\n if (isNaN(input.numberValue)) return 'Please provide a number';\n if (input.numberValue >= param.minValue && input.numberValue <= param.maxValue) return false;else return `Value must be between ${param.minValue} - ${param.maxValue}`;\n case 'StringParameterType':\n return false;\n case 'BoolParameterType':\n return false;\n }\n };\n const handleUserSelection = evt => {\n // Don't send mutation if value is not valid\n const validity = isInvalid(evt);\n setInvalid(validity);\n if (validity) return;\n\n // Don't send mutation if value hasn't changed\n switch (evt.type) {\n case 'NumberParameterType':\n if (evt.numberValue === numberValue) return;\n break;\n case 'StringParameterType':\n if (evt.stringValue === stringValue) return;\n break;\n case 'BoolParameterType':\n if (evt.boolValue === boolValue) return;\n break;\n }\n\n // Send mutation if checks pass (and user presses enter)\n if (evt?.char === 'Enter') {\n SetParameter({\n variables: evt\n });\n }\n };\n switch (param.__typename) {\n case 'NumberParameterType':\n return \n \n \n \n \n ;\n case 'StringParameterType':\n return \n \n \n handleUserSelection({\n type: 'StringParameterType',\n parameterId: param.id,\n stringValue: e.target.value,\n char: e.key\n })} />\n \n ;\n case 'BoolParameterType':\n return \n \n \n handleUserSelection({\n type: 'BoolParameterType',\n parameterId: param.id,\n boolValue: !param.boolValue,\n char: 'Enter'\n })} />\n \n ;\n default:\n return null;\n }\n};\nconst SET_NORMALIZATION_MUTATION = gql`\n mutation SetNormalization($id: ID) {\n setNormalizer(id: $id) {\n ok\n }\n }\n`;\ntype NormalizationWidgetProps = {\n availableNormalizations: GetParametersQuery['availableNormalizations'];\n};\nfunction NormalizationWidget(props: NormalizationWidgetProps) {\n const {\n t\n } = useTranslation();\n const {\n availableNormalizations\n } = props;\n const [setNormalization, {\n data,\n loading,\n error\n }] = useMutation(SET_NORMALIZATION_MUTATION, {\n refetchQueries: 'active'\n });\n if (!availableNormalizations.length) return null;\n const norm = availableNormalizations[0];\n const label = t('normalize-by', {\n node: norm.label\n });\n return \n \n \n {\n setNormalization({\n variables: {\n id: norm.isActive ? null : norm.id\n }\n });\n }} data-sentry-element=\"Input\" data-sentry-source-file=\"GlobalParameters.tsx\" />\n \n ;\n}\ntype GlobalParametersProps = {};\nconst GlobalParameters = (props: GlobalParametersProps) => {\n const {\n loading,\n error,\n data,\n previousData,\n refetch,\n networkStatus\n } = useQuery(GET_PARAMETERS, {\n notifyOnNetworkStatusChange: true\n });\n const {\n t\n } = useTranslation();\n const refetching = networkStatus === NetworkStatus.refetch;\n if (loading && !previousData || !data || !data.parameters) {\n return <>\n \n ;\n }\n if (error) {\n return <>\n
{t('error-loading-data')}
\n ;\n }\n const {\n availableNormalizations,\n parameters\n } = data;\n return \n {parameters.map(param => param.isCustomizable && )}\n ;\n};\nexport default GlobalParameters;","import { gql, NetworkStatus, useQuery, useReactiveVar } from '@apollo/client';\nimport type { GetActionListQuery, GetActionListQueryVariables } from 'common/__generated__/graphql';\nimport { activeGoalVar } from 'common/cache';\nimport { findActionEnabledParam } from 'common/preprocess';\nimport ContentLoader from 'components/common/ContentLoader';\nimport { GET_ACTION_LIST } from 'queries/getActionList';\nimport { useTranslation } from 'react-i18next';\nimport styled, { useTheme } from 'styled-components';\nimport ParameterWidget from './ParameterWidget';\nconst GlobalParametersPanel = styled.div`\n max-height: 400px;\n overflow-y: auto;\n padding: 2rem 0;\n background-color: ${props => props.theme.themeColors.white};\n border-top: 1px solid ${props => props.theme.graphColors.grey050};\n border-bottom: 1px solid ${props => props.theme.graphColors.grey050};\n`;\nconst ActionsList = styled.div`\n display: flex;\n flex-flow: row wrap;\n gap: 0.5rem 1rem;\n`;\nconst ActionsListItem = styled.div`\n flex: 1 1 320px;\n`;\nconst ActionCard = styled.div<{\n $isActive: boolean;\n $groupColor: string;\n}>`\n position: relative;\n flex: 1 1 320px;\n min-height: 3rem;\n height: 100%;\n padding: 0.25rem 0.5rem 0.25rem 1rem;\n border: 1px solid ${props => props.theme.graphColors.grey010};\n border-left: 4px solid ${props => props.$groupColor};\n border-radius: 0.25rem;\n background-color: ${props => props.$isActive ? props.theme.themeColors.white : props.theme.graphColors.grey010};\n\n &:hover {\n background-color: ${props => props.theme.graphColors.grey010};\n }\n\n a {\n display: block;\n text-decoration: none;\n width: 100%;\n height: 100%;\n }\n\n a,\n a > h6 {\n color: ${props => props.$isActive ? props.theme.graphColors.grey090 : props.theme.graphColors.grey050};\n }\n`;\nconst WidgetWrapper = styled.div`\n font-size: 0.8rem;\n\n .form-check-input {\n &:checked {\n background-color: ${props => props.theme.brandDark};\n border-color: ${props => props.theme.brandDark};\n }\n }\n\n .form-check-label {\n margin-left: 0.5rem;\n line-height: 1;\n }\n`;\nconst SET_PARAMETER = gql`\n mutation SetGlobalParameterFromActionSummary(\n $parameterId: ID!\n $boolValue: Boolean\n $numberValue: Float\n $stringValue: String\n ) {\n setParameter(\n id: $parameterId\n boolValue: $boolValue\n numberValue: $numberValue\n stringValue: $stringValue\n ) {\n ok\n parameter {\n isCustomized\n isCustomizable\n ... on BoolParameterType {\n boolValue: value\n boolDefaultValue: defaultValue\n }\n }\n }\n }\n`;\ntype ActionListCardProps = {\n action: ActionsSummaryAction;\n refetching: boolean;\n};\nconst ActionListCard = (props: ActionListCardProps) => {\n const {\n action,\n refetching\n } = props;\n const actionParameterSwitch = findActionEnabledParam(action.parameters);\n const isActive = !refetching && (actionParameterSwitch?.boolValue ?? false);\n const theme = useTheme();\n return \n {action.group?.name}\n
{action.name}
\n {actionParameterSwitch && }\n
;\n};\ntype ActionsSummaryAction = GetActionListQuery['actions'][0];\nconst ActionsSummary = () => {\n const activeGoal = useReactiveVar(activeGoalVar);\n const {\n t\n } = useTranslation();\n const queryResp = useQuery(GET_ACTION_LIST, {\n variables: {\n goal: activeGoal?.id ?? null\n },\n fetchPolicy: 'cache-and-network',\n notifyOnNetworkStatusChange: true\n });\n const {\n error,\n loading,\n networkStatus,\n previousData\n } = queryResp;\n const data = queryResp.data ?? previousData;\n const refetching = networkStatus === NetworkStatus.refetch;\n if (loading && !previousData) {\n return ;\n }\n if (error) {\n return <>\n
{t('error-loading-data')}
\n ;\n }\n const actions = (data?.actions ?? []).filter(action => action.decisionLevel === 'MUNICIPALITY');\n const activeActions = actions.filter(action => {\n const {\n parameters\n } = action;\n const enabledParam = (parameters.find(param => param.node && param.id === `${param.node.id}.enabled`) as ((typeof parameters)[0] & {\n __typename: 'BoolParameterType';\n }) | null);\n if (!enabledParam) return false;\n return enabledParam.boolValue;\n });\n return \n

\n {t('active-actions', {\n count: activeActions.length,\n total: actions.length\n })}\n

\n \n {actions.map(action => {\n return \n \n ;\n })}\n \n \n \n
;\n};\nexport default ActionsSummary;","import { useCallback, useContext, useState } from 'react';\nimport { useReactiveVar } from '@apollo/client';\nimport styled from 'styled-components';\nimport { Container, Row, Col, Button, UncontrolledCollapse, CardBody } from 'reactstrap';\nimport Icon from 'components/common/icon';\nimport RangeSelector from 'components/general/RangeSelector';\nimport { useSite } from 'context/site';\nimport { yearRangeVar, activeScenarioVar } from 'common/cache';\nimport GoalSelector from 'components/general/GoalSelector';\nimport ScenarioSelector from 'components/general/ScenarioSelector';\nimport NormalizationWidget from './NormalizationWidget';\nimport GoalOutcomeBar from 'components/general/GoalOutcomeBar';\nimport ScenarioBadge from 'components/common/ScenarioBadge';\nimport GlobalParameters from 'components/general/GlobalParameters';\nimport ActionsSummary from './ActionsSummary';\nimport { useInstance } from 'common/instance';\nimport { useTranslation } from 'next-i18next';\nconst SettingsHeader = styled.div`\n padding: 1rem 0;\n background-color: ${props => props.theme.graphColors.grey010};\n\n h2 {\n font-size: ${props => props.theme.fontSizeLg};\n }\n`;\nconst SettingsContent = styled.div`\n width: 100%;\n height: 100%;\n padding: 2rem 0 6rem;\n background-color: ${props => props.theme.graphColors.grey020};\n overflow-y: scroll;\n`;\nconst DisplaySettings = styled.div``;\nconst SettingsSection = styled.div`\n margin-bottom: 1rem;\n`;\nconst Widget = styled.div`\n margin-bottom: 2rem;\n`;\nconst AccordionHeader = styled(Button)`\n display: flex;\n justify-content: space-between;\n width: 100%;\n text-align: left;\n border-radius: 0;\n //border-bottom: 2px solid ${props => props.theme.graphColors.grey050};\n border-top: none;\n border-left: none;\n border-right: none;\n background-color: ${props => props.theme.graphColors.grey000};\n color: ${props => props.theme.graphColors.grey090};\n //box-shadow: 0 0 4px 4px rgba(20,20,20,0.05);\n //border-top: 2px solid ${props => props.theme.graphColors.grey050};\n\n &:hover,\n &:active,\n &:focus {\n background-color: ${props => props.theme.graphColors.grey010} !important;\n color: ${props => props.theme.graphColors.grey090} !important;\n }\n`;\nconst Card = styled.div`\n background-color: ${props => props.theme.graphColors.grey000};\n padding: 1rem;\n`;\nconst CompleteSettings = props => {\n if (!process.browser) {\n return null;\n }\n const site = useSite();\n const instance = useInstance();\n const activeScenario = useReactiveVar(activeScenarioVar);\n const hasGlobalParameters = site.parameters.find(param => param.isCustomizable) !== undefined;\n const hasNormalizations = site.availableNormalizations.length > 0;\n\n // State of display settings\n // Year range\n const yearRange = useReactiveVar(yearRangeVar);\n const setYearRange = useCallback((newRange: [number, number]) => {\n yearRangeVar(newRange);\n }, [yearRangeVar]);\n const {\n t\n } = useTranslation();\n\n // Target\n const nrGoals = instance.goals.length;\n\n // Normalization\n const availableNormalizations = site.availableNormalizations;\n return <>\n \n \n

{t('all-settings')}

\n
\n
\n \n \n \n \n

{t('display')}

\n \n
\n \n \n \n \n \n \n
{t('comparing-years')}
\n \n \n {hasNormalizations && \n
{t('normalization')}
\n \n }\n {nrGoals > 1 && \n
{t('target-climate')}
\n \n }\n
\n
\n
\n
\n
\n
\n \n \n

\n {t('scenario')}: {activeScenario.name}\n

\n \n
\n \n \n \n \n
{t('change-scenario')}
\n \n
\n \n
{t('actions')}
\n \n
\n \n {hasGlobalParameters && <>\n
Global settings
\n \n }\n
\n
\n
\n
\n
\n \n \n \n
\n
\n ;\n};\nexport default CompleteSettings;","import { useCallback, useRef, useState } from 'react';\nimport { useReactiveVar } from '@apollo/client';\nimport { Row, Col, Container, Popover, PopoverBody } from 'reactstrap';\nimport styled from 'styled-components';\nimport { useTranslation } from 'next-i18next';\nimport { useSite } from 'context/site';\nimport { yearRangeVar } from 'common/cache';\nimport { useInstance } from 'common/instance';\nimport ScenarioSelector from 'components/general/ScenarioSelector';\nimport RangeSelector from 'components/general/RangeSelector';\nimport GoalSelector from 'components/general/GoalSelector';\nimport GoalOutcomeBar from 'components/general/GoalOutcomeBar';\nconst PanelContent = styled.div`\n padding: ${({\n theme\n}) => `${theme.spaces.s150} ${theme.spaces.s050} ${theme.spaces.s050}`};\n`;\nconst ButtonLabel = styled.div`\n white-space: nowrap;\n font-size: 0.8rem;\n`;\nconst StyledRow = styled(Row)`\n --bs-gutter-x: ${({\n theme\n}) => theme.spaces.s100};\n\n @media (max-width: ${props => props.theme.breakpointMd}) {\n --bs-gutter-x: ${({\n theme\n}) => theme.spaces.s050};\n }\n`;\nconst StyledDropdownCol = styled(Col)`\n display: flex;\n justify-content: stretch;\n align-items: center;\n\n > div {\n width: 100%;\n }\n`;\nconst StyledOutcomeCol = styled(Col)`\n @media (max-width: ${props => props.theme.breakpointMd}) {\n display: none;\n }\n`;\nconst StyledButton = styled.button<{\n ref: HTMLButtonElement;\n}>`\n width: 100%;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n font-weight: 400;\n font-size: 0.9rem;\n padding: ${({\n theme\n}) => theme.spaces.s050};\n\n &:focus {\n box-shadow: 0 0 0 0.25rem ${props => props.theme.inputBtnFocusColor};\n }\n`;\nconst YearRangeSelector = props => {\n const {\n minYear,\n maxYear,\n referenceYear\n } = props;\n const inputReference = useRef(null);\n const triggerReference = useRef(null);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const toggle = () => {\n setPopoverOpen(!popoverOpen);\n // Focus on the input when the popover is opened\n setTimeout(() => {\n if (popoverOpen) {\n triggerReference?.current?.focus();\n } else {\n inputReference?.current?.focus();\n }\n }, 0);\n };\n\n // State of display settings\n // Year range\n const yearRange = useReactiveVar(yearRangeVar);\n const setYearRange = useCallback((newRange: [number, number]) => {\n yearRangeVar(newRange);\n }, [yearRangeVar]);\n const {\n t\n } = useTranslation();\n return
\n {t('comparing-years')}\n \n {`${yearRange[0]}–${yearRange[1]}`}\n \n \n \n
\n \n
\n
\n
\n
;\n};\nfunction getColumnSizes(hasMultipleGoals: boolean) {\n if (hasMultipleGoals) {\n return {\n scenario: {\n xs: 4,\n md: 2\n },\n yearRange: {\n xs: 3,\n md: 2\n },\n goal: {\n xs: 5,\n md: 3\n },\n outcome: {\n md: 5\n }\n };\n }\n return {\n scenario: {\n xs: 6,\n md: 3\n },\n yearRange: {\n xs: 6,\n md: 3\n },\n goal: undefined,\n outcome: {\n md: 6\n }\n };\n}\nconst MediumSettings = props => {\n if (!process.browser) {\n return null;\n }\n const site = useSite();\n const instance = useInstance();\n\n // Target\n const nrGoals = instance.goals.length;\n const hasMultipleGoals = nrGoals > 1;\n const columnSizes = getColumnSizes(hasMultipleGoals);\n return \n \n \n \n \n \n \n \n \n {hasMultipleGoals && \n \n }\n \n \n \n \n \n ;\n};\nexport default MediumSettings;","import { useCallback, useContext, useState } from 'react';\nimport { useReactiveVar } from '@apollo/client';\nimport styled from 'styled-components';\nimport { transparentize } from 'polished';\nimport { Row, Col, Button } from 'reactstrap';\nimport Icon from 'components/common/icon';\nimport { useSite } from 'context/site';\nimport { yearRangeVar } from 'common/cache';\nimport { useInstance } from 'common/instance';\nimport { useTranslation } from 'next-i18next';\nimport CompleteSettings from './CompleteSettings';\nimport MediumSettings from './MediumSettings';\nconst FixedPanel = styled.aside`\n position: fixed;\n z-index: 255;\n left: 0;\n bottom: 0;\n width: 100%;\n background-color: ${props => props.theme.graphColors.grey000};\n color: ${props => props.theme.graphColors.grey090};\n box-shadow: 0 0 4px 4px rgba(20, 20, 20, 0.05);\n transition: height 0.25s;\n //border-top: 2px solid ${props => props.theme.graphColors.grey050};\n\n &.panel-sm {\n height: 4rem;\n }\n\n &.panel-md {\n height: 7.5rem;\n\n @media (max-width: ${props => props.theme.breakpointMd}) {\n height: 6rem;\n }\n }\n\n &.panel-lg {\n height: 95%;\n\n &::before {\n content: '';\n position: fixed;\n z-index: -50;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: ${props => transparentize(0.15, props.theme.graphColors.grey090)};\n }\n }\n`;\nconst StyledSettingsButton = styled(Button)`\n position: absolute;\n background-color: ${props => props.theme.themeColors.white} !important;\n z-index: 25;\n height: 2.5rem;\n border-radius: 1.25rem;\n padding: ${({\n theme\n}) => `0 ${theme.spaces.s050}`};\n top: -1.5rem;\n right: 6px;\n box-shadow: 3px 3px 12px rgba(33, 33, 33, 0.15);\n display: flex;\n align-items: center;\n justify-content: center;\n\n &:hover {\n background-color: ${props => props.theme.graphColors.grey030};\n }\n`;\nconst StyledButtonLabel = styled.span`\n margin-left: ${({\n theme\n}) => theme.spaces.s050};\n font-size: ${({\n theme\n}) => theme.fontSizeSm};\n`;\n\n// Handle panel states\nconst MODE = {\n MD: 'md',\n LG: 'lg'\n};\nconst SettingsPanelFull: React.FC = props => {\n if (!process.browser) {\n return null;\n }\n const site = useSite();\n const instance = useInstance();\n // console.log(\"Site\", \"Instance\", site, instance);\n\n const [mode, setMode] = useState(MODE.MD);\n const handleToggle = e => {\n e.preventDefault();\n if (mode === MODE.LG) {\n setMode(MODE.MD);\n } else if (mode === MODE.MD) {\n setMode(MODE.LG); // Make SM mobile only\n } else {\n setMode(MODE.LG);\n }\n };\n\n // State of display settings\n // Year range\n const yearRange = useReactiveVar(yearRangeVar);\n const setYearRange = useCallback((newRange: [number, number]) => {\n yearRangeVar(newRange);\n }, [yearRangeVar]);\n const {\n t\n } = useTranslation();\n\n // Normalization\n const availableNormalizations = site.availableNormalizations;\n\n // Target\n const nrGoals = instance.goals.length;\n\n // console.log(props);\n return \n handleToggle(e)} data-sentry-element=\"StyledSettingsButton\" data-sentry-source-file=\"SettingsPanelFull.tsx\">\n {mode === MODE.MD && <>\n {' '}\n {t('settings-expand')}\n }\n {mode === MODE.LG && <>\n {' '}\n {t('settings-collapse')}\n }\n \n {mode === MODE.MD && }\n {mode === MODE.LG && }\n ;\n};\nexport default SettingsPanelFull;","import chroma from 'chroma-js';\nimport type { DefaultTheme } from 'styled-components';\n\nexport function genColors(colorsIn: string[], numColors: number) {\n const colors = colorsIn.slice(0, -1);\n const colors2 = colorsIn.slice(-1);\n const diverging = true;\n const bezier = true;\n const correctLightness = true;\n\n const genRange = (start, stop, step = 1) =>\n Array(Math.ceil((stop - start) / step))\n .fill(start)\n .map((x, y) => x + y * step);\n\n const even = numColors % 2 === 0;\n const numColorsLeft = diverging\n ? Math.ceil(numColors / 2) + (even ? 1 : 0)\n : numColors;\n const numColorsRight = diverging\n ? Math.ceil(numColors / 2) + (even ? 1 : 0)\n : 0;\n const genColors =\n colors.length !== 1 ? colors : autoColors(colors[0], numColorsLeft);\n const genColors2 =\n colors2.length !== 1\n ? colors2\n : autoColors(colors2[0], numColorsRight, true);\n const stepsLeft = colors.length\n ? chroma\n .scale(\n bezier && colors.length > 1 ? chroma.bezier(genColors) : genColors\n )\n .correctLightness(correctLightness)\n .colors(numColorsLeft)\n : [];\n const stepsRight =\n diverging && colors2.length\n ? chroma\n .scale(\n bezier && colors2.length > 1\n ? chroma.bezier(genColors2)\n : genColors2\n )\n .correctLightness(correctLightness)\n .colors(numColorsRight)\n : [];\n let steps = (\n even && diverging ? stepsLeft.slice(0, stepsLeft.length - 1) : stepsLeft\n ).concat(stepsRight.slice(1));\n\n function autoGradient(color, numColors) {\n const lab = chroma(color).lab();\n const lRange = 100 * (0.95 - 1 / numColors);\n const lStep = lRange / (numColors - 1);\n let lStart = (100 - lRange) * 0.5;\n const range = genRange(lStart, lStart + numColors * lStep, lStep);\n let offset = 0;\n if (!diverging) {\n offset = 9999;\n for (let i = 0; i < numColors; i++) {\n let diff = lab[0] - range[i];\n if (Math.abs(diff) < Math.abs(offset)) {\n offset = diff;\n }\n }\n }\n return range.map((l) => chroma.lab(l + offset, lab[1], lab[2]));\n }\n function autoColors(color, numColors, reverse = false) {\n if (diverging) {\n const colors = autoGradient(color, 3).concat(chroma('#f5f5f5'));\n if (reverse) colors.reverse();\n return colors;\n } else {\n return autoGradient(color, numColors);\n }\n }\n return steps;\n}\n\nexport function genColorsFromTheme(theme: DefaultTheme, numColors: number) {\n const colors = [\n theme.graphColors.blue070,\n theme.graphColors.red050,\n theme.graphColors.green070,\n ];\n return genColors(colors, numColors);\n}\n\nexport function setUniqueColors(\n objs: T[],\n getColor: (obj: T) => string | undefined | null,\n setColor: (obj: T, color: string) => void,\n defaultColor: string | null = null\n) {\n const colorCount: { [c: string]: number } = {};\n if (defaultColor) defaultColor = defaultColor.toLowerCase();\n objs.forEach((obj) => {\n let color = getColor(obj)?.toLowerCase();\n if (!color) {\n if (!defaultColor) return;\n color = defaultColor;\n }\n colorCount[color] = (colorCount[color] ?? 0) + 1;\n setColor(obj, color);\n });\n const colors = Object.fromEntries(\n Object.entries(colorCount).map(([color, count]) => {\n if (count == 1) return [color, [color]];\n const color1 = (\n count >= 3 ? chroma(color).brighten(2) : chroma(color)\n ).hex();\n const color2 = chroma(color).darken(2).hex();\n const scale = chroma\n .bezier([color1, color2])\n .scale()\n .correctLightness()\n .colors(count)\n .reverse();\n return [color, scale];\n })\n );\n objs.forEach((obj) => {\n const oldColor = getColor(obj);\n if (!oldColor) return;\n // console.log(`${node.color} -> ${colors[node.color][0]}`);\n const color = colors[oldColor].shift();\n setColor(obj, color!);\n });\n}\n","import type { Font, Style } from 'exceljs';\nimport dayjs from 'dayjs';\nimport slugify from 'slugify';\n\nimport type { DimensionalMetricFragment } from 'common/__generated__/graphql';\nimport { type InstanceGoal } from 'common/instance';\nimport { type DocumentNode, gql } from '@apollo/client';\n\ntype CatValue = number | null;\n\ntype DimValues = {\n categories: Map;\n};\n\ntype Metric = NonNullable;\n\ntype MetricDimensionInput = Metric['dimensions'][0];\ntype MetricDimension = Omit & {\n groupsById: Map;\n groups: MetricCategoryGroup[];\n};\ntype MetricDimensionCategory = MetricDimension['categories'][0];\ntype MetricCategoryGroup = MetricDimensionInput['groups'][0] & {\n categories: MetricDimensionCategory[];\n};\n\ntype DimCats = {\n [key: string]: MetricDimensionCategory;\n};\n\ntype MetricRow = {\n year: number;\n value: number | null;\n dimCats: DimCats;\n};\n\ntype CatOrGroup = MetricDimensionCategory | MetricCategoryGroup;\n\nexport type MetricCategory = Partial &\n Pick;\n\nexport type MetricCategoryValues = {\n category: Readonly;\n forecastValues: (number | null)[];\n historicalValues: (number | null)[];\n isNegative: boolean;\n color: string | null;\n};\n\ntype CatDimChoice = {\n groups: string[] | null;\n categories: string[];\n};\n\ntype MetricCategoryChoice = {\n [dim: string]: CatDimChoice | undefined;\n};\n\n/**\n *\n */\nexport type SliceConfig = {\n /** The dimension to group/slice by (or `undefined` if we should just sum everything) */\n dimensionId: string | undefined;\n /** Filters for categories (or `{}` if no filtering should be done) */\n categories: MetricCategoryChoice;\n};\n\ntype MetricSliceInput = {\n historicalYears: number[];\n forecastYears: number[];\n categoryValues: MetricCategoryValues[];\n totalValues: MetricCategoryValues | null;\n dimensionLabel: string;\n unit: string;\n};\n\nexport class MetricSlice {\n historicalYears: number[];\n forecastYears: number[];\n categoryValues: MetricCategoryValues[];\n totalValues: MetricCategoryValues | null;\n dimensionLabel: string;\n unit: string;\n\n constructor(input: MetricSliceInput) {\n [\n 'historicalYears',\n 'forecastYears',\n 'categoryValues',\n 'totalValues',\n 'dimensionLabel',\n 'unit',\n ].forEach((key) => {\n this[key] = input[key];\n });\n }\n\n createTable() {\n const header = [\n { key: 'category', label: this.dimensionLabel },\n ...[...this.historicalYears, ...this.forecastYears].map((year) => ({\n key: year.toString(),\n label: year.toString(),\n })),\n ];\n const rows = this.categoryValues.map((cv) => {\n const hist: [string, number | null][] = this.historicalYears.map((year, idx) => [\n year.toString(),\n cv.historicalValues[idx],\n ]);\n const fc: [string, number | null][] = this.forecastYears.map((year, idx) => [\n year.toString(),\n cv.forecastValues[idx],\n ]);\n const out: { [key: string]: string | number | null } = {\n category: cv.category.label,\n ...Object.fromEntries(hist),\n ...Object.fromEntries(fc),\n };\n return out;\n });\n const forecastFromColumn = 1 + this.historicalYears.length;\n return {\n header,\n rows,\n hasTotals: this.totalValues !== null,\n forecastFromColumn,\n };\n }\n}\n\nconst DIMENSIONAL_METRIC_FRAGMENT = gql`\n fragment DimensionalMetric on DimensionalMetricType {\n id\n name\n dimensions {\n id\n label\n originalId\n helpText\n categories {\n id\n originalId\n label\n color\n order\n group\n }\n groups {\n id\n originalId\n label\n color\n order\n }\n }\n goals {\n categories\n groups\n values {\n year\n value\n isInterpolated\n }\n }\n unit {\n htmlShort\n short\n htmlLong\n long\n }\n stackable\n normalizedBy {\n id\n name\n }\n forecastFrom\n years\n values\n }\n`;\n\nexport class DimensionalMetric {\n static ALL_SCENARIOS = 'ALL_SCENARIOS';\n private readonly data: Metric;\n private readonly rows: MetricRow[];\n valuesByDim: Map;\n dimensions: MetricDimension[];\n dimsById: Map;\n\n private isScenarioDim(dim: MetricDimensionInput) {\n return dim.id.endsWith(':scenario:ScenarioName');\n }\n\n /**\n * Filter metric data to include only the specified scenario or the default scenario if no scenario is specified.\n * @param scenarioId - The ID of the scenario to filter by. Defaults to 'default'.\n * @returns The filtered metric data.\n */\n private filterMultipleScenarios(data: Metric, scenarioId: string) {\n const scenarioDim = data.dimensions.find((dim) => this.isScenarioDim(dim));\n const filteredDimensions = data.dimensions.filter((dim) => !this.isScenarioDim(dim));\n\n if (scenarioDim) {\n const scenarioCat = scenarioDim.categories.find((cat) => cat.originalId === scenarioId);\n // Default to the first scenario category if the specified or default scenario is not found\n const scenarioCatIndex = scenarioCat ? scenarioDim.categories.indexOf(scenarioCat) : 0;\n\n return {\n ...data,\n dimensions: filteredDimensions,\n values: this.filterValuesByScenario(data.values, scenarioCatIndex, scenarioDim),\n };\n }\n\n return data;\n }\n\n constructor(data: Metric, scenarioId: string = 'default') {\n this.data =\n scenarioId === DimensionalMetric.ALL_SCENARIOS\n ? data\n : this.filterMultipleScenarios(data, scenarioId);\n\n this.dimensions = this.data.dimensions.map((dimIn) => {\n const groups = dimIn.groups.map((grpIn) => ({\n ...grpIn,\n categories: dimIn.categories.filter((cat) => cat.group === grpIn.id),\n }));\n const dim = {\n ...dimIn,\n groupsById: new Map(groups.map((grp) => [grp.id, grp])),\n groups: groups,\n };\n return dim;\n });\n this.rows = this.createRows([], this.dimensions, {});\n }\n\n private filterValuesByScenario(\n values: Array,\n scenarioIndex: number,\n scenarioDim?: MetricDimensionInput\n ): Array {\n if (!scenarioDim) return values;\n\n const valuesPerScenario = values.length / scenarioDim.categories.length;\n\n return values.slice(scenarioIndex * valuesPerScenario, (scenarioIndex + 1) * valuesPerScenario);\n }\n\n private createRows(rows: MetricRow[], dimsLeft: MetricDimension[], dimPath: DimCats) {\n const dim = dimsLeft[0];\n\n if (!dim) {\n let idx = rows.length;\n this.data.years.map((year) => {\n const value = this.data.values[idx];\n rows.push({\n year,\n value,\n dimCats: dimPath,\n });\n idx++;\n });\n } else {\n dim.categories.forEach((cat) => {\n const path = {\n ...dimPath,\n [dim.id]: cat,\n };\n this.createRows(rows, dimsLeft.slice(1), path);\n });\n }\n return rows;\n }\n\n /**\n * Checks if the cube has a matching dimension.\n *\n * @param originalDimId The non-prefixed (canonical) id for the dimension\n */\n hasDimension(originalDimId: string) {\n return !!this.dimensions.find((dim) => dim.originalId == originalDimId);\n }\n\n /*\n getLabelForChoice(categoryChoice: MetricCategoryChoice) {\n const parts: string[] = [];\n Object.entries(categoryChoice).forEach(([dimId, catId]) => {\n if (!catId) return;\n const dim = this.data.dimensions.find(dim => dim.id === dimId)!;\n const cat = dim.categories.find(cat => cat.id === catId)!;\n parts.push(cat.label);\n });\n return parts.join(' / ');\n }\n */\n\n getGoalsForChoice(categoryChoice: MetricCategoryChoice | null | undefined) {\n let selectedCategories;\n if (categoryChoice) {\n selectedCategories = Object.values(categoryChoice)\n .map((ch) => ch?.categories ?? [])\n .flat();\n } else {\n selectedCategories = [];\n }\n const catStr = JSON.stringify(selectedCategories.sort()); // JS 🤮\n const goals = this.data.goals.find((g) => JSON.stringify([...g.categories].sort()) == catStr);\n if (!goals) return null;\n return goals.values;\n }\n\n getOptionsForDimension(dimId: string, config: MetricCategoryChoice) {\n const dim = this.data.dimensions.find((dim) => dim.id === dimId)!;\n const choice = config[dimId];\n let opts: { id: string; label: string; selected: boolean }[];\n\n if (dim.groups.length) {\n const selected = choice?.groups || [];\n opts = dim.groups.map((grp) => ({\n id: grp.id,\n label: grp.label,\n selected: selected.some((grpId) => grp.id === grpId),\n }));\n } else {\n const selected = choice?.categories || [];\n opts = dim.categories.map((cat) => ({\n id: cat.id,\n label: cat.label,\n selected: selected.some((catId) => cat.id === catId),\n }));\n }\n return opts;\n }\n\n private choiceToCats(\n dim: MetricDimension,\n old: MetricCategoryChoice,\n newChoice: readonly { id: string }[]\n ) {\n const out = {\n ...old,\n [dim.id]: undefined,\n };\n if (!newChoice.length) return out;\n\n const ids = newChoice.map((ch) => ch.id);\n let val: CatDimChoice;\n if (dim.groups.length) {\n const groups = ids.map((id) => dim.groupsById.get(id)!);\n const cats = groups.map((grp) => grp.categories).flat();\n val = {\n groups: groups.map((grp) => grp.id),\n categories: cats.map((cat) => cat.id),\n };\n } else {\n val = {\n groups: null,\n categories: ids,\n };\n }\n out[dim.id] = val;\n return out;\n }\n\n getSliceableDims(selection: SliceConfig) {\n return this.dimensions.filter((dim) => !selection.categories[dim.id]);\n }\n\n updateChoice(dim: MetricDimension, old: SliceConfig, newChoice: readonly { id: string }[]) {\n let dimensionId = old.dimensionId;\n let sliceableDims = this.getSliceableDims(old);\n if (dimensionId === dim.id) {\n dimensionId = sliceableDims.find((sd) => sd.id !== dim.id)?.id;\n if (!dimensionId && dim.groups.length) {\n dimensionId = dim.id;\n }\n }\n const val = {\n categories: this.choiceToCats(dim, old.categories, newChoice),\n dimensionId,\n };\n if (!dimensionId) {\n sliceableDims = this.getSliceableDims(val);\n if (sliceableDims.length) val.dimensionId = sliceableDims[0].id;\n }\n return val;\n }\n\n /**\n * Get the default dimension slicing config when a goal is selected\n *\n * @param activeGoal - The currently selected goal\n * @returns An object describing the _default_ category selections\n * or `null` if the current goal does not have an effect on this cube.\n */\n getChoicesForGoal(activeGoal: InstanceGoal) {\n const metricDims = new Map(this.dimensions.map((dim) => [dim.originalId, dim]));\n const matchingDims = activeGoal.dimensions.filter((gdim) => metricDims.has(gdim.dimension));\n\n if (!matchingDims.length) return null;\n\n const choice: MetricCategoryChoice = {};\n matchingDims.forEach((gdim) => {\n const metricDim = metricDims.get(gdim.dimension)!;\n let out: CatDimChoice | undefined;\n if (gdim.groups) {\n const grpMap: Map = new Map(\n metricDim.groups.map((grp) => [grp.originalId, grp])\n );\n const groupMatches = gdim.groups\n .filter((grpId) => grpMap.has(grpId))\n .map((grpId) => grpMap.get(grpId)!);\n const catMatches = groupMatches.map((grp) => grp.categories).flat();\n out = {\n groups: groupMatches.map((grp) => grp.id),\n categories: catMatches.map((cat) => cat.id),\n };\n } else {\n const catMatches = metricDim.categories.filter((cat) =>\n gdim.categories.some((goalCat) => goalCat === cat.originalId)\n );\n out = {\n groups: null,\n categories: catMatches.map((cat) => cat.id),\n };\n }\n if (out) choice[metricDim.id] = out;\n });\n return choice;\n }\n\n flatten(categoryChoice: MetricCategoryChoice | undefined) {\n const byYear: Map = new Map();\n this.rows.forEach((row) => {\n const { year } = row;\n if (categoryChoice) {\n if (!this.rowMatchesChoice(row, categoryChoice)) return;\n }\n let val = byYear.get(year) ?? 0;\n const rowVal = row.value;\n if (rowVal !== null) val += rowVal;\n byYear.set(year, val);\n });\n\n const historicalValues: (number | null)[] = [];\n const forecastValues: (number | null)[] = [];\n this.data.years.forEach((year) => {\n const val: number | null = byYear.get(year) ?? null;\n if (this.data.forecastFrom && year >= this.data.forecastFrom) {\n forecastValues.push(val);\n } else {\n historicalValues.push(val);\n }\n });\n const historicalYears = this.data.years.filter((year) =>\n this.data.forecastFrom ? year < this.data.forecastFrom : true\n );\n const forecastYears = this.data.years.filter((year) =>\n this.data.forecastFrom ? year >= this.data.forecastFrom : false\n );\n const out: MetricSliceInput = {\n categoryValues: [\n {\n forecastValues,\n historicalValues,\n category: {\n id: this.data.id,\n label: this.data.name,\n color: null,\n order: null,\n },\n isNegative: false,\n color: null,\n },\n ],\n historicalYears,\n forecastYears,\n totalValues: null,\n dimensionLabel: this.data.name,\n unit: this.data.unit.short,\n };\n return new MetricSlice(out);\n }\n\n /**\n * Get the data for a single year\n * @param year The year to get data for\n * @param categoryChoice The category choice to filter by\n * @returns An object with the data for the year\n */\n getSingleYear(year: number, categoryChoice: MetricCategoryChoice | undefined) {\n // Filter out categories that don't match the current choice and other years\n const yearRows = this.rows.filter(\n (row) =>\n row.year === year && (categoryChoice ? this.rowMatchesChoice(row, categoryChoice) : true)\n );\n\n // Get all labels for easier lookup\n const allLabels = this.dimensions\n .map((dim) =>\n dim.groups.length\n ? dim.groups.map((grp) => ({\n id: grp.id,\n label: grp.label,\n color: grp.color,\n }))\n : dim.categories.map((cat) => ({\n id: cat.id,\n label: cat.label,\n color: cat.color,\n }))\n )\n .flat();\n\n // Get all used dimensions and their categories/groups\n const categoryTypes = this.dimensions.map((dim) => ({\n id: dim.id,\n type: dim.groups.length ? 'group' : 'category',\n options: dim.groups.length\n ? [...new Set(yearRows.map((row) => row.dimCats[dim.id].group!))]\n : [...new Set(yearRows.map((row) => row.dimCats[dim.id].id))],\n }));\n\n const rows = categoryTypes[0].options.map((rowId) =>\n categoryTypes[1].options.map((columnId) => {\n return (\n yearRows.find(\n (yearRow) =>\n ((categoryTypes[0].type === 'group' &&\n yearRow.dimCats[categoryTypes[0].id].group === rowId) ||\n (categoryTypes[0].type === 'category' &&\n yearRow.dimCats[categoryTypes[0].id].id === rowId)) &&\n ((categoryTypes[1].type === 'group' &&\n yearRow.dimCats[categoryTypes[1].id].group === columnId) ||\n (categoryTypes[1].type === 'category' &&\n yearRow.dimCats[categoryTypes[1].id].id === columnId))\n )?.value ?? null\n );\n })\n );\n\n const out = {\n categoryTypes,\n allLabels,\n rows,\n };\n return out;\n }\n\n private isForecastYear(year: number) {\n return this.data.forecastFrom && year >= this.data.forecastFrom;\n }\n\n private rowMatchesChoice(row: MetricRow, categoryChoice: MetricCategoryChoice) {\n const noMatch = Object.entries(categoryChoice).some(([dimId, choice]) => {\n if (!choice) return false;\n if (!choice.categories.length) return false;\n if (!choice.categories.includes(row.dimCats[dimId].id)) return true;\n return false;\n });\n return !noMatch;\n }\n\n sliceBy(\n dimensionId: string,\n sort: boolean = false,\n categoryChoice: MetricCategoryChoice | undefined,\n useGroups: boolean = true\n ) {\n const byYear: Map> = new Map();\n const dim = this.dimensions.find((dim) => dim.id === dimensionId)!;\n\n if (dim.groups.length) {\n if (categoryChoice?.[dim.id]) {\n useGroups = false;\n }\n } else {\n useGroups = false;\n }\n\n this.rows.forEach((row) => {\n const { year } = row;\n\n let catVals = byYear.get(year);\n if (!catVals) {\n catVals = new Map();\n byYear.set(year, catVals);\n }\n // Process only those rows that match the category choices\n if (categoryChoice) {\n if (!this.rowMatchesChoice(row, categoryChoice)) return;\n }\n const cat = row.dimCats[dimensionId];\n const rowId = useGroups ? cat.group! : cat.id;\n let val = catVals.get(rowId);\n if (val === undefined) {\n val = 0;\n }\n const rowVal = row.value;\n // FIXME: What if metric can't be summed?\n if (rowVal !== null) val += rowVal;\n\n catVals.set(rowId, val);\n });\n // FIXME: Should we get this from the theme?\n const totalColor = '#777777';\n const totalValues: MetricCategoryValues = {\n category: {\n id: 'total',\n label: 'total',\n color: totalColor,\n order: null,\n },\n forecastValues: this.data.years\n .filter((year) => this.isForecastYear(year))\n .map((year) => null),\n historicalValues: this.data.years\n .filter((year) => !this.isForecastYear(year))\n .map((year) => null),\n isNegative: false,\n color: totalColor,\n };\n const groupsOrCats = useGroups ? dim.groups : dim.categories;\n const categoryValues: MetricCategoryValues[] = groupsOrCats\n .map((cat: MetricCategoryGroup | MetricDimensionCategory) => {\n const historicalValues: (number | null)[] = [];\n const forecastValues: (number | null)[] = [];\n this.data.years.forEach((year) => {\n const val: number | null = byYear.get(year)!.get(cat.id) ?? null;\n if (this.isForecastYear(year)) {\n forecastValues.push(val);\n } else {\n historicalValues.push(val);\n }\n });\n historicalValues.forEach((val, idx) => {\n if (val === null) return;\n let oldVal = totalValues.historicalValues[idx];\n oldVal = (oldVal ?? 0) + val;\n totalValues.historicalValues[idx] = oldVal;\n });\n forecastValues.forEach((val, idx) => {\n if (val === null) return;\n let oldVal = totalValues.forecastValues[idx];\n oldVal = (oldVal ?? 0) + val;\n totalValues.forecastValues[idx] = oldVal;\n });\n const isNegative = cat.order !== null && cat.order !== undefined ? cat.order < 0 : false;\n return {\n category: cat,\n forecastValues,\n historicalValues,\n isNegative,\n color: cat.color,\n };\n })\n .filter((cv) => {\n const hasVals = [...cv.historicalValues, ...cv.forecastValues].find(\n (val) => val !== null && val != 0\n );\n return hasVals !== undefined;\n });\n\n const historicalYears = this.data.years.filter((year) => !this.isForecastYear(year));\n const forecastYears = this.data.years.filter((year) => this.isForecastYear(year));\n const ordered = categoryValues\n .filter((cv) => cv.category.order != null)\n .sort((a, b) => a.category.order! - b.category.order!);\n const unordered = categoryValues.filter((cv) => cv.category.order == null);\n if (sort) {\n let idx = historicalYears.length - 1;\n let key = 'historicalValues';\n if (idx < 0) {\n idx = forecastYears.length - 1;\n key = 'forecastValues';\n }\n unordered.sort((a, b) => b[key][idx] - a[key][idx]);\n }\n const out: MetricSliceInput = {\n categoryValues: [...ordered, ...unordered],\n historicalYears,\n forecastYears,\n totalValues,\n dimensionLabel: dim.label,\n unit: this.data.unit.short,\n };\n return new MetricSlice(out);\n }\n\n private createFilename() {\n const metricName = slugify(this.data.name, {\n remove: /[*+~.()'\"!:@]/g,\n strict: true,\n lower: true,\n replacement: '_',\n });\n const ts = dayjs().format('YYYY-MM-DD_HHmm');\n return `${metricName}_${ts}`;\n }\n\n async downloadData(config: SliceConfig, format: 'xlsx' | 'csv') {\n let slice: MetricSlice;\n if (config.dimensionId) {\n slice = this.sliceBy(config.dimensionId, false, config.categories, false);\n } else {\n slice = this.flatten(config.categories);\n }\n\n const filename = this.createFilename();\n const table = slice.createTable();\n const rows = table.rows.map((row) => table.header.map((hdr) => row[hdr.key]));\n const header = table.header.map((hdr) => hdr.label);\n if (format === 'csv') {\n const delimiter = ';';\n const lines = [header, ...rows].map((row) =>\n row\n .map((val) => {\n if (val === null) return '';\n if (typeof val === 'number') return val;\n return `\"${String(val).replace(/\"/g, '\"\"')}\"`;\n })\n .join(delimiter)\n );\n const csvAsString = lines.join('\\r\\n');\n // BOM support for special characters in Excel\n const byteOrderMark = '\\ufeff';\n const blob = new Blob([byteOrderMark, csvAsString], {\n type: 'text/csv;charset=utf-8;',\n });\n\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = `${filename}.csv`;\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n return;\n }\n\n const ExcelJS = await import('exceljs');\n const wb = new ExcelJS.Workbook();\n const ws = wb.addWorksheet('Results');\n const tb = ws.addTable({\n name: 'ResultsTable',\n ref: 'A2',\n headerRow: true,\n totalsRow: table.hasTotals,\n style: {\n showRowStripes: true,\n theme: 'TableStyleLight1',\n },\n columns: header.map((label, idx) => {\n return {\n name: label.toString(),\n filterButton: idx == 0,\n totalsRowFunction: table.hasTotals && idx > 0 ? 'sum' : 'none',\n };\n }),\n rows: rows,\n });\n tb.commit();\n const fontConfig: Partial = {\n name: 'Calibri',\n };\n const firstRow = ws.getRow(1);\n if (header[0] !== this.data.name) {\n firstRow.getCell(1).value = this.data.name;\n }\n\n firstRow.getCell(2).value = slice.unit;\n firstRow.font = { ...fontConfig };\n\n const hdrRow = ws.getRow(2);\n hdrRow.font = {\n ...fontConfig,\n bold: true,\n };\n ws.views.push({\n state: 'frozen',\n ySplit: 2,\n xSplit: 1,\n });\n\n const hdrCol = ws.getColumn(1);\n hdrCol.width = 32;\n ws.columns.forEach((col, idx) => {\n const style: Partial