{"version":3,"mappings":"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","names":["WarningService","geoJson","__request","OpenAPI","id","ids","MeteoMapsService","requestBody","mapgroupUrn","mapUrn","SvgRain","props","React.createElement","SvgSun","SvgSunrise","SvgSunset","SvgWind","formatRainProbability","rainProbability","rainProbabilityText","DailyWeatherOverview","forecastPointWeek","activeDate","useForecastAppContext","t","currentLocale","useTranslations","currentDay","getCurrentDay","timezone","_a","weatherSummaryItems","jsx","RainIcon","SunIcon","WindIcon","SunriseIcon","getFormattedTimestring","SunsetIcon","Fragment","jsxs","formatAsWeekday","getFormattedDate","renderWeatherSummary","item","index","BARS_MAX_HEIGHT","Bars","values","unit","scalingFactor","barBackgroundColorClassName","withDivider","classNames","value","scaledValue","rowStart","rowSpan","column","BARS_LABEL_HEIGHT","BarsLabel","topLabel","bottomLabel","HourLabel","label","isBold","testId","SnowItem","intervalType","hour","boldLabel","snowAmount","snowAmountInCm","barScalingFactor","MaskedIcon","iconUrl","fadePercentage","bgColor","SvgHeart","TemperatureLabel","temperature","feltTemperature","hasFeelsLikeTemperature","HeartIcon","SunIconUrl","TemperatureItem","isIconAnimated","symbolTexts","symbol_code","sunshineDuration","expectedTemperature","rainAmount","isLessThanFivePercentProbability","getSunMinPercent","maxDuration","WeatherIcon","SvgWindArrow","SvgWindCircle","WIND_BARS_SCALING_FACTOR","WindItem","isDarkMode","useDarkMode","windDirection","avgWind","gustSpeed","WindArrow","WindCircle","getWindDirectionText","deg","WIND_DIRECTIONS","range","first","last","ItemWrapper","representation","isLabelBold","hasDivider","DAY_SEPARATOR_WIDTH","IntervalContainer","intervals","dayRefs","useState","intervalTypeSwitchIndex","NUMBER_OF_DAYS_FOR_FORECAST_IN_FUTURE","intervalIndicesPerDay","getIntervalStartIndicesPerDay","dayIndices","day","MAX_NUMBER_OF_DAYS_FOR_FORECAST","getDayLabel","dayIndex","interval","intervalsForDay","referenceInterval","dayIdentifier","formatAsIsoStyleDate","dayLabel","hasIntervalTypeChangeSeparator","intervalIndex","intervalIdentifier","intervalLabel","hasDayLabel","isIntervalLabelBold","hasIntervalDivider","_b","SvgCaret","ScrollButton","disabled","onClick","direction","isVisible","keyboardNavigationRef","useRef","handleKeyDown","e","handleBlur","forceMoveFlyingFocus","Caret","ascending","a","b","descending","bisector","f","compare1","compare2","delta","d","x","zero","left","lo","hi","mid","right","center","i","number","ascendingBisect","bisectRight","e10","e5","e2","tickSpec","start","stop","count","step","power","error","factor","i1","i2","inc","ticks","reverse","n","tickIncrement","tickStep","initRange","domain","define","constructor","factory","prototype","extend","parent","definition","key","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","m","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","o","rgb","opacity","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","min","max","hsl","m2","m1","hsl2rgb","clamph","clampt","constant$1","linear","exponential","y","gamma","nogamma","constant","rgbGamma","end","colorRgb","numberArray","c","isNumberArray","genericArray","nb","na","date","interpolateNumber","object","reA","reB","one","string","bi","am","bm","bs","q","interpolate","interpolateRound","constants","identity","normalize","clamper","bimap","d0","d1","r0","r1","polymap","j","bisect","copy","source","target","transformer","interpolateValue","transform","untransform","unknown","clamp","piecewise","output","input","rescale","scale","_","u","continuous","formatDecimal","formatDecimalParts","p","coefficient","exponent","formatGroup","grouping","thousands","width","length","formatNumerals","numerals","re","formatSpecifier","specifier","match","FormatSpecifier","formatTrim","out","i0","prefixExponent","formatPrefixAuto","formatRounded","formatTypes","map","prefixes","formatLocale","locale","group","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","fill","align","sign","symbol","comma","precision","trim","type","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","tickFormat","linearish","prestep","maxIter","pi","tau","epsilon","tauEpsilon","append","strings","appendRound","digits","Path","x1","y1","x2","y2","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","a1","ccw","dx","dy","cw","da","w","withPath","shape","array","Linear","context","curveLinear","line","defined","curve","path","pointX","pointY","data","defined0","buffer","slope3","that","h0","h1","s0","s1","slope2","point","t0","t1","MonotoneX","monotoneX","LINE_WIDTH","WindLine","ref","useResizeObserver","xValues","xMin","xMax","yMin","yMax","height","xScale","scaleLinear","yScale","linePath","curveMonotoneX","LegendLabel","legendItems","getTemperatureLegend","TEMPERATURE_LEGEND","WIND_LEGEND","SNOW_LEGEND","NavigationContainer","forwardRef","canNavigateLeft","canNavigateRight","navigateLeft","navigateRight","handleScroll","handleMouseWheelScroll","isScrollButtonVisible","setIsScrollButtonVisible","innerHandleScroll","innerHandleMouseWheelScroll","RADAR_URN","radarTeaserFallback","RadarTeaser","env","teaserImages","setTeaserImages","useEffect","radarMapgroup","_d","_c","TeaserWrapper","title","redirectUrl","children","headerTestId","WeatherReportTeaser","article","useArticle","Error","Figure","TEASER_CONFIG","businessUnit","TeaserContainer","useBusinessUnit","visibleTeasers","teaser","REPRESENTATIONS","SCROLL_HANDLER_DEBOUNCE_TIME","MOUSE_WHEEL_SCROLL_HANDLER_DEBOUNCE_TIME","SCROLL_STEP","NAVIGATE_DEBOUNCE_TIME","useScrollInteractions","dispatch","useForecastAppDispatcher","scrollXPosition","setScrollXPosition","previousActiveDate","animateScroll","checkForScrollPositionCrossedDateBoundary","containerRefs","createRef","createRepresentationRefs","activeNavigationContainerRef","dayIndexLookup","setCanNavigateLeft","setCanNavigateRight","getMaxScrollablePosition","containerElement","getActiveDateFromScrollPosition","referencePoint","bias","daysLeftOfReferencePoint","ax","bx","updateScrollXPosition","position","skipCheckForScrollPositionCrossedDateBoundary","useDebounceCallback","previousScrollXPosition","_e","sourceRef","scrollPosition","previousPosition","handler","scrollToDate","dayRef","dayElement","scrollContainersToPosition","animateScrollToPosition","trackActiveContainer","scrollBindings","element","listener","dateFromScrollPosition","dateIndex","trackDaySelection","days","dayDates","dayDate","WeatherDetailsContainer","ContentContainer","Day","rainAmountInSegments","isActive","onSelect","symbolText","symbolCode","temperatureLow","temperatureHigh","isHovered","setIsHovered","updateDateQueryParamValue","useQueryParam","isWeatherIconAnimated","useAnimatedWeatherIcons","setDays","setTimezone","handleDaySelect","scrollElementToViewport","useCallback","dateOnly","getRainAmountsInSegmentsForDate","three_hours","getValidForecastDays","localDateTime","localDateOnly","Switch","className","_id","_type","restProps","generatedId","useId","switchRef","onKeyUp","LocationDisplay","geolocationName","useGeolocationName","setIsWeatherIconAnimated","SvgArrow","Dropdown","icon","offscreenTitle","expanded","setExpanded","Arrow","SvgFrost","SvgHeavyrain","SvgIcy","SvgSnow","SvgThunderstorms","SvgWarning","priorityColor","warningIcon","Warning","Frost","Lightning","Ice","Rain","Snow","Wind","WeatherWarningIcon","priority","WarningIcon","useWarnings","warnings","setWarnings","response","WeatherWarning","maxPriority","dropdownContent","warning","LocationContainer","usePathCoordinates","coordinates","setCoordinates","useForecastPointWeek","geolcationIdFallback","setForecastPointWeek","setError","geolocationId","ForecastService","getValidForecastPointWeek","ForecastDebugTools","lazy","__vitePreload","module","ForecastApp","devMode","contextEnv","useSymbolTexts","currentDateQueryValue","isLoading","setIsLoading","analyticsStats","setAnalyticsStats","sentryConsentInitialised","sentryConsentActive","useConsentManagement","SENTRY_CONSENT_UC_ID","enrichErrorsWithGeolocation","isValidIsoDate","today","toUtcDate","todayDateOnly","enableOrDisableSentryBasedOnConsent","getTrackingReferrer","Suspense","SearchContainer","Loading"],"ignoreList":[26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73],"sources":["../../meteoapi/client/services/WarningService.ts","../../meteomaps-api/client/services/MeteoMapsService.ts","../../src/resources/images/iconsets/rain.svg?react","../../src/resources/images/iconsets/sun.svg?react","../../src/resources/images/iconsets/sunrise.svg?react","../../src/resources/images/iconsets/sunset.svg?react","../../src/resources/images/iconsets/wind.svg?react","../../src/utils/format.ts","../../src/components/forecast/DailyWeatherOverview.tsx","../../src/constants/bars.ts","../../src/components/forecast/Bars.tsx","../../src/components/forecast/label/BarsLabel.tsx","../../src/components/forecast/label/HourLabel.tsx","../../src/components/forecast/hourly/SnowItem.tsx","../../src/components/forecast/icon/MaskedIcon.tsx","../../src/resources/images/iconsets/heart.svg?react","../../src/components/forecast/label/TemperatureLabel.tsx","../../src/resources/images/iconsets/sun.svg","../../src/components/forecast/hourly/TemperatureItem.tsx","../../src/resources/images/iconsets/wind-arrow.svg?react","../../src/resources/images/iconsets/wind-circle.svg?react","../../src/components/forecast/hourly/WindItem.tsx","../../src/components/forecast/hourly/ItemWrapper.tsx","../../src/components/forecast/hourly/IntervalContainer.tsx","../../src/resources/images/iconsets/caret.svg?react","../../src/components/forecast/hourly/ScrollButton.tsx","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js","../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/constant.js","../../node_modules/.pnpm/d3-path@3.1.0/node_modules/d3-path/src/path.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/path.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/array.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/linear.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/point.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/line.js","../../node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/curve/monotone.js","../../src/components/forecast/hourly/WindLine.tsx","../../src/components/forecast/label/LegendLabel.tsx","../../src/constants/legend.tsx","../../src/components/forecast/hourly/NavigationContainer.tsx","../../src/constants/radarUrn.ts","../../src/resources/images/iconsets/srf_radar_teaser_fallback.png","../../src/components/teaser/RadarTeaser.tsx","../../src/components/teaser/TeaserWrapper.tsx","../../src/components/teaser/WeatherReportTeaser.tsx","../../src/components/teaser/TeaserContainer.tsx","../../src/constants/representation.ts","../../src/hooks/useScrollInteractions.ts","../../src/components/forecast/WeatherDetailsContainer.tsx","../../src/components/forecast/daily/Day.tsx","../../src/components/forecast/daily/NavigationContainer.tsx","../../src/components/forecast/Switch.tsx","../../src/components/forecast/location/LocationDisplay.tsx","../../src/resources/images/iconsets/arrow.svg?react","../../src/components/forecast/Dropdown.tsx","../../src/resources/images/iconsets/weather_warnings/frost.svg?react","../../src/resources/images/iconsets/weather_warnings/heavyrain.svg?react","../../src/resources/images/iconsets/weather_warnings/icy.svg?react","../../src/resources/images/iconsets/weather_warnings/snow.svg?react","../../src/resources/images/iconsets/weather_warnings/thunderstorms.svg?react","../../src/resources/images/iconsets/weather_warnings/warning.svg?react","../../src/resources/images/iconsets/weather_warnings/wind.svg?react","../../src/utils/weatherWarning.tsx","../../src/components/forecast/location/WeatherWarningIcon.tsx","../../src/hooks/useWarnings.ts","../../src/components/forecast/location/WeatherWarning.tsx","../../src/components/forecast/location/LocationContainer.tsx","../../src/hooks/usePathCoordinates.ts","../../src/hooks/useForecastPointWeek.ts","../../src/ForecastApp.tsx"],"sourcesContent":["/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { Warning } from '../models/Warning';\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport { OpenAPI } from '../core/OpenAPI';\nimport { request as __request } from '../core/request';\nexport class WarningService {\n    /**\n     * Returns all currently active warnings (ordered by priority desc and start asc)\n     * @returns Warning Returned when successful\n     * @throws ApiError\n     */\n    public static getWarnings({\n        geoJson,\n    }: {\n        /**\n         * whether or not response should include geoJson information, default false\n         */\n        geoJson?: boolean,\n    }): CancelablePromise<Array<Warning>> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/warning',\n            query: {\n                'geoJson': geoJson,\n            },\n        });\n    }\n    /**\n     * Returns warnings for a region (ordered by priority desc and start asc)\n     * @returns Warning Returned when successful\n     * @throws ApiError\n     */\n    public static getWarningById({\n        id,\n        geoJson,\n    }: {\n        id: string,\n        /**\n         * whether or not response should include geoJson information, default false\n         */\n        geoJson?: boolean,\n    }): CancelablePromise<Array<Warning>> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/warning/id/{id}',\n            path: {\n                'id': id,\n            },\n            query: {\n                'geoJson': geoJson,\n            },\n            errors: {\n                404: `Returned when the region id is not known`,\n            },\n        });\n    }\n    /**\n     * @deprecated\n     * Returns warnings for several regions (ordered by priority desc and start asc)\n     * @returns Warning Returned when successful\n     * @throws ApiError\n     */\n    public static getWarningByIds({\n        ids,\n        geoJson,\n    }: {\n        ids: string,\n        /**\n         * whether or not response should include geoJson information, default false\n         */\n        geoJson?: boolean,\n    }): CancelablePromise<Array<Warning>> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/warning/ids/{ids}',\n            path: {\n                'ids': ids,\n            },\n            query: {\n                'geoJson': geoJson,\n            },\n            errors: {\n                404: `Returned when the region id is not known`,\n            },\n        });\n    }\n}\n","/* generated using openapi-typescript-codegen -- do not edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { CreateMap } from '../models/CreateMap';\nimport type { CreateMapgroup } from '../models/CreateMapgroup';\nimport type { Map } from '../models/Map';\nimport type { MapCollection } from '../models/MapCollection';\nimport type { Mapgroup } from '../models/Mapgroup';\nimport type { MapgroupsCollection } from '../models/MapgroupsCollection';\nimport type { MapgroupWithMaps } from '../models/MapgroupWithMaps';\nimport type { UpdateMap } from '../models/UpdateMap';\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport { OpenAPI } from '../core/OpenAPI';\nimport { request as __request } from '../core/request';\nexport class MeteoMapsService {\n    /**\n     * Fetch all Mapgroups\n     * @returns MapgroupsCollection ok\n     * @throws ApiError\n     */\n    public static getMapgroups(): CancelablePromise<MapgroupsCollection> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/mapgroups',\n        });\n    }\n    /**\n     * Add a new Mapgroup\n     * @returns Mapgroup created\n     * @throws ApiError\n     */\n    public static createMapgroup({\n        requestBody,\n    }: {\n        requestBody: CreateMapgroup,\n    }): CancelablePromise<Mapgroup> {\n        return __request(OpenAPI, {\n            method: 'POST',\n            url: '/mapgroups',\n            body: requestBody,\n            mediaType: 'application/json',\n            errors: {\n                400: `invalid mapgroup body`,\n            },\n        });\n    }\n    /**\n     * Get a Mapgroup\n     * @returns MapgroupWithMaps ok\n     * @throws ApiError\n     */\n    public static getMapgroup({\n        mapgroupUrn,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n    }): CancelablePromise<MapgroupWithMaps> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/mapgroups/{mapgroupUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n            },\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Update only certain attributes of a Mapgroup\n     * @returns Mapgroup updated\n     * @throws ApiError\n     */\n    public static updateMapgroup({\n        mapgroupUrn,\n        requestBody,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        requestBody: UpdateMap,\n    }): CancelablePromise<Mapgroup> {\n        return __request(OpenAPI, {\n            method: 'PATCH',\n            url: '/mapgroups/{mapgroupUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n            },\n            body: requestBody,\n            mediaType: 'application/json',\n            errors: {\n                400: `invalid patch mapgroup body`,\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Replace a Mapgroup\n     * @returns Mapgroup updated\n     * @throws ApiError\n     */\n    public static replaceMapgroup({\n        mapgroupUrn,\n        requestBody,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        requestBody: CreateMapgroup,\n    }): CancelablePromise<Mapgroup> {\n        return __request(OpenAPI, {\n            method: 'PUT',\n            url: '/mapgroups/{mapgroupUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n            },\n            body: requestBody,\n            mediaType: 'application/json',\n            errors: {\n                400: `invalid mapgroup body`,\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Delete a Mapgroup\n     * @returns void\n     * @throws ApiError\n     */\n    public static deleteMapgroup({\n        mapgroupUrn,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n    }): CancelablePromise<void> {\n        return __request(OpenAPI, {\n            method: 'DELETE',\n            url: '/mapgroups/{mapgroupUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n            },\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Get all Maps of a Mapgroup\n     * @returns MapCollection ok\n     * @throws ApiError\n     */\n    public static getMapgroupMaps({\n        mapgroupUrn,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n    }): CancelablePromise<MapCollection> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/mapgroups/{mapgroupUrn}/maps',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n            },\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Create a new Map in the Mapgroup\n     * @returns Map created\n     * @throws ApiError\n     */\n    public static createMap({\n        mapgroupUrn,\n        requestBody,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        requestBody: CreateMap,\n    }): CancelablePromise<Map> {\n        return __request(OpenAPI, {\n            method: 'POST',\n            url: '/mapgroups/{mapgroupUrn}/maps',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n            },\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Get a Map\n     * @returns Map ok\n     * @throws ApiError\n     */\n    public static getMap({\n        mapgroupUrn,\n        mapUrn,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        /**\n         * URN of Map\n         */\n        mapUrn: string,\n    }): CancelablePromise<Map> {\n        return __request(OpenAPI, {\n            method: 'GET',\n            url: '/mapgroups/{mapgroupUrn}/maps/{mapUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n                'mapUrn': mapUrn,\n            },\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Update only certain attributes of a Map\n     * @returns Map ok\n     * @throws ApiError\n     */\n    public static updateMap({\n        mapgroupUrn,\n        mapUrn,\n        requestBody,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        /**\n         * URN of Map\n         */\n        mapUrn: string,\n        requestBody: UpdateMap,\n    }): CancelablePromise<Map> {\n        return __request(OpenAPI, {\n            method: 'PATCH',\n            url: '/mapgroups/{mapgroupUrn}/maps/{mapUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n                'mapUrn': mapUrn,\n            },\n            body: requestBody,\n            mediaType: 'application/json',\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Replace a Map\n     * @returns Map ok\n     * @throws ApiError\n     */\n    public static replaceMap({\n        mapgroupUrn,\n        mapUrn,\n        requestBody,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        /**\n         * URN of Map\n         */\n        mapUrn: string,\n        requestBody: CreateMap,\n    }): CancelablePromise<Map> {\n        return __request(OpenAPI, {\n            method: 'PUT',\n            url: '/mapgroups/{mapgroupUrn}/maps/{mapUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n                'mapUrn': mapUrn,\n            },\n            body: requestBody,\n            mediaType: 'application/json',\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n    /**\n     * Delete a Map\n     * @returns void\n     * @throws ApiError\n     */\n    public static deleteMap({\n        mapgroupUrn,\n        mapUrn,\n    }: {\n        /**\n         * URN of Mapgroup\n         */\n        mapgroupUrn: string,\n        /**\n         * URN of Map\n         */\n        mapUrn: string,\n    }): CancelablePromise<void> {\n        return __request(OpenAPI, {\n            method: 'DELETE',\n            url: '/mapgroups/{mapgroupUrn}/maps/{mapUrn}',\n            path: {\n                'mapgroupUrn': mapgroupUrn,\n                'mapUrn': mapUrn,\n            },\n            errors: {\n                404: `not found`,\n            },\n        });\n    }\n}\n","import * as React from \"react\";\nconst SvgRain = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.1011 14.3715C17.1011 17.1981 14.8912 19.5 12.1505 19.5C9.40955 19.5 7.19995 17.1983 7.19995 14.3715C7.19995 13.3688 7.74273 11.8648 8.70211 9.91697C8.92167 9.47121 9.16035 9.0088 9.41526 8.53338C9.88761 7.65241 10.393 6.76805 10.8983 5.92252C11.2017 5.4148 11.4383 5.03196 11.5747 4.81675C11.8424 4.39442 12.4586 4.39442 12.7264 4.81675C12.8628 5.03196 13.0994 5.4148 13.4028 5.92252C13.9081 6.76805 14.4135 7.65241 14.8858 8.53338C15.1407 9.0088 15.3794 9.47121 15.599 9.91697C16.5584 11.8648 17.1011 13.3688 17.1011 14.3715Z\", fill: \"currentColor\" }));\nexport default SvgRain;\n","import * as React from \"react\";\nconst SvgSun = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M12.7962 3.79624V5.24396C12.7962 5.68371 12.4397 6.04019 12 6.04019C11.5603 6.04019 11.2038 5.68371 11.2038 5.24396V3.79624C11.2038 3.35649 11.5603 3 12 3C12.4397 3 12.7962 3.35649 12.7962 3.79624ZM6.7413 5.63057L7.76499 6.65427C8.07594 6.96522 8.07594 7.46937 7.76499 7.78031C7.45404 8.09126 6.94989 8.09126 6.63894 7.78031L5.61525 6.75662C5.3043 6.44567 5.3043 5.94152 5.61525 5.63057C5.9262 5.31962 6.43035 5.31962 6.7413 5.63057ZM17.3195 7.78031L18.3432 6.75662C18.6541 6.44567 18.6541 5.94152 18.3432 5.63057C18.0322 5.31962 17.5281 5.31962 17.2171 5.63057L16.1934 6.65427C15.8825 6.96522 15.8825 7.46937 16.1934 7.78031C16.5044 8.09126 17.0085 8.09126 17.3195 7.78031ZM16.1934 17.3348L17.2171 18.3585C17.5281 18.6694 18.0322 18.6694 18.3432 18.3585C18.6541 18.0475 18.6541 17.5434 18.3432 17.2324L17.3195 16.2088C17.0085 15.8978 16.5044 15.8978 16.1934 16.2088C15.8825 16.5197 15.8825 17.0239 16.1934 17.3348ZM6.63894 16.2088L5.61525 17.2324C5.3043 17.5434 5.3043 18.0475 5.61525 18.3585C5.9262 18.6694 6.43035 18.6694 6.7413 18.3585L7.76499 17.3348C8.07594 17.0239 8.07594 16.5197 7.76499 16.2088C7.45404 15.8978 6.94989 15.8978 6.63894 16.2088ZM11.2038 20.2038V18.756C11.2038 18.3163 11.5603 17.9598 12 17.9598C12.4397 17.9598 12.7962 18.3163 12.7962 18.756V20.2038C12.7962 20.6435 12.4397 21 12 21C11.5603 21 11.2038 20.6435 11.2038 20.2038ZM18.756 12.7962H20.2038C20.6435 12.7962 21 12.4397 21 12C21 11.5603 20.6435 11.2038 20.2038 11.2038H18.756C18.3163 11.2038 17.9598 11.5603 17.9598 12C17.9598 12.4397 18.3163 12.7962 18.756 12.7962ZM5.24396 11.2038H3.79624C3.35649 11.2038 3 11.5603 3 12C3 12.4397 3.35649 12.7962 3.79624 12.7962H5.24396C5.68371 12.7962 6.04019 12.4397 6.04019 12C6.04019 11.5603 5.68371 11.2038 5.24396 11.2038ZM12 17C14.761 17 17 14.7623 17 12C17 9.23812 14.7608 7 12 7C9.2388 7 7 9.23794 7 12C7 14.7624 9.23862 17 12 17Z\", fill: \"currentColor\" }));\nexport default SvgSun;\n","import * as React from \"react\";\nconst SvgSunrise = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M12 7.54019C12.4397 7.54019 12.7962 7.18371 12.7962 6.74396V5.29624C12.7962 4.85649 12.4397 4.5 12 4.5C11.5603 4.5 11.2038 4.85649 11.2038 5.29624V6.74396C11.2038 7.18371 11.5603 7.54019 12 7.54019ZM7.76499 9.28031C8.07594 8.96937 8.07594 8.46522 7.76499 8.15427L6.7413 7.13057C6.43035 6.81962 5.9262 6.81962 5.61525 7.13057C5.3043 7.44152 5.3043 7.94567 5.61525 8.25662L6.63894 9.28031C6.94989 9.59126 7.45404 9.59126 7.76499 9.28031ZM16.1934 9.28031C16.5044 9.59126 17.0085 9.59126 17.3195 9.28031L18.3432 8.25662C18.6541 7.94567 18.6541 7.44152 18.3432 7.13057C18.0322 6.81962 17.5281 6.81962 17.2171 7.13057L16.1934 8.15427C15.8825 8.46522 15.8825 8.96937 16.1934 9.28031ZM18.756 14.2962C18.3163 14.2962 17.9598 13.9397 17.9598 13.5C17.9598 13.0603 18.3163 12.7038 18.756 12.7038H20.2038C20.6435 12.7038 21 13.0603 21 13.5C21 13.9397 20.6435 14.2962 20.2038 14.2962H18.756ZM5.24396 12.7038C5.68371 12.7038 6.04019 13.0603 6.04019 13.5C6.04019 13.9397 5.68371 14.2962 5.24396 14.2962H3.79624C3.35649 14.2962 3 13.9397 3 13.5C3 13.0603 3.35649 12.7038 3.79624 12.7038H5.24396ZM16.6585 15.9077C17.0231 15.1917 17.2661 14.3528 17.2661 13.4945C17.2661 10.582 14.8984 8.22185 11.9792 8.22185C9.05958 8.22185 6.69232 10.5818 6.69232 13.4945C6.69232 14.3643 6.90332 15.1847 7.27703 15.9077H9.18945C8.62584 15.2616 8.28479 14.4178 8.28479 13.4945C8.28479 11.4624 9.93798 9.81432 11.9792 9.81432C14.0201 9.81432 15.6736 11.4627 15.6736 13.4945C15.6736 14.3962 15.3346 15.2674 14.7941 15.9077H16.6585ZM3.22442 16.7073C3.22442 17.1471 3.58091 17.5035 4.02066 17.5035H19.9454C20.3851 17.5035 20.7416 17.1471 20.7416 16.7073C20.7416 16.2676 20.3851 15.9111 19.9454 15.9111H4.02066C3.58091 15.9111 3.22442 16.2676 3.22442 16.7073Z\", fill: \"currentColor\" }));\nexport default SvgSunrise;\n","import * as React from \"react\";\nconst SvgSunset = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M12 15.9632C12.4397 15.9632 12.7962 16.3197 12.7962 16.7595V18.2072C12.7962 18.6469 12.4397 19.0034 12 19.0034C11.5603 19.0034 11.2038 18.6469 11.2038 18.2072V16.7595C11.2038 16.3197 11.5603 15.9632 12 15.9632ZM7.76499 14.2231C8.07594 14.5341 8.07594 15.0382 7.76499 15.3491L6.7413 16.3728C6.43035 16.6838 5.9262 16.6838 5.61525 16.3728C5.3043 16.0619 5.3043 15.5577 5.61525 15.2468L6.63894 14.2231C6.94989 13.9122 7.45404 13.9122 7.76499 14.2231ZM16.1934 14.2231C16.5044 13.9122 17.0085 13.9122 17.3195 14.2231L18.3432 15.2468C18.6541 15.5577 18.6541 16.0619 18.3432 16.3728C18.0322 16.6838 17.5281 16.6838 17.2171 16.3728L16.1934 15.3491C15.8825 15.0382 15.8825 14.5341 16.1934 14.2231ZM18.756 9.20718C18.3163 9.20718 17.9598 9.56367 17.9598 10.0034C17.9598 10.4432 18.3163 10.7997 18.756 10.7997H20.2038C20.6435 10.7997 21 10.4432 21 10.0034C21 9.56367 20.6435 9.20718 20.2038 9.20718H18.756ZM5.24396 10.7997C5.68371 10.7997 6.04019 10.4432 6.04019 10.0034C6.04019 9.56367 5.68371 9.20718 5.24396 9.20718H3.79624C3.35649 9.20718 3 9.56367 3 10.0034C3 10.4432 3.35649 10.7997 3.79624 10.7997H5.24396ZM16.6585 7.59574C17.0231 8.31175 17.2661 9.15062 17.2661 10.0089C17.2661 12.9214 14.8984 15.2816 11.9792 15.2816C9.05958 15.2816 6.69232 12.9216 6.69232 10.0089C6.69232 9.13914 6.90332 8.31873 7.27703 7.59574H9.18945C8.62584 8.24182 8.28479 9.08566 8.28479 10.0089C8.28479 12.041 9.93798 13.6891 11.9792 13.6891C14.0201 13.6891 15.6736 12.0408 15.6736 10.0089C15.6736 9.10721 15.3346 8.236 14.7941 7.59574H16.6585ZM3.22442 6.79611C3.22442 6.35637 3.58091 5.99988 4.02066 5.99988H19.9454C20.3851 5.99988 20.7416 6.35637 20.7416 6.79611C20.7416 7.23586 20.3851 7.59235 19.9454 7.59235H4.02066C3.58091 7.59235 3.22442 7.23586 3.22442 6.79611Z\", fill: \"currentColor\" }));\nexport default SvgSunset;\n","import * as React from \"react\";\nconst SvgWind = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1 8H12.5556C13.2039 8 13.8256 7.73661 14.284 7.26777C14.7425 6.79892 15 6.16304 15 5.5C15 4.83696 14.7425 4.20107 14.284 3.73223C13.8256 3.26339 13.2039 3 12.5556 3H11.3333\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M4 16H13.9048C14.4605 16 14.9934 16.2107 15.3863 16.5858C15.7793 16.9609 16 17.4696 16 18C16 18.5304 15.7793 19.0391 15.3863 19.4142C14.9934 19.7893 14.4605 20 13.9048 20H12.8571\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M7 12H19.7302C20.3322 12 20.9095 11.7366 21.3352 11.2678C21.7609 10.7989 22 10.163 22 9.5C22 8.83696 21.7609 8.20107 21.3352 7.73223C20.9095 7.26339 20.3322 7 19.7302 7H18.5952\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgWind;\n","export const formatRainProbability = (rainProbability: number): string => {\n  let rainProbabilityText = rainProbability?.toString();\n  if (rainProbability > 95) {\n    return (rainProbabilityText = \">95\");\n  } else if (rainProbability < 5) {\n    return (rainProbabilityText = \"<5\");\n  } else {\n    return rainProbabilityText;\n  }\n};\n","import { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport RainIcon from \"@Resources/images/iconsets/rain.svg?react\";\nimport SunIcon from \"@Resources/images/iconsets/sun.svg?react\";\nimport SunriseIcon from \"@Resources/images/iconsets/sunrise.svg?react\";\nimport SunsetIcon from \"@Resources/images/iconsets/sunset.svg?react\";\nimport WindIcon from \"@Resources/images/iconsets/wind.svg?react\";\n\nimport {\n  formatAsWeekday,\n  getCurrentDay,\n  getFormattedDate,\n  getFormattedTimestring,\n} from \"@Utils/date\";\nimport { formatRainProbability } from \"@Utils/format\";\nimport React from \"react\";\n\ntype WeatherSummaryItem = {\n  icon: React.JSX.Element;\n  description: string;\n  a11yLabel: string;\n  classNames?: string;\n  testid?: string;\n};\n\nexport const DailyWeatherOverview = () => {\n  const { forecastPointWeek, activeDate } = useForecastAppContext();\n  const { t, currentLocale } = useTranslations();\n\n  const currentDay = getCurrentDay(forecastPointWeek, activeDate.value);\n  const timezone = forecastPointWeek?.geolocation?.timezone ?? \"Europe/Zurich\";\n\n  const weatherSummaryItems: WeatherSummaryItem[] = [\n    {\n      icon: (\n        <RainIcon\n          className=\"m:text-warmgrey-900 m:dark:text-blue-200\"\n          aria-hidden\n        />\n      ),\n      description: `${currentDay.RRR_MM} mm / ${formatRainProbability(currentDay.PROBPCP_PERCENT)} %`,\n      a11yLabel: t(\"weatherSummary.a11yRain\", {\n        RRR_MM: currentDay.RRR_MM,\n        PROBPCP_PERCENT: formatRainProbability(currentDay.PROBPCP_PERCENT),\n      }),\n      testid: \"daily-weather-overview-item-precipitation\",\n    },\n    {\n      icon: (\n        <SunIcon\n          className=\"m:text-warmgrey-900 m:dark:text-blue-200\"\n          aria-hidden\n        />\n      ),\n      description: `${currentDay.SUN_H} h`,\n      a11yLabel: t(\"weatherSummary.a11ySun\", {\n        SUN_H: currentDay.SUN_H,\n      }),\n      testid: \"daily-weather-overview-item-sun\",\n    },\n    {\n      icon: (\n        <WindIcon\n          className=\"m:text-warmgrey-900 m:dark:text-blue-200\"\n          aria-hidden\n        />\n      ),\n      description: `${currentDay.FF_KMH} | ${currentDay.FX_KMH} km/h`,\n      classNames: \"m:stroke-warmgrey-900 m:dark:stroke-blue-200 m:fill-none\",\n      a11yLabel: t(\"weatherSummary.a11yWind\", {\n        FF_KMH: currentDay.FF_KMH,\n        FX_KMH: currentDay.FX_KMH,\n      }),\n      testid: \"daily-weather-overview-item-wind\",\n    },\n    {\n      icon: (\n        <SunriseIcon\n          className=\"m:text-warmgrey-900 m:dark:text-blue-200\"\n          aria-hidden\n        />\n      ),\n      description: getFormattedTimestring(\n        currentDay.SUNRISE,\n        timezone,\n        currentLocale,\n      ),\n      a11yLabel: t(\"weatherSummary.a11ySunrise\", {\n        SUNRISE: getFormattedTimestring(\n          currentDay.SUNRISE,\n          timezone,\n          currentLocale,\n        ),\n      }),\n      testid: \"daily-weather-overview-item-sunrise\",\n    },\n    {\n      icon: (\n        <SunsetIcon\n          className=\"m:text-warmgrey-900 m:dark:text-blue-200\"\n          aria-hidden\n        />\n      ),\n      description: getFormattedTimestring(\n        currentDay.SUNSET,\n        timezone,\n        currentLocale,\n      ),\n      a11yLabel: t(\"weatherSummary.a11ySunset\", {\n        SUNSET: getFormattedTimestring(\n          currentDay.SUNSET,\n          timezone,\n          currentLocale,\n        ),\n      }),\n      testid: \"daily-weather-overview-item-sunset\",\n    },\n  ];\n\n  return (\n    <>\n      <section\n        className=\"m:flex m:flex-row m:px-4 m:antialiased m:md:px-8 m:xl:px-10\"\n        aria-live=\"polite\">\n        <div\n          className=\"m:md:flex m:md:flex-row\"\n          data-testid=\"daily-weather-overview\">\n          <div className=\"m:mr-8 m:flex m:max-w-12 m:flex-col m:font-medium m:break-normal!\">\n            <h3\n              className=\"m:m-0 m:p-0 m:text-2xl m:leading-[20px] m:tracking-0.2 m:text-blue-950 m:lg:text-4xl m:lg:leading-[25px] m:dark:text-neutral-white\"\n              data-testid=\"daily-weather-overview-title\">\n              {formatAsWeekday(currentDay.date_time, timezone, currentLocale)}\n            </h3>\n            <span\n              className=\"m:flex m:h-6 m:items-center m:text-base m:leading-[15px] m:tracking-0.4 m:text-blue-950 m:lg:mr-8 m:lg:text-xl m:lg:leading-[17px] m:lg:font-normal m:dark:text-neutral-white\"\n              data-testid=\"daily-weather-overview-date\">\n              {getFormattedDate(currentDay?.date_time, timezone, currentLocale)}\n            </span>\n          </div>\n          {renderWeatherSummary(weatherSummaryItems.slice(0, 2))}\n          {renderWeatherSummary(weatherSummaryItems.slice(2))}\n        </div>\n      </section>\n    </>\n  );\n};\n\nconst renderWeatherSummary = (weatherSummaryItems: WeatherSummaryItem[]) => {\n  return (\n    <div className=\"m:mr-4 m:flex m:flex-row m:items-end m:gap-4 m:text-base m:font-normal m:antialiased m:lg:text-xl\">\n      {weatherSummaryItems.map((item: WeatherSummaryItem, index: number) => (\n        <div\n          className=\"m:flex m:flex-row m:items-center m:gap-2 m:first:w-[118px] m:md:first:w-auto\"\n          key={index}>\n          {item.icon}\n          <div\n            className=\"m:text-warmgrey-900 m:dark:text-blue-200\"\n            aria-label={item.a11yLabel}\n            tabIndex={-1}\n            data-testid={item.testid ?? \"\"}>\n            <span aria-hidden>{item.description}</span>\n          </div>\n        </div>\n      ))}\n    </div>\n  );\n};\n","export const BARS_MAX_HEIGHT = 36;\n","import { BARS_MAX_HEIGHT } from \"@Constants/bars\";\nimport classNames from \"classnames\";\n\ntype BarsProps = {\n  values: number[];\n  unit?: string;\n  scalingFactor?: number;\n  barBackgroundColorClassName?:\n    | \"m:bg-blue-500\"\n    | \"m:bg-special-wind-bar\"\n    | \"m:bg-special-snow-bar\";\n  withDivider?: boolean;\n};\n\nexport const Bars = ({\n  values,\n  unit,\n  scalingFactor = 1.0,\n  barBackgroundColorClassName = \"m:bg-blue-500\",\n  withDivider = false,\n}: BarsProps) => {\n  return (\n    <div\n      className={classNames(\n        \"m:m-0 m:grid m:h-9 m:max-h-9 m:min-h-9 m:auto-cols-[1fr] m:auto-rows-[1fr] m:before:absolute m:before:top-auto m:before:left-0 m:before:z-0 m:before:mt-[5px] m:before:h-9 m:before:max-h-9 m:before:min-h-9 m:before:w-full m:before:bg-rainbars-gradient m:before:bg-[length:100%_6px] m:before:bg-repeat m:before:content-[''] m:dark:before:bg-rainbars-gradient-dark\",\n      )}>\n      {values.map((value, index) => {\n        const scaledValue = Math.round(value * scalingFactor);\n\n        const rowStart = Math.max(BARS_MAX_HEIGHT - scaledValue + 1, 1);\n        const rowSpan = Math.min(scaledValue, BARS_MAX_HEIGHT);\n        const column = index + 1;\n\n        return (\n          <div\n            key={index}\n            className={classNames(\n              \"m:z-1 m:flex m:h-full m:flex-col-reverse m:bg-blue-500\",\n              barBackgroundColorClassName,\n              {\n                \"m:mr-[1px] m:w-[calc(100%-1px)]\": withDivider,\n                \"m:mr-0 m:w-full\": !withDivider,\n                \"m:invisible\": scaledValue === 0,\n              },\n            )}\n            title={`${value}${unit ? ` ${unit}` : \"\"}`}\n            style={{\n              gridRow: `${rowStart} / span ${rowSpan}`,\n              gridColumn: column,\n            }}\n          />\n        );\n      })}\n    </div>\n  );\n};\n","import classNames from \"classnames\";\n\ntype LabelItem = {\n  value: string;\n  className?: string;\n  testId?: string;\n};\n\ntype RainLabelProps = {\n  topLabel: LabelItem;\n  bottomLabel: LabelItem;\n};\n\nexport const BARS_LABEL_HEIGHT = 52;\n\nexport const BarsLabel = ({ topLabel, bottomLabel }: RainLabelProps) => {\n  return (\n    <div className=\"m:flex m:flex-col m:items-center m:pt-1 m:pb-2 m:text-base m:text-blue-950 m:dark:text-neutral-white\">\n      <div\n        className={classNames(\n          \"m:mt-1 m:h-4 m:leading-3 m:font-bold\",\n          topLabel.className,\n        )}\n        data-testid={topLabel.testId ?? \"\"}>\n        {topLabel.value}\n      </div>\n      <div\n        className={classNames(\"m:leading-3\", bottomLabel.className)}\n        data-testid={bottomLabel.testId ?? \"\"}>\n        {bottomLabel.value}\n      </div>\n    </div>\n  );\n};\n","type HourLabelProps = {\n  label: string;\n  isBold: boolean;\n  testId?: string;\n};\n\nexport const HourLabel = ({ label, isBold, testId = \"\" }: HourLabelProps) => {\n  return (\n    <span\n      className={`m:text-base m:tracking-0.2 m:text-blue-950 m:dark:text-neutral-white ${isBold ? \"m:font-bold\" : \"m:font-normal\"}`}\n      data-testid={testId}>\n      {label}\n    </span>\n  );\n};\n","import { Bars } from \"@Components/forecast/Bars\";\nimport { HourProps } from \"@Components/forecast/hourly/ItemWrapper\";\nimport { BarsLabel } from \"@Components/forecast/label/BarsLabel\";\nimport { HourLabel } from \"@Components/forecast/label/HourLabel\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\n\nexport const SnowItem = ({\n  intervalType,\n  label,\n  hour,\n  boldLabel,\n  withDivider,\n}: HourProps & { boldLabel: boolean; withDivider: boolean }) => {\n  const { t } = useTranslations();\n  const { FRESHSNOW_MM: snowAmount } = hour;\n  const snowAmountInCm = snowAmount ? snowAmount / 10 : 0.0;\n  const barScalingFactor = intervalType === \"1h\" ? 9 : 3;\n\n  return (\n    <>\n      <span\n        className=\"m:sr-only m:h-[114px]! m:w-[64px]! m:lg:w-[80px]!\"\n        aria-label={t(\"navigation.a11ySnowLabel\", {\n          label: label,\n          snowAmountInCm,\n        })}\n        tabIndex={-1}\n      />\n      <div\n        className=\"m:mt-2 m:flex m:flex-col m:items-center\"\n        aria-hidden=\"true\"\n        role=\"presentation\">\n        <HourLabel\n          label={label}\n          isBold={boldLabel}\n          testId=\"hourly-navigation-snow-item-hour\"\n        />\n      </div>\n      <div\n        className=\"m:mt-1 m:flex m:flex-col\"\n        aria-hidden=\"true\"\n        role=\"presentation\">\n        <div className=\"m:relative\">\n          <Bars\n            values={[snowAmountInCm || 0]}\n            unit=\"cm\"\n            scalingFactor={barScalingFactor}\n            barBackgroundColorClassName=\"m:bg-special-snow-bar\"\n            withDivider={withDivider}\n          />\n        </div>\n        <BarsLabel\n          topLabel={{\n            value: snowAmountInCm.toFixed(1),\n            className: \"m:mt-2\",\n            testId: \"hourly-navigation-snow-item-amount\",\n          }}\n          bottomLabel={{\n            value: \"cm\",\n          }}\n        />\n      </div>\n    </>\n  );\n};\n","type MaskedIconProps = {\n  iconUrl: string;\n  fadePercentage: number;\n  bgColor?: string;\n};\n\nexport const MaskedIcon = ({\n  iconUrl,\n  fadePercentage,\n  bgColor,\n}: MaskedIconProps) => (\n  <div className=\"m:relative m:-mt-2 m:flex m:flex-col m:items-center\">\n    <div\n      className=\"m:absolute m:top-0 m:left-0 m:inline-block m:h-6 m:w-6 m:bg-warmgrey-100 m:dark:bg-blue-850\"\n      style={{\n        maskImage: `url(\"${iconUrl}\")`,\n        maskSize: \"contain\",\n        maskRepeat: \"no-repeat\",\n        maskPosition: \"50% 50%\",\n      }}\n    />\n    <div\n      className={`m:inline-block m:h-6 m:w-6 ${bgColor}`}\n      style={{\n        background: `linear-gradient(to top, rgba(255, 214, 81) ${fadePercentage}%, transparent ${fadePercentage}%)`,\n        maskImage: `url(\"${iconUrl}\")`,\n        maskSize: \"contain\",\n        maskRepeat: \"no-repeat\",\n        maskPosition: \"50% 50%\",\n      }}\n    />\n  </div>\n);\n","import * as React from \"react\";\nconst SvgHeart = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 13, height: 13, viewBox: \"0 0 13 13\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_8475_128128)\" }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M6.50004 9.12498L3.94303 6.45748C3.71847 6.23305 3.57027 5.9436 3.51947 5.6302C3.46868 5.3168 3.51786 4.99536 3.66003 4.71148C3.76717 4.49706 3.92373 4.31118 4.1168 4.16914C4.30988 4.02711 4.53396 3.933 4.77055 3.89457C5.00714 3.85614 5.24948 3.87449 5.47759 3.9481C5.7057 4.02172 5.91304 4.1485 6.08254 4.31798L6.50004 4.73548L6.91753 4.31798C7.08707 4.1485 7.29446 4.02173 7.52261 3.94811C7.75075 3.8745 7.99312 3.85615 8.22975 3.89458C8.46638 3.93301 8.69049 4.02711 8.88361 4.16914C9.07673 4.31117 9.23334 4.49706 9.34054 4.71148C9.4825 4.99545 9.53151 5.31688 9.48063 5.63025C9.42975 5.94362 9.28155 6.23303 9.05704 6.45748L6.50004 9.12498Z\", fill: \"currentColor\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_8475_128128\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 6, height: 6, fill: \"white\", transform: \"translate(3.5 3.5)\" }))));\nexport default SvgHeart;\n","import HeartIcon from \"@Resources/images/iconsets/heart.svg?react\";\nimport classNames from \"classnames\";\n\ntype TemperatureLabelProps = {\n  temperature: number;\n  feltTemperature?: number | null;\n};\n\nexport const TemperatureLabel = ({\n  temperature,\n  feltTemperature,\n}: TemperatureLabelProps) => {\n  const hasFeelsLikeTemperature =\n    feltTemperature !== null && feltTemperature !== undefined;\n  return (\n    <div className=\"m:flex m:h-full m:w-[46px] m:flex-col m:items-center\">\n      <span\n        className=\"m:mt-1 m:leading-4 m:font-bold m:text-blue-950 m:dark:text-neutral-white\"\n        data-testid=\"hourly-navigation-temperature-item-temperature\">{`${temperature}°`}</span>\n      <span\n        className={classNames(\n          \"m:mt-[2px] m:mb-1 m:flex m:min-h-[19px] m:w-12 m:items-center m:justify-center m:border-0 m:border-t m:border-solid m:border-transparent m:pt-[2px] m:leading-[15px] m:text-nowrap m:text-clip m:lg:min-w-[30px]\",\n          {\n            \"m:border-warmgrey-100 m:dark:border-blue-850\":\n              hasFeelsLikeTemperature,\n          },\n        )}>\n        {hasFeelsLikeTemperature && (\n          <>\n            <HeartIcon className=\"m:text-warmgrey-700 m:dark:text-blue-400\" />\n            <span\n              className=\"m:text-base m:font-normal m:tracking-0.4 m:text-warmgrey-700 m:antialiased m:dark:text-blue-400\"\n              data-testid=\"hourly-navigation-temperature-item-feels-like-temperature\">{`${feltTemperature}°`}</span>\n          </>\n        )}\n      </span>\n    </div>\n  );\n};\n","export default \"data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M12.7962%203.79624V5.24396C12.7962%205.68371%2012.4397%206.04019%2012%206.04019C11.5603%206.04019%2011.2038%205.68371%2011.2038%205.24396V3.79624C11.2038%203.35649%2011.5603%203%2012%203C12.4397%203%2012.7962%203.35649%2012.7962%203.79624ZM6.7413%205.63057L7.76499%206.65427C8.07594%206.96522%208.07594%207.46937%207.76499%207.78031C7.45404%208.09126%206.94989%208.09126%206.63894%207.78031L5.61525%206.75662C5.3043%206.44567%205.3043%205.94152%205.61525%205.63057C5.9262%205.31962%206.43035%205.31962%206.7413%205.63057ZM17.3195%207.78031L18.3432%206.75662C18.6541%206.44567%2018.6541%205.94152%2018.3432%205.63057C18.0322%205.31962%2017.5281%205.31962%2017.2171%205.63057L16.1934%206.65427C15.8825%206.96522%2015.8825%207.46937%2016.1934%207.78031C16.5044%208.09126%2017.0085%208.09126%2017.3195%207.78031ZM16.1934%2017.3348L17.2171%2018.3585C17.5281%2018.6694%2018.0322%2018.6694%2018.3432%2018.3585C18.6541%2018.0475%2018.6541%2017.5434%2018.3432%2017.2324L17.3195%2016.2088C17.0085%2015.8978%2016.5044%2015.8978%2016.1934%2016.2088C15.8825%2016.5197%2015.8825%2017.0239%2016.1934%2017.3348ZM6.63894%2016.2088L5.61525%2017.2324C5.3043%2017.5434%205.3043%2018.0475%205.61525%2018.3585C5.9262%2018.6694%206.43035%2018.6694%206.7413%2018.3585L7.76499%2017.3348C8.07594%2017.0239%208.07594%2016.5197%207.76499%2016.2088C7.45404%2015.8978%206.94989%2015.8978%206.63894%2016.2088ZM11.2038%2020.2038V18.756C11.2038%2018.3163%2011.5603%2017.9598%2012%2017.9598C12.4397%2017.9598%2012.7962%2018.3163%2012.7962%2018.756V20.2038C12.7962%2020.6435%2012.4397%2021%2012%2021C11.5603%2021%2011.2038%2020.6435%2011.2038%2020.2038ZM18.756%2012.7962H20.2038C20.6435%2012.7962%2021%2012.4397%2021%2012C21%2011.5603%2020.6435%2011.2038%2020.2038%2011.2038H18.756C18.3163%2011.2038%2017.9598%2011.5603%2017.9598%2012C17.9598%2012.4397%2018.3163%2012.7962%2018.756%2012.7962ZM5.24396%2011.2038H3.79624C3.35649%2011.2038%203%2011.5603%203%2012C3%2012.4397%203.35649%2012.7962%203.79624%2012.7962H5.24396C5.68371%2012.7962%206.04019%2012.4397%206.04019%2012C6.04019%2011.5603%205.68371%2011.2038%205.24396%2011.2038ZM12%2017C14.761%2017%2017%2014.7623%2017%2012C17%209.23812%2014.7608%207%2012%207C9.2388%207%207%209.23794%207%2012C7%2014.7624%209.23862%2017%2012%2017Z'%20fill='currentColor'%20/%3e%3c/svg%3e\"","import { WeatherIcon } from \"@Components/common/icon/WeatherIcon\";\nimport { Bars } from \"@Components/forecast/Bars\";\nimport { HourProps } from \"@Components/forecast/hourly/ItemWrapper\";\nimport { MaskedIcon } from \"@Components/forecast/icon/MaskedIcon\";\nimport { BarsLabel } from \"@Components/forecast/label/BarsLabel\";\nimport { HourLabel } from \"@Components/forecast/label/HourLabel\";\nimport { TemperatureLabel } from \"@Components/forecast/label/TemperatureLabel\";\nimport { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport SunIconUrl from \"@Resources/images/iconsets/sun.svg\";\nimport { formatRainProbability } from \"@Utils/format\";\nimport classNames from \"classnames\";\n\nexport const TemperatureItem = ({\n  label,\n  intervalType,\n  hour,\n  boldLabel,\n  withDivider,\n  isIconAnimated = false,\n}: HourProps & {\n  boldLabel: boolean;\n  withDivider: boolean;\n  isIconAnimated?: boolean;\n}) => {\n  const { symbolTexts } = useForecastAppContext();\n  const { t } = useTranslations();\n  const {\n    symbol24_code: symbol_code,\n    SUN_MIN: sunshineDuration,\n    TTT_C: expectedTemperature,\n    TTTFEEL_C: feltTemperature,\n    RRR_MM: rainAmount,\n    PROBPCP_PERCENT: rainProbability,\n  } = hour;\n  const isLessThanFivePercentProbability = rainProbability < 5;\n  const barScalingFactor = intervalType === \"1h\" ? 9 : 3;\n\n  function getSunMinPercent(sunshineDuration: number): number {\n    const maxDuration = intervalType === \"1h\" ? 60 : 180;\n    if (sunshineDuration <= 0) {\n      return 0;\n    }\n    if (sunshineDuration >= maxDuration) {\n      return 100;\n    }\n    return Math.round((100 / maxDuration) * sunshineDuration);\n  }\n\n  const topLabel = {\n    value: rainAmount.toString(),\n    className: classNames(\"m:after:content-['_mm']\", {\n      \"m:text-warmgrey-700 m:dark:text-blue-400\":\n        isLessThanFivePercentProbability || rainAmount === 0,\n    }),\n    testId: \"hourly-navigation-temperature-item-rain-amount\",\n  };\n  const bottomLabel = {\n    value: formatRainProbability(rainProbability),\n    className: classNames(\"m:after:content-['_%']\", {\n      \"m:text-warmgrey-700 m:dark:text-blue-400\":\n        isLessThanFivePercentProbability || rainAmount === 0,\n    }),\n    testId: \"hourly-navigation-temperature-item-rain-probability\",\n  };\n\n  return (\n    <>\n      <span\n        className=\"m:sr-only m:h-[232px]! m:w-[64px]! m:lg:w-[80px]!\"\n        aria-label={t(\"navigation.a11yTemperatureLabel\", {\n          label: label,\n          symbolTexts: symbolTexts[symbol_code],\n          expectedTemperature: expectedTemperature,\n          feltTemperature: feltTemperature,\n          rainAmount: rainAmount,\n          rainProbability: formatRainProbability(rainProbability),\n        })}\n        tabIndex={-1}\n      />\n      <div\n        className=\"m:mt-2 m:flex m:flex-col m:items-center\"\n        aria-hidden=\"true\"\n        role=\"presentation\">\n        <HourLabel\n          label={label}\n          isBold={boldLabel}\n          testId=\"hourly-navigation-temperature-item-hour\"\n        />\n        <WeatherIcon\n          symbolCode={symbol_code}\n          altText={symbolTexts[symbol_code]}\n          variant=\"forecast-hour\"\n          animated={isIconAnimated}\n          testId=\"hourly-navigation-temperature-item-symbol\"\n        />\n        <MaskedIcon\n          iconUrl={SunIconUrl}\n          fadePercentage={getSunMinPercent(sunshineDuration)}\n          bgColor=\"m:bg-special-sunshine\"\n        />\n        <TemperatureLabel\n          temperature={expectedTemperature}\n          feltTemperature={feltTemperature}\n        />\n      </div>\n      <div className=\"m:flex m:flex-col\" aria-hidden=\"true\" role=\"presentation\">\n        <div className=\"m:relative\">\n          <Bars\n            values={[rainAmount]}\n            unit=\"mm\"\n            scalingFactor={barScalingFactor}\n            withDivider={withDivider}\n          />\n        </div>\n        <BarsLabel topLabel={topLabel} bottomLabel={bottomLabel} />\n      </div>\n    </>\n  );\n};\n","import * as React from \"react\";\nconst SvgWindArrow = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", stroke: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 21L12 3M12 21L19 14M12 21L5 14\", strokeWidth: 2, strokeMiterlimit: 10, strokeLinecap: \"round\" }));\nexport default SvgWindArrow;\n","import * as React from \"react\";\nconst SvgWindCircle = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", stroke: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.243 15.997L11.243 18.997L14.243 21.997\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M20.953 11.562C20.7513 13.5994 19.7992 15.4891 18.2819 16.8637C16.7646 18.2384 14.7904 18.9998 12.743 19H11.243\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M16.539 6.823L20.637 7.921L21.736 3.823\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.343 3.23C11.2081 2.38656 13.3202 2.26662 15.2689 2.89349C17.2175 3.52037 18.8635 4.84928 19.887 6.622L20.637 7.922\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.446 9.421L6.348 5.323L2.25 6.421\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.93199 17.451C6.26933 16.2568 5.10992 14.4872 4.67896 12.4859C4.248 10.4847 4.57626 8.39474 5.59999 6.622L6.34999 5.322\", strokeWidth: 1.5, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgWindCircle;\n","import { Bars } from \"@Components/forecast/Bars\";\nimport { HourProps } from \"@Components/forecast/hourly/ItemWrapper\";\nimport { BarsLabel } from \"@Components/forecast/label/BarsLabel\";\nimport { HourLabel } from \"@Components/forecast/label/HourLabel\";\nimport { WIND_DIRECTIONS } from \"@Constants/forecast\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport WindArrow from \"@Resources/images/iconsets/wind-arrow.svg?react\";\nimport WindCircle from \"@Resources/images/iconsets/wind-circle.svg?react\";\nimport { useDarkMode } from \"usehooks-ts\";\n\nexport const WIND_BARS_SCALING_FACTOR = 0.6;\n\nexport const WindItem = ({\n  label,\n  hour,\n  boldLabel,\n  withDivider,\n}: HourProps & { boldLabel: boolean; withDivider: boolean }) => {\n  const { isDarkMode } = useDarkMode();\n  const { t } = useTranslations();\n  const { DD_DEG: windDirection, FF_KMH: avgWind, FX_KMH: gustSpeed } = hour;\n  const WindIcon = windDirection > -1 ? WindArrow : WindCircle;\n\n  const getWindDirectionText = (deg: number): string => {\n    const windDirection = WIND_DIRECTIONS.find(({ range }) => {\n      const [first, last] = range;\n      return deg >= first && deg <= (last || first);\n    });\n    return windDirection\n      ? t(`navigation.${windDirection.translationKey}`)\n      : t(\"navigation.a11yDirectionNotFound\", {\n          windDirection: deg,\n        });\n  };\n\n  return (\n    <>\n      <span\n        className=\"m:sr-only m:h-[149px]! m:w-[64px]! m:lg:w-[80px]!\"\n        aria-label={t(\"navigation.a11yWindLabel\", {\n          label: label,\n          windDirection: getWindDirectionText(windDirection),\n          avgWind: avgWind,\n          gustSpeed: gustSpeed,\n        })}\n        tabIndex={-1}\n      />\n      <div\n        className=\"m:mt-2 m:flex m:flex-col m:items-center\"\n        aria-hidden=\"true\"\n        role=\"presentation\">\n        <HourLabel\n          label={label}\n          isBold={boldLabel}\n          testId=\"hourly-navigation-wind-item-hour\"\n        />\n        <div className=\"m:mt-1 m:mb-[7px]\">\n          <WindIcon\n            style={{ rotate: `${windDirection}deg` }}\n            stroke={isDarkMode ? \"white\" : \"#092B49\"}\n            data-wind-direction={windDirection}\n            data-testid=\"hourly-navigation-wind-item-direction\"\n          />\n        </div>\n      </div>\n      <div className=\"m:flex m:flex-col\" aria-hidden=\"true\" role=\"presentation\">\n        <div className=\"m:relative\">\n          <Bars\n            values={[gustSpeed]}\n            unit=\"km/h\"\n            scalingFactor={WIND_BARS_SCALING_FACTOR}\n            barBackgroundColorClassName=\"m:bg-special-wind-bar\"\n            withDivider={withDivider}\n          />\n        </div>\n        <BarsLabel\n          topLabel={{\n            value: `${avgWind} / ${gustSpeed}`,\n            className: \"m:mt-3\",\n            testId: \"hourly-navigation-wind-item-speeds\",\n          }}\n          bottomLabel={{\n            value: \"km/h\",\n          }}\n        />\n      </div>\n    </>\n  );\n};\n","import { Representation } from \"@Components/forecast/hourly/NavigationContainer\";\nimport { SnowItem } from \"@Components/forecast/hourly/SnowItem\";\nimport { TemperatureItem } from \"@Components/forecast/hourly/TemperatureItem\";\nimport { WindItem } from \"@Components/forecast/hourly/WindItem\";\nimport { OneHourInterval, ThreeHourInterval } from \"@Models/Interval\";\nimport React from \"react\";\n\nexport type HourProps = {\n  label: string;\n  intervalType: \"1h\" | \"3h\";\n  hour: OneHourInterval | ThreeHourInterval;\n  representation: Representation;\n  isLabelBold?: boolean;\n  hasDivider?: boolean;\n};\n\nexport const ItemWrapper = ({\n  label,\n  intervalType,\n  hour,\n  representation,\n  isLabelBold = false,\n  hasDivider = false,\n}: HourProps): React.JSX.Element => {\n  switch (representation) {\n    case \"temperature\":\n      return (\n        <TemperatureItem\n          label={label}\n          intervalType={intervalType}\n          hour={hour}\n          representation={representation}\n          boldLabel={isLabelBold}\n          withDivider={hasDivider}\n        />\n      );\n    case \"wind\":\n      return (\n        <WindItem\n          label={label}\n          intervalType={intervalType}\n          hour={hour}\n          representation={representation}\n          boldLabel={isLabelBold}\n          withDivider={hasDivider}\n        />\n      );\n    case \"snow\":\n      return (\n        <SnowItem\n          label={label}\n          intervalType={intervalType}\n          hour={hour}\n          representation={representation}\n          boldLabel={isLabelBold}\n          withDivider={hasDivider}\n        />\n      );\n  }\n};\n","import { ItemWrapper } from \"@Components/forecast/hourly/ItemWrapper\";\nimport { Representation } from \"@Components/forecast/hourly/NavigationContainer\";\nimport {\n  MAX_NUMBER_OF_DAYS_FOR_FORECAST,\n  NUMBER_OF_DAYS_FOR_FORECAST_IN_FUTURE,\n} from \"@Constants/forecast\";\nimport { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport {\n  Intervals,\n  OneHourInterval,\n  ThreeHourInterval,\n} from \"@Models/Interval\";\nimport {\n  formatAsIsoStyleDate,\n  formatAsWeekday,\n  getFormattedTimestring,\n} from \"@Utils/date\";\nimport { getIntervalStartIndicesPerDay } from \"@Utils/interval\";\nimport classNames from \"classnames\";\nimport { Fragment, RefObject, useState } from \"react\";\n\ntype IntervalContainer = {\n  intervals: Intervals;\n  representation: Representation;\n  dayRefs: React.RefObject<\n    Record<Representation, RefObject<HTMLLIElement | null>[]>\n  >;\n};\n\nconst DAY_SEPARATOR_WIDTH = 1;\n\nexport const IntervalContainer = ({\n  intervals,\n  representation,\n  dayRefs,\n}: IntervalContainer) => {\n  const { t, currentLocale } = useTranslations();\n  const { forecastPointWeek } = useForecastAppContext();\n  const [timezone] = useState<string>(\n    forecastPointWeek?.geolocation?.timezone ?? \"Europe/Zurich\",\n  );\n  // If we have only have 7 days in the forecast, the switch from 3h to 1h happens by 2 days instead of 3\n  const intervalTypeSwitchIndex = (() => {\n    const daysLength = forecastPointWeek?.days.length;\n    return daysLength === NUMBER_OF_DAYS_FOR_FORECAST_IN_FUTURE ? 2 : 3;\n  })();\n\n  const intervalIndicesPerDay = getIntervalStartIndicesPerDay(\n    intervals,\n    timezone,\n  );\n  const dayIndices = Object.keys(intervalIndicesPerDay)\n    .map((day) => parseInt(day))\n    .slice(0, MAX_NUMBER_OF_DAYS_FOR_FORECAST);\n\n  const getDayLabel = (\n    dayIndex: number,\n    interval: OneHourInterval | ThreeHourInterval,\n  ) => {\n    let label = formatAsWeekday(interval.date_time, timezone, currentLocale);\n\n    if (dayIndex === intervalTypeSwitchIndex && interval.type === \"3h\") {\n      label = `${label} (${interval.type} ${t(\"forecast.intervals\")})`;\n    }\n\n    return label;\n  };\n\n  // First, we iterate through the days, then through the intervals for that day\n  return dayIndices.map((dayIndex) => {\n    const intervalsForDay: Intervals = intervals.slice(\n      intervalIndicesPerDay[dayIndex],\n      intervalIndicesPerDay[Math.min(dayIndex + 1, dayIndices.length)],\n    );\n\n    if (intervalsForDay.length === 0) {\n      return null;\n    }\n\n    const referenceInterval = intervalsForDay[0];\n\n    const dayIdentifier = formatAsIsoStyleDate(referenceInterval.date_time);\n    const dayLabel = getDayLabel(dayIndex, referenceInterval);\n    const hasIntervalTypeChangeSeparator = dayIndex === intervalTypeSwitchIndex;\n\n    return (\n      <Fragment key={dayIndex}>\n        {hasIntervalTypeChangeSeparator && (\n          <div className=\"m:z-2 m:w-6 m:border-0 m:border-l m:border-solid m:border-warmgrey-200 m:bg-warmgrey-10 m:dark:border-blue-850 m:dark:bg-blue-950\"></div>\n        )}\n\n        {intervalsForDay.map((interval, intervalIndex) => {\n          const intervalIdentifier = `${dayIdentifier}-${intervalIndex}`;\n          const intervalLabel = getFormattedTimestring(\n            interval.date_time,\n            timezone,\n            currentLocale,\n          );\n\n          const hasDayLabel = intervalIndex === 0;\n          const isIntervalLabelBold = dayIndex === 0 && intervalIndex === 0;\n          const hasIntervalDivider =\n            intervalIndex !== intervalsForDay.length - 1;\n\n          return (\n            <Fragment key={`${dayIndex}-${intervalIndex}`}>\n              {hasDayLabel && (\n                <li\n                  ref={dayRefs.current?.[representation]?.[dayIndex]}\n                  style={{ borderRightWidth: `${DAY_SEPARATOR_WIDTH}px` }}\n                  className={classNames(\n                    \"m:border-0 m:border-solid m:border-warmgrey-200 m:dark:border-blue-850\",\n                    {\n                      \"m:z-2\": hasIntervalTypeChangeSeparator,\n                    },\n                  )}\n                  data-day={dayIdentifier}>\n                  <h3\n                    className=\"m:md:text-sm m:absolute m:-top-4 m:m-0 m:p-0 m:text-base m:leading-[15px] m:font-medium m:tracking-0.2 m:whitespace-nowrap m:text-blue-950 m:antialiased m:lg:-top-4 m:lg:leading-[17px] m:lg:tracking-0.4 m:dark:text-neutral-white\"\n                    data-testid={`hourly-navigation-${representation}-day-label`}>\n                    {dayLabel}\n                  </h3>\n                </li>\n              )}\n              <li\n                className=\"m:m-0 m:list-item m:h-full m:w-[64px] m:shrink-0 m:p-0 m:antialiased m:lg:w-[80px]\"\n                data-interval={intervalIdentifier}\n                data-interval-type={interval.type}\n                data-testid={`hourly-navigation-${representation}-item`}>\n                <ItemWrapper\n                  label={intervalLabel}\n                  intervalType={interval.type}\n                  hour={interval}\n                  representation={representation}\n                  isLabelBold={isIntervalLabelBold}\n                  hasDivider={hasIntervalDivider}\n                />\n              </li>\n            </Fragment>\n          );\n        })}\n      </Fragment>\n    );\n  });\n};\n\nIntervalContainer.displayName = \"IntervalContainer\";\n","import * as React from \"react\";\nconst SvgCaret = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M8 4L16 12L8 20\", stroke: \"white\", strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgCaret;\n","import { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { Direction } from \"@Models/Direction\";\nimport Caret from \"@Resources/images/iconsets/caret.svg?react\";\nimport { forceMoveFlyingFocus } from \"@Utils/flyingFocus\";\nimport classNames from \"classnames\";\nimport { useRef } from \"react\"; // Added import statement for useRef\n\ntype ScrollButtonProps = {\n  onClick: () => void;\n  direction: Direction;\n  isVisible: boolean;\n  disabled: boolean;\n};\n\nexport const ScrollButton = ({\n  disabled,\n  onClick,\n  direction,\n  isVisible,\n}: ScrollButtonProps) => {\n  const { t } = useTranslations();\n  const keyboardNavigationRef = useRef(false);\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n    keyboardNavigationRef.current = e.key === \"Tab\";\n  };\n\n  const handleBlur = () => {\n    if (keyboardNavigationRef.current) {\n      forceMoveFlyingFocus();\n      keyboardNavigationRef.current = false;\n    }\n  };\n\n  return (\n    <button\n      data-testid={\n        direction === \"left\" ? \"scroll-button-left\" : \"scroll-button-right\"\n      }\n      disabled={disabled}\n      type=\"button\"\n      onKeyDown={handleKeyDown}\n      onBlur={handleBlur}\n      onClick={onClick}\n      className={classNames(\n        \"m:z-10 m:h-8 m:w-8 m:cursor-pointer m:border-none m:bg-warmgrey-900 m:text-neutral-white m:shadow-scroll-buttons m:transition-opacity m:duration-200 m:ease-in-out m:hover:shadow-active-scroll-buttons m:disabled:cursor-default m:disabled:opacity-50 m:lg:h-10 m:lg:w-10 m:dark:bg-blue-850 m:dark:disabled:bg-blue-800\",\n        {\n          \"m:rounded-r\": direction === \"right\",\n          \"m:rounded-l\": direction === \"left\",\n        },\n        {\n          \"m:opacity-100\": isVisible,\n          \"m:opacity-0!\": !isVisible,\n        },\n      )}>\n      <span className=\"m:flex m:items-center m:justify-center\">\n        <Caret className={direction === \"left\" ? \"m:rotate-180\" : \"\"} />\n      </span>\n      <span className=\"m:sr-only\">\n        {direction === \"left\"\n          ? t(\"button.a11yScrollLeft\")\n          : t(\"button.a11yScrollRight\")}\n      </span>\n    </button>\n  );\n};\n\nScrollButton.displayName = \"ScrollButton\";\n","export default function ascending(a, b) {\n  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n  return a == null || b == null ? NaN\n    : b < a ? -1\n    : b > a ? 1\n    : b >= a ? 0\n    : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n  let compare1, compare2, delta;\n\n  // If an accessor is specified, promote it to a comparator. In this case we\n  // can test whether the search value is (self-) comparable. We can’t do this\n  // for a comparator (except for specific, known comparators) because we can’t\n  // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n  // used to test whether a single value is comparable.\n  if (f.length !== 2) {\n    compare1 = ascending;\n    compare2 = (d, x) => ascending(f(d), x);\n    delta = (d, x) => f(d) - x;\n  } else {\n    compare1 = f === ascending || f === descending ? f : zero;\n    compare2 = f;\n    delta = f;\n  }\n\n  function left(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function right(a, x, lo = 0, hi = a.length) {\n    if (lo < hi) {\n      if (compare1(x, x) !== 0) return hi;\n      do {\n        const mid = (lo + hi) >>> 1;\n        if (compare2(a[mid], x) <= 0) lo = mid + 1;\n        else hi = mid;\n      } while (lo < hi);\n    }\n    return lo;\n  }\n\n  function center(a, x, lo = 0, hi = a.length) {\n    const i = left(a, x, lo, hi - 1);\n    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n  }\n\n  return {left, center, right};\n}\n\nfunction zero() {\n  return 0;\n}\n","export default function number(x) {\n  return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n  if (valueof === undefined) {\n    for (let value of values) {\n      if (value != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  } else {\n    let index = -1;\n    for (let value of values) {\n      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n        yield value;\n      }\n    }\n  }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","const e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n  const step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log10(step)),\n      error = step / Math.pow(10, power),\n      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n  let i1, i2, inc;\n  if (power < 0) {\n    inc = Math.pow(10, -power) / factor;\n    i1 = Math.round(start * inc);\n    i2 = Math.round(stop * inc);\n    if (i1 / inc < start) ++i1;\n    if (i2 / inc > stop) --i2;\n    inc = -inc;\n  } else {\n    inc = Math.pow(10, power) * factor;\n    i1 = Math.round(start / inc);\n    i2 = Math.round(stop / inc);\n    if (i1 * inc < start) ++i1;\n    if (i2 * inc > stop) --i2;\n  }\n  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n  return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  if (!(count > 0)) return [];\n  if (start === stop) return [start];\n  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n  if (!(i2 >= i1)) return [];\n  const n = i2 - i1 + 1, ticks = new Array(n);\n  if (reverse) {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n  } else {\n    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n  }\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n  stop = +stop, start = +start, count = +count;\n  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: {\n      if (typeof domain === \"function\") this.interpolator(domain);\n      else this.range(domain);\n      break;\n    }\n    default: {\n      this.domain(domain);\n      if (typeof interpolator === \"function\") this.interpolator(interpolator);\n      else this.range(interpolator);\n      break;\n    }\n  }\n  return this;\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n    reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n    reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n    reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n    reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n    reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHex8: color_formatHex8,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n  return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb() {\n    return this;\n  },\n  clamp() {\n    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n  },\n  displayable() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatHex8: rgb_formatHex8,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n  const a = clampa(this.opacity);\n  return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n  return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n  value = clampi(value);\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  clamp() {\n    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n  },\n  displayable() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl() {\n    const a = clampa(this.opacity);\n    return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n  }\n}));\n\nfunction clamph(value) {\n  value = (value || 0) % 360;\n  return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n  return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","export default function constants(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function number(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n  var t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    var n = Math.min(domain.length, range.length);\n    if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n    piecewise = n > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = Array.from(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous() {\n  return transformer()(identity, identity);\n}\n","export default function(x) {\n  return Math.abs(x = Math.round(x)) >= 1e21\n      ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n      : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  return new FormatSpecifier({\n    fill: match[1],\n    align: match[2],\n    sign: match[3],\n    symbol: match[4],\n    zero: match[5],\n    width: match[6],\n    comma: match[7],\n    precision: match[8] && match[8].slice(1),\n    trim: match[9],\n    type: match[10]\n  });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n  this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n  this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n  this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n  this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n  this.zero = !!specifier.zero;\n  this.width = specifier.width === undefined ? undefined : +specifier.width;\n  this.comma = !!specifier.comma;\n  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n  this.trim = !!specifier.trim;\n  this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n  var d = formatDecimalParts(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n  \"%\": (x, p) => (x * 100).toFixed(p),\n  \"b\": (x) => Math.round(x).toString(2),\n  \"c\": (x) => x + \"\",\n  \"d\": formatDecimal,\n  \"e\": (x, p) => x.toExponential(p),\n  \"f\": (x, p) => x.toFixed(p),\n  \"g\": (x, p) => x.toPrecision(p),\n  \"o\": (x) => Math.round(x).toString(8),\n  \"p\": (x, p) => formatRounded(x * 100, p),\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n  \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n    prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n      currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n      currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n      decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n      numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n      percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n      minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n      nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision === undefined ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n        var valueNegative = value < 0 || 1 / value < 0;\n\n        // Perform the initial formatting.\n        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n        if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain();\n    var i0 = 0;\n    var i1 = d.length - 1;\n    var start = d[i0];\n    var stop = d[i1];\n    var prestep;\n    var step;\n    var maxIter = 10;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n    \n    while (maxIter-- > 0) {\n      step = tickIncrement(start, stop, count);\n      if (step === prestep) {\n        d[i0] = start\n        d[i1] = stop\n        return domain(d);\n      } else if (step > 0) {\n        start = Math.floor(start / step) * step;\n        stop = Math.ceil(stop / step) * step;\n      } else if (step < 0) {\n        start = Math.ceil(start * step) / step;\n        stop = Math.floor(stop * step) / step;\n      } else {\n        break;\n      }\n      prestep = step;\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous();\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`M${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`M${x0},${y0}`;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._append`L${x0},${y0}`;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n    }\n  }\n  rect(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // falls through\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(data)).length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","import { WIND_BARS_SCALING_FACTOR } from \"@Components/forecast/hourly/WindItem\";\nimport { BARS_LABEL_HEIGHT } from \"@Components/forecast/label/BarsLabel\";\nimport { BARS_MAX_HEIGHT } from \"@Constants/bars\";\nimport { Intervals } from \"@Models/Interval\";\nimport { scaleLinear } from \"d3-scale\";\nimport { curveMonotoneX, line } from \"d3-shape\";\nimport { useRef } from \"react\";\nimport { useResizeObserver } from \"usehooks-ts\";\n\nconst LINE_WIDTH = 1;\n\ntype WindLineProps = {\n  intervals: Intervals;\n};\n\nconst WindLine = ({ intervals }: WindLineProps) => {\n  const ref = useRef<SVGSVGElement>(null);\n  const { width = 0 } = useResizeObserver({\n    //@ts-expect-error it expects a ref to an element of type HTMLElement, but svg elements are of type SVGSVGElement\n    ref,\n  });\n  const data: [number, number][] = intervals.map((hour, index) => [\n    index,\n    hour.FF_KMH,\n  ]);\n\n  // Get the min and max values of the data\n  const xValues = data.map((d) => d[0]);\n  const xMin = Math.min(...xValues);\n  const xMax = Math.max(...xValues);\n  const yMin = 0;\n  const yMax = BARS_MAX_HEIGHT / WIND_BARS_SCALING_FACTOR;\n\n  // Set up the scales\n  const height = BARS_MAX_HEIGHT;\n  const xScale = scaleLinear().domain([xMin, xMax]).range([0, width]);\n  const yScale = scaleLinear().domain([yMin, yMax]).range([height, 0]);\n\n  // Set up the line generator\n  const lineGenerator = line()\n    .x((d) => xScale(d[0]))\n    .y((d) => yScale(d[1]))\n    .curve(curveMonotoneX);\n  // Generate the line path data\n  const linePath = lineGenerator(data) ?? undefined;\n\n  return (\n    <div\n      aria-hidden\n      style={{\n        bottom: `${BARS_LABEL_HEIGHT}px`,\n        height: `${BARS_MAX_HEIGHT}px`,\n      }}\n      className={\n        \"m:absolute m:z-2 m:flex m:w-full m:flex-row m:items-end m:gap-6\"\n      }>\n      <svg\n        ref={ref}\n        width=\"100%\"\n        height=\"100%\"\n        viewBox={`0 0 ${width} ${height}`}\n        preserveAspectRatio=\"none\">\n        <g transform={`translate(0, ${LINE_WIDTH / 2})`}>\n          <path\n            d={linePath}\n            fill=\"none\"\n            strokeWidth={LINE_WIDTH}\n            className=\"m:stroke-blue-950 m:dark:stroke-neutral-white\"\n          />\n        </g>\n      </svg>\n    </div>\n  );\n};\n\nexport default WindLine;\n","import { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport React from \"react\";\n\nexport type LegendItem = {\n  translationKey: string;\n  icon?: React.JSX.Element;\n};\n\ntype LegendLabelProps = {\n  legendItems: LegendItem[];\n};\n\nexport const LegendLabel = ({ legendItems }: LegendLabelProps) => {\n  const { t } = useTranslations();\n\n  return (\n    <div className=\"m:mt-3 m:-mb-[10px] m:flex m:flex-row m:gap-4 m:px-4 m:text-base m:font-normal m:text-warmgrey-900 m:antialiased m:md:mb-1 m:md:px-8 m:lg:mb-1 m:lg:text-xl m:lg:tracking-0.4 m:xl:px-10 m:dark:text-blue-200\">\n      <div className=\"m:grid m:grid-cols-2 m:gap-x-4 m:gap-y-1\" aria-hidden>\n        {legendItems.map((item, index) => {\n          return (\n            <div key={index} className=\"m:flex m:flex-row m:items-center\">\n              {item.icon && (\n                <span className=\"m:mr-1 m:flex m:items-center\">\n                  {item.icon}\n                </span>\n              )}\n              <span className=\"m:leading-[15px]\">\n                {t(`legend.${item.translationKey}`)}\n              </span>\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n","import { LegendItem } from \"@Components/forecast/label/LegendLabel\";\nimport { OneHourInterval, ThreeHourInterval } from \"@Models/Interval\";\nimport HeartIcon from \"@Resources/images/iconsets/heart.svg?react\";\nimport SunIcon from \"@Resources/images/iconsets/sun.svg?react\";\n\nexport const getTemperatureLegend = (\n  interval: OneHourInterval | ThreeHourInterval,\n) => {\n  const hasFeltTemperature = typeof interval?.TTTFEEL_C === \"number\";\n\n  return hasFeltTemperature\n    ? TEMPERATURE_LEGEND\n    : TEMPERATURE_LEGEND.filter(\n        (item) => item.translationKey !== \"feltTemperature\",\n      );\n};\n\nexport const TEMPERATURE_LEGEND: LegendItem[] = [\n  { translationKey: \"rainAmount\" },\n  {\n    translationKey: \"sunshineDuration\",\n    icon: <SunIcon height=\"16\" width=\"16\" preserveAspectRatio=\"none\" />,\n  },\n  { translationKey: \"rainProbability\" },\n  {\n    translationKey: \"feltTemperature\",\n    icon: <HeartIcon height=\"16\" width=\"16\" preserveAspectRatio=\"none\" />,\n  },\n];\n\nexport const WIND_LEGEND: LegendItem[] = [{ translationKey: \"windSpeed\" }];\n\nexport const SNOW_LEGEND: LegendItem[] = [{ translationKey: \"freshSnow\" }];\n","import { IntervalContainer } from \"@Components/forecast/hourly/IntervalContainer\";\nimport { ScrollButton } from \"@Components/forecast/hourly/ScrollButton\";\nimport WindLine from \"@Components/forecast/hourly/WindLine\";\nimport { LegendLabel } from \"@Components/forecast/label/LegendLabel\";\nimport {\n  getTemperatureLegend,\n  SNOW_LEGEND,\n  WIND_LEGEND,\n} from \"@Constants/legend\";\nimport { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { ScrollHandler } from \"@Hooks/useScrollInteractions\";\nimport { Direction } from \"@Models/Direction\";\nimport {\n  ForwardedRef,\n  forwardRef,\n  RefObject,\n  SyntheticEvent,\n  useState,\n} from \"react\";\n\nexport type Representation = \"temperature\" | \"wind\" | \"snow\";\n\ntype NavigationContainerProps = {\n  representation: Representation;\n  dayRefs: React.RefObject<\n    Record<Representation, RefObject<HTMLLIElement | null>[]>\n  >;\n  canNavigateLeft: boolean;\n  canNavigateRight: boolean;\n  navigateLeft: () => void;\n  navigateRight: () => void;\n  handleScroll: ScrollHandler;\n  handleMouseWheelScroll: ScrollHandler;\n};\n\nexport const NavigationContainer = forwardRef(\n  (\n    {\n      representation,\n      dayRefs,\n      canNavigateLeft,\n      canNavigateRight,\n      navigateLeft,\n      navigateRight,\n      handleScroll,\n      handleMouseWheelScroll,\n    }: NavigationContainerProps,\n    ref: ForwardedRef<HTMLDivElement>,\n  ) => {\n    const { intervals } = useForecastAppContext();\n    const { t } = useTranslations();\n    const [isScrollButtonVisible, setIsScrollButtonVisible] = useState(false);\n\n    const legendItems =\n      representation === \"temperature\"\n        ? getTemperatureLegend(intervals[0])\n        : representation === \"wind\"\n          ? WIND_LEGEND\n          : SNOW_LEGEND;\n\n    // Only show snow if there is snow data available\n    const visible =\n      representation !== \"snow\" ||\n      (representation === \"snow\" &&\n        intervals[0] &&\n        typeof intervals[0].FRESHSNOW_MM === \"number\");\n\n    if (!visible) {\n      return null;\n    }\n\n    const innerHandleScroll = (e: SyntheticEvent<HTMLElement>) => {\n      handleScroll(e, ref as RefObject<HTMLDivElement | null> | null);\n    };\n\n    const innerHandleMouseWheelScroll = (e: SyntheticEvent<HTMLElement>) => {\n      handleMouseWheelScroll(e, ref as RefObject<HTMLDivElement | null> | null);\n    };\n\n    return (\n      <div>\n        <section className=\"m:px-4 m:pt-10 m:pb-1 m:md:px-8 m:md:pt-7 m:lg:pt-9 m:xl:px-10\">\n          <h2 className=\"m:m-0 m:p-0 m:text-2xl m:leading-5 m:font-medium m:tracking-0.2 m:text-blue-950 m:antialiased m:lg:text-4xl m:lg:leading-[25px] m:dark:text-neutral-white\">\n            {t(`forecast.${representation}`)}\n          </h2>\n        </section>\n        <div\n          className=\"m:relative m:ml-0 m:flex m:w-auto m:flex-row m:lg:-mx-20 m:xl:-mx-[70px]\"\n          onBlur={() => setIsScrollButtonVisible(false)}\n          onFocus={() => setIsScrollButtonVisible(true)}\n          onMouseEnter={() => setIsScrollButtonVisible(true)}\n          onMouseLeave={() => setIsScrollButtonVisible(false)}>\n          <div className=\"m:z-3 m:hidden m:bg-scroll-blocker-start m:lg:absolute m:lg:-left-2 m:lg:z-10 m:lg:block m:lg:h-full m:lg:w-[120px] m:dark:bg-scroll-blocker-start-dark\"></div>\n          {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n          <div\n            data-testid={`hourly-navigation-${representation}`}\n            data-scroll-position=\"0\"\n            tabIndex={-1}\n            className=\"m:scrollbar-hidden m:flex m:w-full m:flex-row m:overflow-hidden m:overflow-x-auto m:px-4 m:pt-5 m:md:px-8 m:lg:px-28\"\n            onWheel={innerHandleMouseWheelScroll}\n            onTouchEnd={innerHandleScroll}\n            onMouseUp={innerHandleScroll}\n            onKeyUp={innerHandleScroll}\n            ref={ref}>\n            <ul className=\"m:flex m:snap-none m:list-none m:flex-row m:scroll-auto\">\n              <div className=\"m:relative m:flex m:flex-row m:lg:pt-1 m:xl:pt-2\">\n                {representation === \"wind\" && (\n                  <WindLine intervals={intervals} />\n                )}\n                <IntervalContainer\n                  intervals={intervals}\n                  representation={representation}\n                  dayRefs={dayRefs}\n                />\n              </div>\n            </ul>\n          </div>\n          <div className=\"m:z-2 m:hidden m:lg:absolute m:lg:top-0 m:lg:-right-0 m:lg:block m:lg:h-full m:lg:w-[120px] m:lg:bg-scroll-blocker-end m:xl:-right-2 m:lg:dark:bg-scroll-blocker-end-dark\"></div>\n          <div className=\"m:absolute m:top-1/2 m:right-0 m:flex m:flex-row m:gap-px m:lg:right-20 m:xl:right-[72px]\">\n            {([\"left\", \"right\"] as Direction[]).map((direction) => (\n              <ScrollButton\n                key={direction}\n                isVisible={isScrollButtonVisible}\n                direction={direction}\n                disabled={\n                  direction === \"left\" ? !canNavigateLeft : !canNavigateRight\n                }\n                onClick={direction === \"left\" ? navigateLeft : navigateRight}\n              />\n            ))}\n          </div>\n        </div>\n        <LegendLabel legendItems={legendItems} />\n      </div>\n    );\n  },\n);\n\nNavigationContainer.displayName = \"NavigationContainer\";\n","import { Environment } from \"@Models/Environment\";\n\nexport const RADAR_URN: {\n  [key in Environment]: string;\n} = {\n  local: \"urn:srf:meteo:mapgroup:1272541977528\",\n  dev: \"urn:srf:meteo:mapgroup:1964459182734\",\n  int: \"urn:srf:meteo:mapgroup:1115951973582\",\n  \"pr-preview\": \"urn:srf:meteo:mapgroup:1115951973582\",\n  prod: \"urn:srf:meteo:mapgroup:1272541977528\",\n};\n","export default \"__VITE_ASSET__D$96eTxL__\"","import { RADAR_URN } from \"@Constants/radarUrn\";\nimport { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { Image, MeteoMapsService } from \"@MeteoMapsApi/index\";\nimport radarTeaserFallback from \"@Resources/images/iconsets/srf_radar_teaser_fallback.png\";\nimport { useEffect, useState } from \"react\";\nimport { useDarkMode } from \"usehooks-ts\";\n\nexport const RadarTeaser = () => {\n  const { isDarkMode } = useDarkMode();\n  const { env } = useForecastAppContext();\n  const { t } = useTranslations();\n  const [teaserImages, setTeaserImages] = useState<Image>({\n    dark: \"\",\n    light: \"\",\n  });\n\n  useEffect(() => {\n    const fetchTeaserImage = async () => {\n      try {\n        const radarMapgroup = await MeteoMapsService.getMapgroup({\n          mapgroupUrn: RADAR_URN[env],\n        });\n\n        setTeaserImages({\n          dark: radarMapgroup?.teaser?.image?.dark ?? \"\",\n          light: radarMapgroup?.teaser?.image?.light ?? \"\",\n        });\n      } catch (error) {\n        // eslint-disable-next-line no-console\n        console.error(\"Error fetching teaser image:\", error);\n      }\n    };\n\n    fetchTeaserImage();\n  }, [env]);\n  return (\n    <div className=\"m:relative m:mb-4 m:flex m:h-full m:items-center m:justify-center m:rounded-sm\">\n      <picture className=\"m:absolute m:-z-10 m:h-full m:-translate-y-[50%]\">\n        <source\n          srcSet={teaserImages.dark}\n          media=\"(prefers-color-scheme: dark)\"\n          className={!isDarkMode ? \"m:hidden\" : \"\"}\n        />\n        <source\n          srcSet={teaserImages.light}\n          media=\"(prefers-color-scheme: light)\"\n          title={t(\"teaser.radar\")}\n        />\n        <img\n          src={radarTeaserFallback}\n          alt={t(\"teaser.radar\")}\n          loading=\"lazy\"\n          className=\"m:m-auto m:h-[347px]! m:w-full! m:min-w-[280px]! m:object-scale-down m:xs:min-w-[320px]!\"\n        />\n      </picture>\n    </div>\n  );\n};\n","type TeaserProps = {\n  title: string;\n  redirectUrl: string;\n  children: React.ReactNode;\n  testId: string;\n  headerTestId: string;\n};\n\nexport const TeaserWrapper = ({\n  title,\n  redirectUrl,\n  children,\n  testId,\n  headerTestId,\n}: TeaserProps) => {\n  return (\n    <a\n      href={redirectUrl}\n      data-testid={testId}\n      className=\"m:z-10 m:h-[221px] m:min-w-[304px] m:cursor-pointer m:overflow-hidden m:rounded-sm m:bg-blue-750 m:p-4 m:text-neutral-white m:no-underline m:hover:bg-blue-800 m:hover:text-neutral-white m:active:bg-blue-800 m:lg:max-w-[359px] m:lg:min-w-[296px] m:xl:min-w-[378.66px] m:dark:bg-blue-850 m:dark:hover:bg-blue-750 m:dark:active:bg-blue-750\">\n      <div aria-hidden className=\"m:h-full\">\n        <h2\n          data-testid={headerTestId}\n          className=\"m:text-xl m:leading-tight m:font-normal! m:tracking-0.4 m:text-neutral-white m:hover:text-neutral-white\">\n          {title}\n        </h2>\n        {children}\n      </div>\n    </a>\n  );\n};\n","import { Error } from \"@Components/common/Error\";\nimport Figure from \"@Components/weather-report/figure/Figure\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { useArticle } from \"@Hooks/useArticle\";\n\nexport const WeatherReportTeaser = () => {\n  const { article, error } = useArticle();\n  const { t } = useTranslations();\n  if (error) {\n    return <Error />;\n  }\n\n  return (\n    <div className=\"m:flex m:h-full m:flex-col m:justify-between m:self-stretch m:text-neutral-white m:hover:text-neutral-white\">\n      {article?.lead && (\n        <blockquote className=\"m:before:text-white m:after:text-white m:mt-[6px] m:font-serif m:text-[20px] m:leading-normal m:font-light m:tracking-0.4 m:before:content-['«'] m:after:content-['»']\">\n          <span>&nbsp;{article.lead}&nbsp;</span>\n        </blockquote>\n      )}\n      <div className=\"m:mb-4 m:flex\">\n        {article?.image && <Figure {...article.image} format=\"avatar-small\" />}\n        <p className=\"m:tracking-tracking-0.4 m:ml-3 m:flex m:flex-col m:justify-center m:gap-[2px] m:text-xl m:leading-[16.1px] m:font-medium m:antialiased\">\n          {article?.author && <span>{article.author}</span>}\n          <span className=\"m:block m:text-[12px] m:leading-[13.8px] m:font-normal m:text-blue-100 m:dark:text-blue-200\">\n            {t(\"businessUnit\")}\n          </span>\n        </p>\n      </div>\n    </div>\n  );\n};\n","import { RadarTeaser } from \"@Components/teaser/RadarTeaser\";\nimport { TeaserWrapper } from \"@Components/teaser/TeaserWrapper\";\nimport { WeatherReportTeaser } from \"@Components/teaser/WeatherReportTeaser\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { useBusinessUnit } from \"@Hooks/useBusinessUnit\";\nimport { BusinessUnit } from \"@Models/BusinessUnit\";\nimport React from \"react\";\n\ntype TeaserConfig = {\n  titleKey: string;\n  getRedirectUrl: (businessUnit: BusinessUnit) => string;\n  showFor: BusinessUnit[];\n  component: React.FC;\n  testId: string;\n  headerTestId: string;\n};\n\nconst TEASER_CONFIG: TeaserConfig[] = [\n  {\n    titleKey: \"teaser.radar\",\n    getRedirectUrl: (businessUnit) =>\n      businessUnit === \"SRF\" ? \"/meteo/radar\" : \"/aura/radar\",\n    showFor: [\"SRF\", \"RTR\"],\n    component: RadarTeaser,\n    testId: \"radar-teaser\",\n    headerTestId: \"radar-teaser-header\",\n  },\n  {\n    titleKey: \"teaser.weatherReport\",\n    getRedirectUrl: () => \"/meteo/wetterbericht\",\n    showFor: [\"SRF\"],\n    component: WeatherReportTeaser,\n    testId: \"weather-report-teaser\",\n    headerTestId: \"weather-report-teaser-header\",\n  },\n];\n\nexport const TeaserContainer: React.FC = () => {\n  const businessUnit = useBusinessUnit();\n  const { t } = useTranslations();\n\n  const visibleTeasers = TEASER_CONFIG.filter((teaser) =>\n    teaser.showFor.includes(businessUnit),\n  );\n\n  return (\n    <div className=\"m:mt-8 m:grid m:grid-cols-1 m:gap-2 m:px-2 m:pb-4 m:md:grid-cols-2 m:md:gap-6 m:md:px-8 m:lg:grid-cols-3 m:xl:gap-8 m:xl:px-10\">\n      {visibleTeasers.map((teaser, index) => (\n        <TeaserWrapper\n          key={`${teaser.titleKey}-${index}`}\n          title={t(teaser.titleKey)}\n          redirectUrl={teaser.getRedirectUrl(businessUnit)}\n          testId={teaser.testId}\n          headerTestId={teaser.headerTestId}>\n          <teaser.component />\n        </TeaserWrapper>\n      ))}\n    </div>\n  );\n};\n","export type Representation = \"temperature\" | \"wind\" | \"snow\";\n\nexport const REPRESENTATIONS: Representation[] = [\n  \"temperature\",\n  \"wind\",\n  \"snow\",\n];\n","import { MAX_NUMBER_OF_DAYS_FOR_FORECAST } from \"@Constants/forecast\";\nimport { REPRESENTATIONS, Representation } from \"@Constants/representation\";\nimport {\n  useForecastAppContext,\n  useForecastAppDispatcher,\n} from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { formatAsIsoStyleDate } from \"@Utils/date\";\nimport { animateScrollToPosition } from \"@Utils/scrolling\";\nimport { trackDaySelection } from \"@Utils/tracking\";\nimport {\n  RefObject,\n  SyntheticEvent,\n  createRef,\n  useEffect,\n  useRef,\n  useState,\n} from \"react\";\nimport { useDebounceCallback } from \"usehooks-ts\";\n\nconst SCROLL_HANDLER_DEBOUNCE_TIME = 100;\nconst MOUSE_WHEEL_SCROLL_HANDLER_DEBOUNCE_TIME = 200;\nconst SCROLL_STEP = 600;\nconst NAVIGATE_DEBOUNCE_TIME = 50;\n\nexport type ScrollHandler = (\n  e: SyntheticEvent<HTMLElement>,\n  source: RefObject<HTMLDivElement | null> | null,\n) => void;\n\ntype UseScrollInteractions = {\n  containerRefs: React.RefObject<\n    Record<Representation, RefObject<HTMLDivElement | null>>\n  >;\n  dayRefs: React.RefObject<\n    Record<Representation, RefObject<HTMLLIElement | null>[]>\n  >;\n  canNavigateLeft: boolean;\n  canNavigateRight: boolean;\n  navigateLeft: () => void;\n  navigateRight: () => void;\n  handleScroll: ScrollHandler;\n  handleMouseWheelScroll: ScrollHandler;\n};\n\nexport const useScrollInteractions = (): UseScrollInteractions => {\n  const dispatch = useForecastAppDispatcher();\n  const { activeDate, forecastPointWeek } = useForecastAppContext();\n  const [scrollXPosition, setScrollXPosition] = useState<number | null>(null);\n  const previousActiveDate = useRef<string | undefined>(undefined);\n  const animateScroll = useRef<boolean>(true);\n  const checkForScrollPositionCrossedDateBoundary = useRef<boolean>(true);\n  const containerRefs = useRef<\n    Record<Representation, RefObject<HTMLDivElement | null>>\n  >({\n    temperature: createRef<HTMLDivElement | null>(),\n    wind: createRef<HTMLDivElement | null>(),\n    snow: createRef<HTMLDivElement | null>(),\n  });\n\n  const createRepresentationRefs = () => {\n    return Array.from({ length: MAX_NUMBER_OF_DAYS_FOR_FORECAST }, () =>\n      createRef<HTMLLIElement | null>(),\n    );\n  };\n  const dayRefs = useRef<\n    Record<Representation, RefObject<HTMLLIElement | null>[]>\n  >({\n    temperature: createRepresentationRefs(),\n    wind: createRepresentationRefs(),\n    snow: createRepresentationRefs(),\n  });\n  const activeNavigationContainerRef = useRef<\n    RefObject<HTMLLIElement | null>[] | null\n  >(null);\n  const dayIndexLookup = useRef<Map<string, number>>(new Map());\n  const [canNavigateLeft, setCanNavigateLeft] = useState<boolean>(true);\n  const [canNavigateRight, setCanNavigateRight] = useState<boolean>(true);\n  const getMaxScrollablePosition = () => {\n    const containerElement = containerRefs.current[REPRESENTATIONS[0]].current;\n    if (!containerElement) {\n      return 0;\n    }\n\n    const maxContainerScrollWidth = containerElement.scrollWidth;\n    const maxScrollablePosition =\n      maxContainerScrollWidth - containerElement.getBoundingClientRect().width;\n\n    return maxScrollablePosition;\n  };\n\n  const getActiveDateFromScrollPosition = () => {\n    let referencePoint = window.innerWidth / 2; // center of screen\n\n    // On larger screens it is not possible to scroll the last day past the end of the screen,\n    // thus we \"bias\" the reference point a bit to the right\n    if (window.innerWidth >= 1024) {\n      const bias =\n        dayRefs.current[REPRESENTATIONS[0]].length > 0\n          ? (dayRefs.current[\n              REPRESENTATIONS[0]\n            ][0]?.current?.getBoundingClientRect().width ?? 0) * 2\n          : 0;\n      referencePoint = referencePoint + bias;\n    }\n\n    if (!activeNavigationContainerRef.current) {\n      return;\n    }\n\n    const daysLeftOfReferencePoint = activeNavigationContainerRef?.current\n      // remove elements right from reference point\n      .filter((activeNavigationContainerRef) => {\n        if (!activeNavigationContainerRef.current) {\n          return false;\n        }\n        const dayElement = activeNavigationContainerRef.current;\n        return dayElement.getBoundingClientRect().left <= referencePoint;\n      })\n      // sort by distance to reference point, closest first\n      .sort((a, b) => {\n        const ax = a.current?.getBoundingClientRect().left ?? 0;\n        const bx = b.current?.getBoundingClientRect().left ?? 0;\n\n        if (ax === bx) {\n          return 0;\n        }\n\n        return ax < bx ? 1 : -1;\n      });\n\n    if (\n      daysLeftOfReferencePoint.length === 0 ||\n      !daysLeftOfReferencePoint[0].current\n    ) {\n      return undefined;\n    }\n\n    return daysLeftOfReferencePoint[0].current.dataset.day;\n  };\n\n  const updateScrollXPosition = (\n    position: number | ((previousPosition: number | null) => number),\n    skipCheckForScrollPositionCrossedDateBoundary = false,\n  ) => {\n    checkForScrollPositionCrossedDateBoundary.current =\n      !skipCheckForScrollPositionCrossedDateBoundary;\n    setScrollXPosition(position);\n  };\n\n  const navigateLeft = useDebounceCallback(() => {\n    animateScroll.current = true;\n\n    updateScrollXPosition((previousScrollXPosition) =>\n      Math.max((previousScrollXPosition ?? 0) - SCROLL_STEP, 0),\n    );\n  }, NAVIGATE_DEBOUNCE_TIME);\n\n  const navigateRight = useDebounceCallback(() => {\n    animateScroll.current = true;\n\n    updateScrollXPosition((previousScrollXPosition) =>\n      Math.min(\n        (previousScrollXPosition ?? 0) + SCROLL_STEP,\n        getMaxScrollablePosition(),\n      ),\n    );\n  }, NAVIGATE_DEBOUNCE_TIME);\n\n  const innerHandleScroll = (\n    _e: SyntheticEvent<HTMLElement>,\n    sourceRef: RefObject<HTMLDivElement | null> | null,\n  ) => {\n    if (!sourceRef || !sourceRef.current) {\n      return;\n    }\n\n    const sourceElement = sourceRef.current;\n    const scrollPosition = sourceElement.scrollLeft;\n\n    animateScroll.current = true;\n\n    updateScrollXPosition(scrollPosition);\n  };\n\n  // Wait for the scroll event to finish before updating the scroll position\n  const handleScroll = (\n    _e: SyntheticEvent<HTMLElement>,\n    sourceRef: RefObject<HTMLDivElement | null> | null,\n  ) => {\n    if (!sourceRef || !sourceRef.current) {\n      return;\n    }\n\n    let previousPosition = 0;\n    const handler = setInterval(() => {\n      if (!sourceRef || !sourceRef.current) {\n        return;\n      }\n\n      const sourceElement = sourceRef.current;\n      const position = sourceElement.scrollLeft;\n\n      if (position === previousPosition) {\n        // Scrolling has stopped\n        clearInterval(handler);\n        innerHandleScroll(_e, sourceRef);\n      }\n      previousPosition = position;\n    }, SCROLL_HANDLER_DEBOUNCE_TIME);\n  };\n\n  const handleMouseWheelScroll = useDebounceCallback(\n    innerHandleScroll,\n    MOUSE_WHEEL_SCROLL_HANDLER_DEBOUNCE_TIME,\n  );\n\n  const scrollToDate = (date: string) => {\n    const dayIndex = dayIndexLookup.current.get(date) ?? 0;\n    const dayRef = dayRefs.current[REPRESENTATIONS[0]][dayIndex];\n    if (!dayRef || !dayRef.current) {\n      return;\n    }\n\n    const dayElement = dayRef.current;\n    updateScrollXPosition(\n      Math.min(dayElement.offsetLeft, getMaxScrollablePosition()),\n      true,\n    );\n  };\n\n  const scrollContainersToPosition = (position: number) => {\n    REPRESENTATIONS.forEach((representation) => {\n      const containerElement = containerRefs.current[representation]?.current;\n      if (!containerElement) {\n        return;\n      }\n\n      animateScrollToPosition(\n        containerElement,\n        position,\n        animateScroll.current ?? true,\n      );\n    });\n  };\n\n  const trackActiveContainer =\n    (representation: Representation) => (e: Event) => {\n      const containerElement = containerRefs?.current[representation]?.current;\n      if (e.target === containerElement) {\n        activeNavigationContainerRef.current = dayRefs.current[representation];\n      }\n    };\n\n  useEffect(() => {\n    const scrollBindings = REPRESENTATIONS.map((representation) => ({\n      element: containerRefs?.current[representation]?.current,\n      listener: trackActiveContainer(representation),\n    }));\n\n    scrollBindings.forEach(({ element, listener }) => {\n      element?.addEventListener(\"scroll\", listener);\n    });\n\n    return () => {\n      scrollBindings.forEach(({ element, listener }) => {\n        element?.removeEventListener(\"scroll\", listener);\n      });\n    };\n  }, []);\n\n  // Listen for scroll position updates, and run the check if the date needs to be switched, if necessary.\n  useEffect(() => {\n    if (scrollXPosition === null || dayIndexLookup.current.size === 0) {\n      return;\n    }\n    scrollContainersToPosition(scrollXPosition);\n    setCanNavigateLeft(scrollXPosition > 0);\n    setCanNavigateRight(\n      scrollXPosition === 0 || scrollXPosition < getMaxScrollablePosition(),\n    );\n\n    animateScroll.current = true;\n\n    // Check whether we need to change the active date in case the user\n    // has scrolled past a day boundary\n    if (checkForScrollPositionCrossedDateBoundary.current) {\n      const dateFromScrollPosition = getActiveDateFromScrollPosition();\n      if (\n        previousActiveDate.current !== dateFromScrollPosition &&\n        dateFromScrollPosition\n      ) {\n        const dateIndex =\n          dayIndexLookup.current.get(dateFromScrollPosition) ?? 0;\n        trackDaySelection(dateIndex, \"scroll\");\n\n        dispatch({\n          type: \"set-active-date\",\n          data: {\n            value: dateFromScrollPosition,\n            source: \"scroll-over-date-boundary\",\n          },\n        });\n      }\n    }\n  }, [dispatch, scrollXPosition]);\n\n  // Listen for changes of the active date, and scroll to the correct date. Also account for the source of the change, to skip scrolling at\n  // all or disable the animation.\n  useEffect(() => {\n    previousActiveDate.current = activeDate.value;\n\n    // For the initial load, disable the animation, so the correct date appears instantly\n    if (activeDate.source === \"initial\") {\n      animateScroll.current = false;\n    } else {\n      animateScroll.current = true;\n    }\n\n    // Do not scroll if the date was changed due to scrolling over a date boundary\n    if (activeDate.source === \"scroll-over-date-boundary\") {\n      return;\n    }\n\n    if (\n      activeDate &&\n      activeDate.value &&\n      Object.keys(containerRefs.current).length > 0 &&\n      Object.keys(dayRefs.current[REPRESENTATIONS[0]]).length > 0 &&\n      dayIndexLookup.current.size > 0\n    ) {\n      scrollToDate(activeDate.value);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    activeDate,\n    containerRefs.current,\n    dayRefs.current,\n    dayIndexLookup.current.size,\n  ]);\n\n  useEffect(() => {\n    if (!forecastPointWeek) {\n      return;\n    }\n\n    // Construct a map of day dates to their index dayRefs array\n    const { days = [] } = forecastPointWeek;\n    const dayDates = days\n      .map((day) => formatAsIsoStyleDate(day.date_time))\n      .sort();\n\n    dayIndexLookup.current.clear();\n    dayDates.forEach((dayDate, index) => {\n      dayIndexLookup.current.set(dayDate, index);\n    });\n  }, [forecastPointWeek]);\n\n  return {\n    containerRefs,\n    dayRefs,\n    canNavigateLeft,\n    canNavigateRight,\n    navigateLeft,\n    navigateRight,\n    handleScroll,\n    handleMouseWheelScroll,\n  };\n};\n","import { ContentContainer } from \"@Components/forecast/ContentContainer\";\nimport { DailyWeatherOverview } from \"@Components/forecast/DailyWeatherOverview\";\nimport { NavigationContainer } from \"@Components/forecast/hourly/NavigationContainer\";\nimport { TeaserContainer } from \"@Components/teaser/TeaserContainer\";\nimport { REPRESENTATIONS } from \"@Constants/representation\";\nimport { useScrollInteractions } from \"@Hooks/useScrollInteractions\";\n\nexport const WeatherDetailsContainer = () => {\n  const {\n    containerRefs,\n    dayRefs,\n    canNavigateLeft,\n    canNavigateRight,\n    navigateLeft,\n    navigateRight,\n    handleScroll,\n    handleMouseWheelScroll,\n  } = useScrollInteractions();\n\n  return (\n    <ContentContainer className=\"m:justify-normal! m:overflow-hidden m:bg-warmgrey-10 m:py-6 m:md:px-0 m:lg:justify-center! m:dark:bg-blue-950\">\n      <DailyWeatherOverview />\n      {REPRESENTATIONS.map((representation, index) => (\n        <NavigationContainer\n          key={index}\n          representation={representation}\n          ref={containerRefs.current[representation]}\n          dayRefs={dayRefs ?? []}\n          canNavigateLeft={canNavigateLeft}\n          canNavigateRight={canNavigateRight}\n          navigateLeft={navigateLeft}\n          navigateRight={navigateRight}\n          handleScroll={handleScroll}\n          handleMouseWheelScroll={handleMouseWheelScroll}\n        />\n      ))}\n      <TeaserContainer />\n    </ContentContainer>\n  );\n};\n","import { WeatherIcon } from \"@Components/common/icon/WeatherIcon\";\nimport { Bars } from \"@Components/forecast/Bars\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { DayForecastInterval } from \"@MeteoApi/models/DayForecastInterval\";\nimport { formatRainProbability } from \"@Utils/format\";\nimport classNames from \"classnames\";\nimport { RefObject, useState } from \"react\";\n\ntype DayProps = {\n  label: string;\n  day: DayForecastInterval;\n  rainAmountInSegments: number[];\n  isActive: boolean;\n  symbolText: string;\n  isIconAnimated: boolean;\n  onSelect: () => void;\n  keyboardNavigationRef: RefObject<boolean>;\n};\n\nexport const Day = ({\n  label,\n  rainAmountInSegments = [],\n  isActive,\n  day,\n  onSelect,\n  symbolText,\n  isIconAnimated,\n  keyboardNavigationRef,\n}: DayProps) => {\n  const { t } = useTranslations();\n\n  const {\n    symbol24_code: symbolCode,\n    TN_C: temperatureLow,\n    TX_C: temperatureHigh,\n    PROBPCP_PERCENT: rainProbability,\n    RRR_MM: rainAmount,\n  } = day;\n  const isLessThanFivePercentProbability = rainProbability < 5;\n  const [isHovered, setIsHovered] = useState(false);\n\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n    keyboardNavigationRef.current = e.key === \"Enter\";\n  };\n\n  return (\n    <button\n      type=\"button\"\n      className={classNames(\n        \"m:flex m:h-full m:w-full m:cursor-pointer m:flex-col m:items-stretch m:overflow-y-hidden m:border-0 m:p-0 m:pt-4 m:font-sans m:text-base m:leading-3 m:tracking-0.2 m:text-blue-950 m:transition-[background-color] m:delay-0 m:duration-[0.4s] m:ease-linear m:hover:font-bold m:md:pt-6 m:md:pb-4 m:md:text-base m:lg:pt-4 m:lg:pb-2 m:lg:text-2xl m:dark:text-neutral-white\",\n        {\n          \"m:bg-neutral-offwhite! m:font-bold! m:dark:bg-blue-950!\":\n            isActive || isHovered,\n        },\n        {\n          \"m:bg-warmgrey-25 m:dark:bg-blue-900\": !isActive,\n        },\n        {\n          \"m:font-normal\": !isActive && !isHovered,\n        },\n      )}\n      data-testid=\"day-select\"\n      data-active={isActive}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n      onFocus={() => setIsHovered(true)}\n      onBlur={() => setIsHovered(false)}\n      onKeyDown={(e) => handleKeyDown(e)}\n      onClick={() => {\n        onSelect();\n        setIsHovered(false);\n      }}>\n      {isActive && (\n        <span className=\"m:sr-only\">{t(\"general.a11ySelected\")}</span>\n      )}\n      <span\n        className=\"m:block m:text-base m:lg:mt-0 m:lg:text-xl m:lg:leading-[14px] m:lg:tracking-0.4\"\n        data-testid=\"day-navigation-item-label\">\n        {label}\n      </span>\n\n      <WeatherIcon\n        variant=\"forecast-day\"\n        symbolCode={symbolCode}\n        altText={symbolText}\n        animated={isIconAnimated}\n        testId=\"day-navigation-item-symbol\"\n      />\n\n      <span className=\"m:block m:gap-2 m:px-2 m:pt-1 m:pb-2 m:text-center m:text-base m:font-normal m:md:pt-2 m:md:text-base m:lg:text-xl m:lg:leading-[14px]\">\n        <span className=\"m:text-2xl m:leading-[16px] m:font-normal m:tracking-0.2 m:md:ml-auto m:lg:text-4xl m:lg:leading-5\">\n          <span\n            role=\"presentation\"\n            aria-hidden=\"true\"\n            data-testid=\"day-navigation-item-temperature-high\">{`${temperatureLow}° | `}</span>\n          <span className=\"m:sr-only\">\n            {t(\"forecast.a11yTemperatureDuringNight\", {\n              temperature: temperatureLow,\n            })}\n          </span>\n        </span>\n        <span className=\"m:text-2xl m:leading-[16px] m:font-bold m:tracking-0.2 m:md:ml-auto m:lg:text-4xl m:lg:leading-5\">\n          <span\n            role=\"presentation\"\n            aria-hidden=\"true\"\n            data-testid=\"day-navigation-item-temperature-low\">{`${temperatureHigh}°`}</span>\n          <span className=\"m:sr-only\">\n            {t(\"forecast.a11yTemperatureDuringDay\", {\n              temperature: temperatureHigh,\n            })}\n          </span>\n        </span>\n      </span>\n\n      <div className=\"m:relative\">\n        <Bars values={rainAmountInSegments} unit=\"mm\" scalingFactor={5} />\n      </div>\n\n      <div className=\"m:flex m:flex-col m:pt-2\">\n        <div\n          className={classNames(\n            \"m:text-xl m:font-bold m:after:content-['_mm'] m:xs:text-base m:md:text-base m:lg:text-xl m:lg:leading-[14px]\",\n            {\n              \"m:text-warmgrey-700 m:dark:text-blue-400\":\n                isLessThanFivePercentProbability || rainAmount === 0,\n            },\n          )}>\n          <span className=\"m:sr-only\">{t(\"forecast.rainAmount\")}</span>\n          <span data-testid=\"day-navigation-item-rain-amount\">{`${rainAmount}`}</span>\n        </div>\n        <div\n          className={classNames(\n            \"m:text-xl m:after:content-['_%'] m:xs:text-base m:md:text-base m:lg:text-xl m:lg:leading-[14px]\",\n            {\n              \"m:text-warmgrey-700 m:after:content-['_%'] m:dark:text-blue-400\":\n                isLessThanFivePercentProbability || rainAmount === 0,\n            },\n          )}>\n          <span className=\"m:sr-only\">{t(\"forecast.rainProbability\")}</span>\n          <span data-testid=\"day-navigation-item-rain-probability\">{`${formatRainProbability(rainProbability)}`}</span>\n        </div>\n      </div>\n    </button>\n  );\n};\n","import { ContentContainer } from \"@Components/forecast/ContentContainer\";\nimport { Day } from \"@Components/forecast/daily/Day\";\nimport {\n  useForecastAppContext,\n  useForecastAppDispatcher,\n} from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { useAnimatedWeatherIcons } from \"@Hooks/useAnimatedWeatherIcons\";\nimport { useQueryParam } from \"@Hooks/useQueryParam\";\nimport { DayForecastInterval } from \"@MeteoApi/models/DayForecastInterval\";\nimport { formatAsIsoStyleDate, formatAsWeekday } from \"@Utils/date\";\nimport { getValidForecastDays } from \"@Utils/interval\";\nimport { scrollElementToViewport } from \"@Utils/scrolling\";\nimport { trackDaySelection } from \"@Utils/tracking\";\nimport { RefObject, useCallback, useEffect, useRef, useState } from \"react\";\n\nexport const NavigationContainer = () => {\n  const dispatch = useForecastAppDispatcher();\n  const { activeDate, forecastPointWeek, symbolTexts } =\n    useForecastAppContext();\n  const { updateValue: updateDateQueryParamValue } = useQueryParam(\"date\");\n  const { currentLocale } = useTranslations();\n  const { enabled: isWeatherIconAnimated } = useAnimatedWeatherIcons();\n\n  const [days, setDays] = useState<DayForecastInterval[]>([]);\n  const dayRefs = useRef<{ [key: string]: RefObject<HTMLLIElement> }>({});\n  const [timezone, setTimezone] = useState<string>(\"Europe/Zurich\");\n  const keyboardNavigationRef = useRef(false);\n\n  const handleDaySelect = (date: string, index: number) => {\n    if (dayRefs?.current[date]?.current) {\n      const element = dayRefs?.current[date]?.current;\n\n      if (element) {\n        scrollElementToViewport(element, 16, keyboardNavigationRef);\n      }\n\n      dispatch({\n        type: \"set-active-date\",\n        data: {\n          value: date,\n          source: \"user-day-select\",\n        },\n      });\n\n      trackDaySelection(index, \"click\");\n    }\n  };\n\n  const isActive = useCallback(\n    (dateOnly: string, index: number): boolean => {\n      if (!activeDate) {\n        return false;\n      }\n      // Check if the active date is available in the data\n      const hasDayWithDate = days.some((day) =>\n        day.date_time.startsWith(activeDate.value),\n      );\n\n      // If the active date matches the current date being iterate on\n      if (hasDayWithDate) {\n        return dateOnly === activeDate.value;\n      }\n\n      // Otherwise, if it's the first day\n      return index === 0;\n    },\n    [activeDate, days],\n  );\n\n  const getRainAmountsInSegmentsForDate = (date: string): number[] => {\n    if (!forecastPointWeek) {\n      return [];\n    }\n\n    const { three_hours = [] } = forecastPointWeek;\n\n    // Find all three hour intervals (segments) of the given date\n    const threeHourIntervalsForDate = three_hours.filter((interval) =>\n      interval.date_time.startsWith(date),\n    );\n\n    return threeHourIntervalsForDate.map((interval) => interval.RRR_MM);\n  };\n\n  useEffect(() => {\n    if (!forecastPointWeek || Object.keys(forecastPointWeek).length === 0) {\n      return;\n    }\n\n    setDays(getValidForecastDays(forecastPointWeek, dayRefs));\n    setTimezone(forecastPointWeek.geolocation.timezone);\n  }, [forecastPointWeek]);\n\n  useEffect(() => {\n    if (activeDate) {\n      updateDateQueryParamValue(activeDate.value);\n    }\n  }, [activeDate, updateDateQueryParamValue]);\n\n  return (\n    <div className=\"m:border-0 m:border-b-2 m:border-solid m:border-warmgrey-100 m:bg-warmgrey-25 m:font-sans m:text-blue-950 m:dark:border-blue-850 m:dark:bg-blue-900 m:dark:text-neutral-white\">\n      <ContentContainer xOverflowAuto>\n        <div className=\"m:overflow-x-auto m:before:right-full m:after:left-full m:md:px-8 m:lg:before:absolute m:lg:before:bottom-0 m:lg:before:block m:lg:before:h-[252px] m:lg:before:content-[''] m:lg:after:absolute m:lg:after:bottom-0 m:lg:after:block m:lg:after:h-[252px] m:lg:after:content-[''] m:xl:px-10\">\n          <ul\n            className=\"m:scrollbar-hidden m:flex m:list-none m:overflow-x-auto m:font-light\"\n            data-testid=\"day-navigation\">\n            {days.map((day, index) => {\n              const localDateTime = day.date_time;\n              const localDateOnly = formatAsIsoStyleDate(localDateTime);\n\n              const rainAmountInSegments =\n                getRainAmountsInSegmentsForDate(localDateOnly);\n\n              const label = formatAsWeekday(\n                localDateTime,\n                timezone,\n                currentLocale,\n              );\n              return (\n                <li\n                  key={localDateOnly}\n                  className=\"m:m-0 m:list-item m:h-[214px] m:max-w-[117px] m:min-w-[102px] m:shrink-0 m:grow m:basis-[28%] m:p-0 m:antialiased m:transition-[height] m:delay-0 m:duration-[0.2s] m:ease-in-out m:before:absolute m:before:content-[''] m:xs:shrink-0 m:xs:grow-0 m:xs:basis-[104px] m:md:h-[242px] m:md:max-w-[160px] m:md:shrink-0 m:md:grow m:md:basis-[104px] m:lg:h-[252px] m:lg:max-w-[200px] m:lg:shrink m:lg:grow-0 m:lg:basis-[200px]\"\n                  data-date={localDateOnly}\n                  data-active={isActive(localDateOnly, index)}\n                  ref={dayRefs.current[localDateOnly]}\n                  data-testid=\"day-navigation-item\">\n                  <Day\n                    label={label}\n                    day={day}\n                    symbolText={symbolTexts[day.symbol24_code]}\n                    rainAmountInSegments={rainAmountInSegments}\n                    isActive={isActive(localDateOnly, index)}\n                    isIconAnimated={isWeatherIconAnimated}\n                    onSelect={() => handleDaySelect(localDateOnly, index)}\n                    keyboardNavigationRef={keyboardNavigationRef}\n                  />\n                </li>\n              );\n            })}\n          </ul>\n        </div>\n      </ContentContainer>\n    </div>\n  );\n};\n","import classNames from \"classnames\";\nimport { useId, useRef } from \"react\";\n\n// Material UI Switch Design in Tailwind inspired by:\n// https://www.material-tailwind.com/docs/react/switch#switch\n// https://github.com/creativetimofficial/material-tailwind/blob/5fca58a67da2ebff00662b7b4ebc931735240b13/packages/material-tailwind-react/src/components/Switch/index.tsx\n// https://github.com/creativetimofficial/material-tailwind/blob/5fca58a67da2ebff00662b7b4ebc931735240b13/packages/material-tailwind-react/src/theme/components/switch/index.ts\n\nexport const Switch = (\n  props: React.DetailedHTMLProps<\n    React.InputHTMLAttributes<HTMLInputElement>,\n    HTMLInputElement\n  > & {\n    label?: string;\n  },\n) => {\n  const { className, id: _id, type: _type, label = \"\", ...restProps } = props;\n  const generatedId = useId();\n  const id = _id || generatedId;\n  const switchRef = useRef<HTMLInputElement>(null);\n\n  const onKeyUp = (\n    e: React.KeyboardEvent<HTMLInputElement | HTMLLabelElement>,\n  ) => {\n    if (e.key === \"Enter\" || e.key === \" \") {\n      switchRef.current?.click();\n    }\n  };\n\n  return (\n    <div className=\"m:flex m:h-[18px] m:items-center m:gap-3\">\n      {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n      <label\n        htmlFor=\"animated-weather-icon\"\n        className=\"m:text-base m:leading-[15px] m:font-medium m:tracking-0.4 m:antialiased\"\n        onKeyUp={onKeyUp}>\n        {label}\n      </label>\n\n      <div className=\"m:relative m:inline-block m:h-4 m:w-8 m:cursor-pointer m:rounded-full\">\n        <input\n          type=\"checkbox\"\n          id={id}\n          className={classNames(\n            \"m:peer/switch m:absolute m:h-4 m:w-8 m:cursor-pointer m:appearance-none m:rounded-full m:bg-special-switch-track m:transition-colors m:duration-300 m:peer-checked/switch:border-blue-400 m:peer-checked/switch:before:bg-blue-400 m:checked:bg-blue-400\",\n            className,\n          )}\n          ref={switchRef}\n          onKeyUp={onKeyUp}\n          {...restProps}\n        />\n        {/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}\n        <label\n          htmlFor={id}\n          className=\"m:before:content[''] m:absolute m:top-2/4 m:-left-1 m:h-5 m:w-5 m:-translate-y-2/4 m:cursor-pointer m:rounded-full m:border m:border-solid m:border-special-switch-knob m:bg-special-switch-knob m:shadow-switch-knob m:transition-all m:duration-300 m:peer-checked/switch:translate-x-full m:peer-checked/switch:border-blue-200 m:peer-checked/switch:bg-blue-200 m:before:absolute m:before:top-2/4 m:before:left-2/4 m:before:block m:before:h-10 m:before:w-10 m:before:-translate-x-2/4 m:before:-translate-y-2/4 m:before:rounded-full m:before:bg-blue-400 m:before:opacity-0 m:before:transition-opacity m:hover:before:opacity-10\">\n          <div className=\"m:relative m:top-2/4 m:left-2/4 m:inline-block m:-translate-x-2/4 m:-translate-y-2/4 m:overflow-hidden m:rounded-full m:p-5\"></div>\n        </label>\n      </div>\n    </div>\n  );\n};\n","import { Switch } from \"@Components/forecast/Switch\";\nimport { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { useAnimatedWeatherIcons } from \"@Hooks/useAnimatedWeatherIcons\";\nimport { useGeolocationName } from \"@Hooks/useGeolocationName\";\n\nexport const LocationDisplay = () => {\n  const { forecastPointWeek } = useForecastAppContext();\n  const { t } = useTranslations();\n  const geolocationName = useGeolocationName(forecastPointWeek?.geolocation);\n  const {\n    enabled: isWeatherIconAnimated,\n    setEnabled: setIsWeatherIconAnimated,\n  } = useAnimatedWeatherIcons();\n\n  return (\n    <div className=\"m:w-full\">\n      <div className=\"m:mt-6 m:flex m:flex-col m:gap-[2px] m:px-4 m:text-xl m:font-normal m:tracking-0.4 m:text-blue-50 m:xs:mx-4 m:xs:px-0 m:md:mx-0 m:md:mt-2\">\n        <span className=\"m:sr-only\">\n          {t(\"general.a11yDescriptionLong\", {\n            descriptionLong: geolocationName?.description_long,\n          })}\n        </span>\n        <span\n          className=\"m:h-[18px] m:leading-tight m:antialiased\"\n          aria-hidden=\"true\">\n          {t(\"general.weather\")}\n        </span>\n        <h2\n          className=\"m:m-0 m:flex m:h-10 m:items-center m:p-0 m:text-8xl m:font-medium m:tracking-0.2 m:text-neutral-white\"\n          aria-hidden=\"true\"\n          data-testid=\"location-name\">\n          {geolocationName?.name}\n        </h2>\n        <div className=\"m:flex m:justify-between\">\n          <p\n            className=\"m:m-0 m:h-[18px] m:p-0 m:antialiased\"\n            aria-hidden=\"true\"\n            data-testid=\"location-description\">\n            {geolocationName?.description_long}\n          </p>\n          <div className=\"m:lg:pr-10 m:xl:pr-14\">\n            <Switch\n              label={t(\"weatherIcon.label\")}\n              id=\"animated-weather-icon\"\n              checked={isWeatherIconAnimated}\n              onChange={(e) => setIsWeatherIconAnimated(e.target.checked)}\n            />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import * as React from \"react\";\nconst SvgArrow = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", stroke: \"white\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Icons/Close_Outline_24\" }, /* @__PURE__ */ React.createElement(\"path\", { id: \"Icon\", d: \"M8 4L16 12L8 20\", strokeLinecap: \"round\", strokeLinejoin: \"round\" })));\nexport default SvgArrow;\n","import { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport Arrow from \"@Resources/images/iconsets/arrow.svg?react\";\nimport classNames from \"classnames\";\nimport { useState } from \"react\";\n\ntype DropdownProps = {\n  icon?: React.ReactNode;\n  title: string;\n  children: React.ReactNode;\n  offscreenTitle?: string;\n};\n\nconst Dropdown = ({ icon, title, children, offscreenTitle }: DropdownProps) => {\n  const { t } = useTranslations();\n  const [expanded, setExpanded] = useState(false);\n\n  return (\n    <>\n      <button\n        data-testid=\"weather-warning-dropdown\"\n        onClick={() => setExpanded(!expanded)}\n        className={classNames(\n          \"m:w-full m:clickable-primary m:p-4 m:text-center\",\n          {\n            \"m:hover:bg-blue-750 m:focus:bg-blue-750 m:dark:hover:bg-blue-850 m:dark:focus:bg-blue-850\":\n              expanded,\n          },\n        )}\n        aria-live=\"polite\"\n        aria-expanded={expanded}>\n        <div className=\"m:flex m:items-center m:justify-between\">\n          <div className=\"m:flex m:gap-2\">\n            {icon}\n            <span className=\"m:my-auto m:items-center m:font-sans m:text-xl m:leading-normal m:font-medium m:tracking-0.2\">\n              {title}\n              {offscreenTitle && (\n                <span className=\"m:sr-only\">{offscreenTitle}</span>\n              )}\n              <span className=\"m:sr-only\">\n                {t(expanded ? \"forecast.a11yCollapse\" : \"forecast.a11yExtend\")}\n              </span>\n            </span>\n          </div>\n          <Arrow\n            className={classNames(\"m:transition-transform m:duration-300\", {\n              \"m:rotate-90\": !expanded,\n              \"m:rotate-[270deg]\": expanded,\n            })}\n          />\n        </div>\n      </button>\n      <div\n        aria-hidden={!expanded}\n        className={classNames(\n          \"m:grid m:w-full m:bg-blue-750 m:px-4 m:pt-0 m:transition-grid-row m:duration-300 m:ease-in-out m:dark:bg-blue-850\",\n          {\n            \"m:grid-rows-[0fr]\": !expanded,\n            \"m:grid-rows-[1fr] m:pb-4\": expanded,\n          },\n        )}>\n        <div className=\"m:overflow-hidden m:text-warmgrey-25\">{children}</div>\n      </div>\n    </>\n  );\n};\n\nexport default Dropdown;\n","import * as React from \"react\";\nconst SvgFrost = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M12.2912 21C10.1036 21 8.32359 19.22 8.32359 17.0324C8.32359 15.8273 8.87932 14.683 9.82018 13.9321V5.47054C9.82018 4.10828 10.9287 3 12.2912 3C13.6532 3 14.7615 4.10828 14.7615 5.47054V13.9318C15.7028 14.683 16.2588 15.827 16.2588 17.0324C16.2588 19.22 14.4788 21 12.2912 21ZM10.4333 14.4388C9.5971 15.0389 9.0975 16.0089 9.0975 17.0324C9.0975 18.7932 10.5304 20.2258 12.2912 20.2258C14.0521 20.2258 15.4849 18.7932 15.4849 17.0324C15.4849 16.0087 14.9853 15.0389 14.1489 14.4385L13.9876 14.3228V5.47054C13.9876 4.53508 13.2269 3.77416 12.2912 3.77416C11.356 3.77416 10.5946 4.53508 10.5946 5.47054V14.3231L10.4333 14.4388ZM9.72974 17.0323C9.72974 18.4442 10.8792 19.5935 12.2912 19.5935C13.7032 19.5935 14.8525 18.4442 14.8525 17.0323C14.8525 16.212 14.4516 15.434 13.7805 14.9524L13.3554 14.6474V13.5427H11.2268V14.6477L10.8017 14.9524C10.1306 15.4342 9.72974 16.2123 9.72974 17.0323ZM9.08252 13.2581H6.94342C6.83629 13.2581 6.75 13.3448 6.75 13.4517C6.75 13.5589 6.83629 13.6451 6.94342 13.6451H9.08252C9.1894 13.6451 9.27643 13.5589 9.27643 13.4517C9.27643 13.3448 9.1894 13.2581 9.08252 13.2581ZM9.09044 12.5529H7.77305C7.66617 12.5529 7.57914 12.4666 7.57914 12.3595C7.57914 12.2526 7.66617 12.1658 7.77305 12.1658H9.09044C9.19732 12.1658 9.28435 12.2526 9.28435 12.3595C9.28435 12.4666 9.19732 12.5529 9.09044 12.5529ZM7.77305 11.4612H9.09044C9.19732 11.4612 9.28435 11.3744 9.28435 11.2675C9.28435 11.1604 9.19732 11.0741 9.09044 11.0741H7.77305C7.66617 11.0741 7.57914 11.1604 7.57914 11.2675C7.57914 11.3744 7.66617 11.4612 7.77305 11.4612ZM9.09044 10.3693H7.77305C7.66617 10.3693 7.57914 10.2825 7.57914 10.1756C7.57914 10.0685 7.66617 9.98195 7.77305 9.98195H9.09044C9.19732 9.98195 9.28435 10.0685 9.28435 10.1756C9.28435 10.2825 9.19732 10.3693 9.09044 10.3693ZM7.77305 9.27714H9.09044C9.19732 9.27714 9.28435 9.19036 9.28435 9.08348C9.28435 8.9766 9.19732 8.88982 9.09044 8.88982H7.77305C7.66617 8.88982 7.57914 8.9766 7.57914 9.08348C7.57914 9.19036 7.66617 9.27714 7.77305 9.27714Z\" }));\nexport default SvgFrost;\n","import * as React from \"react\";\nconst SvgHeavyrain = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M13.2811 3.75C16.2275 3.75 18.6165 6.13264 18.629 9.07579C19.9645 9.23713 21 10.3725 21 11.7514C21 13.241 19.7927 14.4487 18.3031 14.4487H5.69692C4.20752 14.4487 3 13.241 3 11.7514C3 10.6177 3.70011 9.6492 4.69114 9.25005C4.68663 9.18526 4.68396 9.11986 4.68396 9.05426C4.68396 7.41232 6.0151 6.08139 7.65622 6.08139C8.03672 6.08139 8.39897 6.15396 8.73314 6.28353C9.67681 4.76317 11.3602 3.75 13.2811 3.75ZM7.25801 15.5354C7.01287 15.3939 6.69941 15.4779 6.55788 15.723L4.50777 19.2738C4.36623 19.519 4.45022 19.8324 4.69536 19.974C4.94049 20.1155 5.25395 20.0315 5.39549 19.7864L7.4456 16.2356C7.58713 15.9904 7.50315 15.677 7.25801 15.5354ZM9.22104 15.723C9.36257 15.4779 9.67603 15.3939 9.92117 15.5354C10.1663 15.677 10.2503 15.9904 10.1088 16.2356L8.05865 19.7864C7.91711 20.0315 7.60365 20.1155 7.35852 19.974C7.11338 19.8324 7.02939 19.519 7.17093 19.2738L9.22104 15.723ZM12.5843 15.5354C12.3392 15.3939 12.0257 15.4779 11.8842 15.723L9.83406 19.2738C9.69253 19.519 9.77652 19.8324 10.0217 19.974C10.2668 20.1155 10.5802 20.0315 10.7218 19.7864L12.7719 16.2356C12.9134 15.9904 12.8294 15.677 12.5843 15.5354ZM14.5474 15.723C14.689 15.4779 15.0024 15.3939 15.2475 15.5354C15.4927 15.677 15.5767 15.9904 15.4351 16.2356L13.385 19.7864C13.2435 20.0315 12.93 20.1155 12.6849 19.974C12.4398 19.8324 12.3558 19.519 12.4973 19.2738L14.5474 15.723ZM17.9107 15.5354C17.6656 15.3939 17.3521 15.4779 17.2106 15.723L15.1605 19.2738C15.0189 19.519 15.1029 19.8324 15.3481 19.974C15.5932 20.1155 15.9067 20.0315 16.0482 19.7864L18.0983 16.2356C18.2398 15.9904 18.1558 15.677 17.9107 15.5354Z\" }));\nexport default SvgHeavyrain;\n","import * as React from \"react\";\nconst SvgIcy = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M16.9027 15.6661L17.0887 15.1133C17.9356 15.1651 18.7639 14.5524 19.0782 13.6185L19.0772 13.6182C19.6889 11.9135 19.584 10.5077 19.0247 9.425C18.918 9.21846 18.8092 9.05083 18.7099 8.92149C19.1255 7.33273 18.4146 5.699 17.0201 5.06858L17.0245 5.05549L16.8103 4.98325C16.7888 4.97546 16.7671 4.96789 16.7453 4.96055L16.7451 4.96128L14.3386 4.15L14.3385 4.15009C12.7673 3.62822 11.058 4.51095 10.3897 6.12083C10.2758 6.15214 10.1438 6.19676 9.99746 6.25784C9.53389 6.45126 9.07354 6.75491 8.64742 7.19089C8.05431 7.79773 7.57588 8.61364 7.24925 9.66139C6.93945 10.612 7.25262 11.6148 7.99187 12.0666L7.81061 12.6049C7.65689 13.0614 7.90232 13.556 8.3588 13.7097C8.81527 13.8635 9.30994 13.618 9.46367 13.1616L9.63197 12.6618L15.4174 14.6107L15.2495 15.1098C15.0959 15.5663 15.3414 16.0609 15.7979 16.2145C16.2544 16.3682 16.749 16.1226 16.9027 15.6661ZM18.3278 11.5484C18.4619 11.1489 18.2468 10.7163 17.8472 10.5821L17.0204 10.3046C16.6209 10.1704 16.1883 10.3856 16.0541 10.7851C15.92 11.1847 16.1352 11.6173 16.5347 11.7515L17.3615 12.029C17.761 12.1631 18.1937 11.948 18.3278 11.5484ZM10.7885 8.20073C11.1881 8.33495 11.4031 8.76763 11.2689 9.16715C11.1347 9.56666 10.702 9.78172 10.3025 9.6475L9.47568 9.36972C9.07617 9.2355 8.86111 8.80281 8.99534 8.4033C9.12956 8.00379 9.56224 7.78873 9.96175 7.92295L10.7885 8.20073ZM17.8103 8.88759L17.7218 9.15022L11.0384 6.89973L11.1269 6.63712C11.5722 5.31461 12.8952 4.58429 14.072 4.98047L16.5209 5.80607C17.6623 6.22584 18.2488 7.58563 17.8103 8.88759ZM2.29722 16.3574C2.06895 16.2807 1.94611 16.0334 2.02285 15.8051C2.0996 15.5769 2.34687 15.454 2.57515 15.5308L9.60195 17.8932C9.83023 17.9699 9.95307 18.2172 9.87632 18.4455C9.79957 18.6737 9.5523 18.7966 9.32403 18.7198L2.29722 16.3574ZM4.45753 13.7984C4.38078 14.0267 4.50361 14.274 4.73189 14.3507L20.9248 19.7953C21.1531 19.872 21.4004 19.7492 21.4771 19.5209C21.5539 19.2926 21.4311 19.0454 21.2028 18.9686L5.00984 13.5241C4.78156 13.4473 4.53429 13.5702 4.45753 13.7984Z\" }));\nexport default SvgIcy;\n","import * as React from \"react\";\nconst SvgSnow = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M20.11 12.9407L16.6374 13.876L13.4149 11.9982L16.6374 10.1204L20.11 11.059C20.4863 11.1633 20.8731 10.9339 20.9759 10.5539C21.0771 10.1739 20.8497 9.78356 20.4736 9.67952L18.369 9.10968L20.3158 7.97753C20.6583 7.77674 20.7701 7.34292 20.5767 6.99883C20.3796 6.65864 19.9485 6.5403 19.6097 6.73744L17.663 7.87349L18.2274 5.74834C18.3263 5.36836 18.1047 4.97433 17.7266 4.87394C17.3508 4.77354 16.9637 4.99904 16.8607 5.37928L15.9308 8.88392L12.7068 10.762V7.00247L15.248 4.43673C15.5246 4.15714 15.5246 3.70928 15.248 3.42995C14.9711 3.15009 14.5222 3.15009 14.2489 3.42995L12.7068 4.98499V2.71289C12.7068 2.3186 12.3907 2 12.0005 2C11.6082 2 11.2925 2.3186 11.2925 2.71289V4.98499L9.75216 3.42995C9.47733 3.15009 9.02813 3.15009 8.75149 3.42995C8.47615 3.70928 8.47615 4.15714 8.75149 4.43673L11.2925 7.00247V10.762L8.06995 8.88392L7.14012 5.37928C7.03734 4.99904 6.65047 4.77354 6.27235 4.87394C5.89449 4.97433 5.67066 5.36836 5.77189 5.74834L6.33623 7.87349L4.38949 6.73744C4.05078 6.5403 3.61961 6.65864 3.42256 6.99883C3.22912 7.34292 3.34246 7.77674 3.68323 7.97753L5.62816 9.10968L3.52353 9.67952C3.14747 9.78356 2.9221 10.1739 3.02487 10.5539C3.1261 10.9339 3.51477 11.1594 3.89083 11.059L7.36189 10.1204L10.5846 11.9982L7.36189 13.876L3.89083 12.9407C3.51477 12.8403 3.1261 13.0624 3.02487 13.4458C2.9221 13.8258 3.14747 14.2164 3.52353 14.3202L5.62816 14.8901L3.68323 16.0227C3.34426 16.2196 3.22912 16.6568 3.42256 16.9973C3.61961 17.3414 4.05078 17.4597 4.38949 17.2589L6.33623 16.1265L5.77189 18.248C5.67066 18.6314 5.89449 19.0223 6.27235 19.1261C6.65047 19.2298 7.03734 19.0004 7.14012 18.6207L8.06995 15.1158L11.2925 13.2346V16.9973L8.75149 19.5596C8.47615 19.839 8.47615 20.2907 8.75149 20.5703C9.02813 20.8496 9.47733 20.8496 9.75216 20.5703L11.2925 19.0147V21.2871C11.2925 21.6811 11.6082 22 12.0005 22C12.3907 22 12.7068 21.6811 12.7068 21.2871V19.0147L14.2489 20.5703C14.5222 20.8496 14.9711 20.8496 15.248 20.5703C15.5246 20.2907 15.5246 19.839 15.248 19.5596L12.7068 16.9973V13.2346L15.9308 15.1158L16.8607 18.6207C16.9637 19.0004 17.3508 19.2298 17.7266 19.1261C18.1047 19.0223 18.3263 18.6314 18.2274 18.248L17.663 16.1265L19.6097 17.2589C19.9485 17.4597 20.3796 17.3414 20.5767 16.9973C20.7701 16.6568 20.6583 16.2196 20.3158 16.0227L18.369 14.8901L20.4736 14.3202C20.8497 14.2164 21.0771 13.8258 20.9759 13.4458C20.8731 13.0624 20.4863 12.8403 20.11 12.9407Z\" }));\nexport default SvgSnow;\n","import * as React from \"react\";\nconst SvgThunderstorms = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M13.2811 3.75C16.2275 3.75 18.6167 6.13273 18.629 9.0761C19.9646 9.23752 21 10.3728 21 11.7517C21 13.2415 19.7926 14.4493 18.3029 14.4493H14.2205L13.2106 16.1691L15.7436 16.0373L9.75566 22.5L11.6265 18.2685H10.3724L11.5707 14.4493H5.69711C4.20757 14.4493 3 13.2415 3 11.7517C3 10.6179 3.70018 9.64934 4.69122 9.25032C4.68667 9.18551 4.68399 9.12007 4.68399 9.05463C4.68399 7.41255 6.01521 6.08154 7.65626 6.08154C8.0367 6.08154 8.39897 6.15399 8.73317 6.28383C9.67651 4.76333 11.3603 3.75 13.2811 3.75Z\" }));\nexport default SvgThunderstorms;\n","import * as React from \"react\";\nconst SvgWarning = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M13.875 14.5H10.125V4.5H13.875V14.5ZM13.875 19.5H10.125V16.1667H13.875V19.5Z\" }));\nexport default SvgWarning;\n","import * as React from \"react\";\nconst SvgWind = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"white\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { fillRule: \"evenodd\", clipRule: \"evenodd\", d: \"M6.58721 3.75C6.26176 3.75115 5.99886 4.01591 6 4.34136L6.05398 19.6628C6.05513 19.9882 6.31989 20.2511 6.64534 20.25C6.97079 20.2488 7.23369 19.9841 7.23255 19.6586L7.17857 4.33721C7.17742 4.01176 6.91266 3.74886 6.58721 3.75ZM15.8376 5.42407L16.9678 5.66308C17.3907 5.75265 17.7386 6.34217 17.7407 6.97389L17.7506 9.78714C17.753 10.4186 17.4093 11.011 16.9872 11.1034L15.8586 11.3504L10.1324 12.6037L8.9856 12.8545C8.95213 12.862 8.92031 12.8646 8.88802 12.8656C8.88616 12.8656 8.88419 12.8659 8.88219 12.8663C8.88013 12.8666 8.87803 12.867 8.876 12.867C8.87381 12.867 8.87163 12.8666 8.86944 12.8661C8.86762 12.8658 8.8658 12.8654 8.86398 12.8653C8.82367 12.8644 8.78454 12.8592 8.74659 12.8491C8.7438 12.8483 8.74113 12.8474 8.7384 12.8464C8.73582 12.8454 8.73319 12.8444 8.73033 12.8436C8.69167 12.8314 8.65372 12.8158 8.61742 12.7941C8.61633 12.7935 8.61543 12.7928 8.6145 12.7921C8.61361 12.7913 8.61268 12.7906 8.61153 12.7899C8.57593 12.768 8.54223 12.7413 8.51064 12.7107L8.50899 12.7094C8.50614 12.7072 8.50363 12.7052 8.50145 12.7022C8.4701 12.6716 8.44134 12.6357 8.41447 12.5973L8.40965 12.5907C8.4069 12.5871 8.4042 12.5835 8.40198 12.5796C8.37628 12.5408 8.35342 12.4986 8.3322 12.4535C8.32867 12.4455 8.32513 12.4375 8.32136 12.4295C8.30133 12.3838 8.28388 12.335 8.26927 12.2831C8.26849 12.2806 8.26775 12.2781 8.26702 12.2755C8.26649 12.2736 8.26596 12.2716 8.26544 12.2697L8.26196 12.2574C8.24805 12.2039 8.23627 12.1478 8.22825 12.0891L8.22613 12.0689C8.21859 12.0062 8.21364 11.9418 8.2134 11.8746L8.18889 4.95382C8.18865 4.8864 8.1929 4.82205 8.20044 4.75935C8.20091 4.75275 8.20162 4.74592 8.20233 4.73932C8.20987 4.68015 8.22142 4.62429 8.23509 4.57007L8.23973 4.55306L8.24193 4.54485C8.2563 4.49323 8.27351 4.44373 8.29331 4.39753L8.2985 4.38586L8.30368 4.3742C8.32443 4.32894 8.34705 4.28627 8.37275 4.24715L8.38029 4.23601L8.3843 4.23017C8.41093 4.19105 8.43993 4.15498 8.47128 4.1234L8.47535 4.11969L8.47905 4.11632C8.51135 4.08474 8.54576 4.0574 8.58183 4.03477L8.58406 4.03322C8.58483 4.03263 8.58557 4.03207 8.5863 4.0317C8.6226 4.00931 8.66055 3.99328 8.70015 3.98032C8.70234 3.97977 8.70458 3.97897 8.70687 3.97815L8.70687 3.97815C8.70952 3.9772 8.71223 3.97623 8.715 3.9756C8.75295 3.96476 8.79255 3.95934 8.83333 3.95816C8.83519 3.95816 8.83699 3.95782 8.83882 3.95747C8.8407 3.95711 8.84261 3.95675 8.84465 3.95675C8.84639 3.95675 8.84824 3.95697 8.85012 3.95721C8.85207 3.95744 8.85405 3.95769 8.85596 3.95769C8.88802 3.9584 8.92078 3.96122 8.95425 3.96806L10.1027 4.21108L15.8376 5.42407ZM13.9394 5.79555L13.9578 10.9923L15.8557 10.5768L15.8404 6.19745L13.9394 5.79555ZM10.1055 4.98469L12.0065 5.38659L12.0277 11.4147L10.1295 11.8301L10.1055 4.98469Z\" }));\nexport default SvgWind;\n","import { TFunction } from \"@Context/TranslationContext/TranslationContext\";\nimport { Warning as WarningAPI } from \"@MeteoApi/models/Warning\";\nimport Frost from \"@Resources/images/iconsets/weather_warnings/frost.svg?react\";\nimport Rain from \"@Resources/images/iconsets/weather_warnings/heavyrain.svg?react\";\nimport Ice from \"@Resources/images/iconsets/weather_warnings/icy.svg?react\";\nimport Snow from \"@Resources/images/iconsets/weather_warnings/snow.svg?react\";\nimport Lightning from \"@Resources/images/iconsets/weather_warnings/thunderstorms.svg?react\";\nimport Warning from \"@Resources/images/iconsets/weather_warnings/warning.svg?react\";\nimport Wind from \"@Resources/images/iconsets/weather_warnings/wind.svg?react\";\n\nexport const priorityColor = (\n  t: TFunction,\n): Record<\n  WarningAPI[\"priority\"],\n  { icon: string; bg: string; legendText: string; a11yLegendText: string }\n> => ({\n  1: {\n    icon: \"#092b49\",\n    bg: \"m:bg-special-warning-yellow\",\n    legendText: t(\"forecast.lowDanger\"),\n    a11yLegendText: t(\"forecast.a11yLowDanger\"),\n  },\n  2: {\n    icon: \"#ffffff\",\n    bg: \"m:bg-special-warning-orange\",\n    legendText: t(\"forecast.mediumDanger\"),\n    a11yLegendText: t(\"forecast.a11yMediumDanger\"),\n  },\n  3: {\n    icon: \"#ffffff\",\n    bg: \"m:bg-special-warning-red\",\n    legendText: t(\"forecast.highDanger\"),\n    a11yLegendText: t(\"forecast.a11yHighDanger\"),\n  },\n});\n\nexport type WarningType = WarningAPI[\"type\"] | 0;\nexport const warningIcon: Record<\n  WarningType,\n  React.FunctionComponent<\n    React.SVGProps<SVGSVGElement> & {\n      title?: string | undefined;\n    }\n  >\n> = {\n  0: Warning,\n  1: Frost,\n  2: Lightning,\n  3: Ice,\n  4: Rain,\n  5: Snow,\n  6: Wind,\n};\n","import { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { Warning } from \"@MeteoApi/models/Warning\";\nimport { WarningType, priorityColor, warningIcon } from \"@Utils/weatherWarning\";\nimport classNames from \"classnames\";\n\ntype WeatherWarningIconProps = {\n  type: WarningType;\n  priority: Warning[\"priority\"];\n};\n\nconst WeatherWarningIcon = ({ type, priority }: WeatherWarningIconProps) => {\n  const { t } = useTranslations();\n  const WarningIcon = warningIcon[type];\n\n  return (\n    <div\n      data-testid=\"weather-warning-icon\"\n      data-priority={priority}\n      aria-hidden\n      className={classNames(\n        \"m:size-6 m:rounded-sm\",\n        priorityColor(t)[priority].bg,\n      )}>\n      <WarningIcon fill={priorityColor(t)[priority].icon} />\n    </div>\n  );\n};\n\nexport default WeatherWarningIcon;\n","import { useForecastAppContext } from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { Warning } from \"@MeteoApi/models/Warning\";\nimport { WarningService } from \"@MeteoApi/services/WarningService\";\nimport { useEffect, useState } from \"react\";\n\nexport const useWarnings = () => {\n  const { forecastPointWeek } = useForecastAppContext();\n  const [warnings, setWarnings] = useState<Warning[]>([]);\n  useEffect(() => {\n    const id = forecastPointWeek?.geolocation.alarm_region_id;\n    if (id) {\n      WarningService.getWarningById({ id })\n        .then((response) => {\n          setWarnings(response);\n          return;\n        })\n        .catch((e: Error) => {\n          // eslint-disable-next-line no-console\n          console.error(e);\n        });\n    }\n  }, [forecastPointWeek]);\n  return {\n    warnings,\n    maxPriority: Math.max(\n      ...(warnings ?? []).map((w) => w.priority),\n    ) as Warning[\"priority\"],\n  };\n};\n","import Dropdown from \"@Components/forecast/Dropdown\";\nimport WeatherWarningIcon from \"@Components/forecast/location/WeatherWarningIcon\";\nimport { useTranslations } from \"@Context/TranslationContext/TranslationContext\";\nimport { useWarnings } from \"@Hooks/useWarnings\";\nimport { priorityColor } from \"@Utils/weatherWarning\";\n\nconst WeatherWarning = () => {\n  const { t } = useTranslations();\n  const { warnings, maxPriority } = useWarnings();\n\n  const dropdownContent = (\n    <>\n      {warnings.map((warning) => (\n        <div\n          key={warning.id}\n          className=\"m:mb-6 m:flex m:gap-2 m:antialiased m:first:pt-[10px]\">\n          <WeatherWarningIcon type={warning.type} priority={warning.priority} />\n          <div className=\"m:text-left\">\n            <h3 className=\"m:my-[1.5px] m:font-sans m:text-xl m:leading-normal m:font-medium m:tracking-0.2\">\n              {warning.title}\n            </h3>\n            <span\n              data-testid={\"weather-warning-text\"}\n              className=\"m:block m:text-xl m:leading-normal m:font-normal m:tracking-0.4 m:break-words\">\n              {warning.paragraph}\n            </span>\n          </div>\n        </div>\n      ))}\n      <ul className=\"m:mt-8 m:antialiased\">\n        {Object.entries(priorityColor(t)).map(([key, priority]) => (\n          <li\n            key={key}\n            className=\"m:mb-1 m:flex m:items-center m:gap-4 m:last:mb-0\">\n            <div\n              className={`m:size-4 m:rounded-sm m:border-[0.5px] m:border-solid m:border-blue-950 ${priority.bg}`}\n            />\n            <span className=\"m:text-xl m:leading-normal m:font-normal m:tracking-0.4\">\n              {priority.legendText}\n            </span>\n          </li>\n        ))}\n      </ul>\n    </>\n  );\n\n  return (\n    warnings.length > 0 && (\n      <div className=\"m:mx-4 m:md:mx-0 m:md:mt-8 m:md:w-full\">\n        <Dropdown\n          title={t(\"forecast.weatherwarnings\")}\n          icon={<WeatherWarningIcon type={0} priority={maxPriority} />}\n          offscreenTitle={priorityColor(t)[maxPriority].a11yLegendText}>\n          {dropdownContent}\n        </Dropdown>\n      </div>\n    )\n  );\n};\n\nexport default WeatherWarning;\n","import { ContentContainer } from \"@Components/forecast/ContentContainer\";\nimport { LocationDisplay } from \"@Components/forecast/location/LocationDisplay\";\nimport WeatherWarning from \"@Components/forecast/location/WeatherWarning\";\n\nconst LocationContainer = () => {\n  return (\n    <ContentContainer>\n      <div className=\"m:mb-4 m:flex m:flex-col m:justify-between m:gap-4 m:md:mb-10 m:md:flex-row m:md:gap-6 m:md:px-8 m:xl:px-10\">\n        <LocationDisplay />\n        <WeatherWarning />\n      </div>\n    </ContentContainer>\n  );\n};\n\nexport default LocationContainer;\n","import { useEffect, useState } from \"react\";\n\nexport const usePathCoordinates = () => {\n  const path = window.location.pathname;\n  const [coordinates, setCoordinates] = useState<{\n    lat: string;\n    lng: string;\n  } | null>(null);\n\n  useEffect(() => {\n    const match = path.match(/\\/(-?\\d+\\.\\d{4}),(-?\\d+\\.\\d{4})/);\n    if (match) {\n      setCoordinates({ lat: match[1], lng: match[2] });\n    }\n  }, [path]);\n\n  return coordinates;\n};\n","import { usePathCoordinates } from \"@Hooks/usePathCoordinates\";\nimport { ForecastPointWeek } from \"@MeteoApi/models/ForecastPointWeek\";\nimport { ForecastService } from \"@MeteoApi/services/ForecastService\";\nimport { getValidForecastPointWeek } from \"@Utils/interval\";\nimport { useEffect, useState } from \"react\";\n\ntype UseForecastPointWeek = {\n  forecastPointWeek: ForecastPointWeek;\n  error?: Error;\n};\n\nexport const useForecastPointWeek = (\n  geolcationIdFallback?: string | null,\n): UseForecastPointWeek => {\n  const coordinates = usePathCoordinates();\n\n  const [forecastPointWeek, setForecastPointWeek] =\n    useState<ForecastPointWeek>();\n  const [error, setError] = useState<Error>();\n\n  useEffect(() => {\n    const geolocationId = coordinates\n      ? `${coordinates.lat},${coordinates.lng}`\n      : geolcationIdFallback;\n\n    if (!geolocationId) {\n      return;\n    }\n\n    const promise = ForecastService.getForecastWeekByGeoLocation({\n      geolocationId: geolocationId,\n    });\n\n    promise\n      .then((forecastPointWeek: ForecastPointWeek) => {\n        setForecastPointWeek(getValidForecastPointWeek(forecastPointWeek));\n        setError(undefined);\n        return;\n      })\n      .catch((e: Error) => {\n        // eslint-disable-next-line no-console\n        console.error(e);\n        setError(e);\n      });\n  }, [coordinates, geolcationIdFallback]);\n\n  return { forecastPointWeek: forecastPointWeek as ForecastPointWeek, error };\n};\n","import { Error } from \"@Components/common/Error\";\nimport { Loading } from \"@Components/common/Loading\";\nimport { WeatherDetailsContainer } from \"@Components/forecast/WeatherDetailsContainer\";\nimport { NavigationContainer } from \"@Components/forecast/daily/NavigationContainer\";\nimport LocationContainer from \"@Components/forecast/location/LocationContainer\";\nimport { SearchContainer } from \"@Components/forecast/search/SearchContainer\";\nimport { SENTRY_CONSENT_UC_ID } from \"@Constants/consentManagement\";\nimport {\n  useForecastAppContext,\n  useForecastAppDispatcher,\n} from \"@Context/ForecastAppContext/ForecastAppContext\";\nimport { useConsentManagement } from \"@Hooks/useConsentManagement\";\nimport { useForecastPointWeek } from \"@Hooks/useForecastPointWeek\";\nimport { useGeolocationName } from \"@Hooks/useGeolocationName\";\nimport { useQueryParam } from \"@Hooks/useQueryParam\";\nimport { useSymbolTexts } from \"@Hooks/useSymbolTexts\";\nimport { AnalyticsStats } from \"@Models/AnalyticsStats\";\nimport { Environment } from \"@Models/Environment\";\nimport { formatAsIsoStyleDate, isValidIsoDate, toUtcDate } from \"@Utils/date\";\nimport {\n  enableOrDisableSentryBasedOnConsent,\n  enrichErrorsWithGeolocation,\n} from \"@Utils/sentry\";\nimport { getTrackingReferrer } from \"@Utils/tracking\";\nimport { lazy, Suspense, useEffect, useState } from \"react\";\n\nconst ForecastDebugTools = lazy(() =>\n  import(\"@Components/debug/ForecastDebugTools\").then((module) => ({\n    default: module.ForecastDebugTools,\n  })),\n);\n\ntype ForecastAppProps = {\n  env: Environment;\n  devMode: boolean;\n  geolcationIdFallback?: string | null;\n};\n\nexport const ForecastApp = ({\n  env,\n  devMode,\n  geolcationIdFallback,\n}: ForecastAppProps) => {\n  const dispatch = useForecastAppDispatcher();\n  const { env: contextEnv } = useForecastAppContext();\n  const symbolTexts = useSymbolTexts();\n  const { currentValue: currentDateQueryValue } = useQueryParam(\"date\");\n  const [isLoading, setIsLoading] = useState(true);\n  const [analyticsStats, setAnalyticsStats] = useState<AnalyticsStats>({});\n\n  const { initialised: sentryConsentInitialised, active: sentryConsentActive } =\n    useConsentManagement(SENTRY_CONSENT_UC_ID);\n\n  const { forecastPointWeek, error } =\n    useForecastPointWeek(geolcationIdFallback);\n  const geolocationName = useGeolocationName(forecastPointWeek?.geolocation);\n\n  useEffect(() => {\n    if (env !== contextEnv) {\n      dispatch({\n        type: \"set-env\",\n        data: env,\n      });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    enrichErrorsWithGeolocation(forecastPointWeek?.geolocation);\n\n    dispatch({\n      type: \"set-forecast-point-week\",\n      data: forecastPointWeek,\n    });\n\n    if (geolocationName) {\n      setAnalyticsStats({\n        \"16\": geolocationName.country || \"\",\n        \"17\": forecastPointWeek?.geolocation.id,\n        \"44\": geolocationName.name,\n      });\n    }\n  }, [forecastPointWeek, geolocationName, dispatch]);\n\n  useEffect(() => {\n    dispatch({\n      type: \"set-symbol-texts\",\n      data: symbolTexts,\n    });\n  }, [symbolTexts, dispatch]);\n\n  useEffect(() => {\n    // If there is ?date in the URL, set it as the active date\n    if (currentDateQueryValue && isValidIsoDate(currentDateQueryValue)) {\n      dispatch({\n        type: \"set-active-date\",\n        data: {\n          value: currentDateQueryValue,\n          source: \"initial\",\n        },\n      });\n    } else {\n      // If there is no ?date in the URL, set the active date to today\n      const today = toUtcDate().toISOString();\n      const todayDateOnly = formatAsIsoStyleDate(today);\n      dispatch({\n        type: \"set-active-date\",\n        data: {\n          value: todayDateOnly,\n          source: \"initial\",\n        },\n      });\n    }\n  }, [currentDateQueryValue, dispatch]);\n\n  useEffect(() => {\n    setIsLoading(\n      typeof forecastPointWeek === \"undefined\" ||\n        typeof symbolTexts === \"undefined\",\n    );\n  }, [forecastPointWeek, symbolTexts]);\n\n  useEffect(() => {\n    enableOrDisableSentryBasedOnConsent(\n      sentryConsentInitialised,\n      sentryConsentActive,\n    );\n  }, [sentryConsentInitialised, sentryConsentActive]);\n\n  return (\n    <div\n      className=\"js-esi-statistics-overwrites\"\n      data-analytics-json={JSON.stringify(analyticsStats)}\n      data-referrer-track={getTrackingReferrer({\n        srg_override_mod4: \"meteo_local_forecast\",\n      })}>\n      {devMode && (\n        <Suspense fallback={null}>\n          <ForecastDebugTools />\n        </Suspense>\n      )}\n      <SearchContainer />\n\n      {error ? (\n        <Error />\n      ) : (\n        <>\n          {isLoading ? (\n            <Loading />\n          ) : (\n            <>\n              <LocationContainer />\n              <NavigationContainer />\n              <WeatherDetailsContainer />\n            </>\n          )}\n        </>\n      )}\n    </div>\n  );\n};\n"],"file":"assets/ForecastApp-BgmbGt_0.js"}