{"version":3,"file":"main.341653700cf6c9e2ce1a.js","mappings":"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","sources":["webpack://oceanconnect-frontend/./src/Components/Charts/d3-axis@1.js","webpack://oceanconnect-frontend/./src/theme.js","webpack://oceanconnect-frontend/./src/Fallback.jsx","webpack://oceanconnect-frontend/./src/mapLayers.js","webpack://oceanconnect-frontend/./src/units.js","webpack://oceanconnect-frontend/./src/utilities.js","webpack://oceanconnect-frontend/./src/stations.js","webpack://oceanconnect-frontend/./src/Components/Map/styles.css?d9a6","webpack://oceanconnect-frontend/./src/models.js","webpack://oceanconnect-frontend/./src/Vectors/lib.js","webpack://oceanconnect-frontend/./src/Components/Map/Map.jsx","webpack://oceanconnect-frontend/./src/Components/StyledIcon.jsx","webpack://oceanconnect-frontend/./src/Components/TimeSlider/styles.css?c785","webpack://oceanconnect-frontend/./src/Components/TimeSlider/TimeSlider.jsx","webpack://oceanconnect-frontend/./src/Components/MailchimpForm.jsx","webpack://oceanconnect-frontend/./src/Components/SettingsMenu.jsx","webpack://oceanconnect-frontend/./src/Components/SearchMenu.jsx","webpack://oceanconnect-frontend/./src/Components/VariableSelectMenu.jsx","webpack://oceanconnect-frontend/./src/Components/StyledComponents.jsx","webpack://oceanconnect-frontend/./src/Components/DataDrawer/DataElement.jsx","webpack://oceanconnect-frontend/./src/Components/TideIndicator.jsx","webpack://oceanconnect-frontend/./src/Components/DataDrawer/DataElementStrip.jsx","webpack://oceanconnect-frontend/./src/Components/DataDrawer/DataDrawer.jsx","webpack://oceanconnect-frontend/./src/Components/DataPanel/VariableInsightsBottom.jsx","webpack://oceanconnect-frontend/./src/Components/DataPanel/VariableInsights.jsx","webpack://oceanconnect-frontend/./src/Components/DataPanel/DataGrid.jsx","webpack://oceanconnect-frontend/./src/Components/Charts/styles.css?a4cd","webpack://oceanconnect-frontend/./src/Components/Charts/chartsUtilities.jsx","webpack://oceanconnect-frontend/./src/Components/Charts/charts.jsx","webpack://oceanconnect-frontend/./src/Components/Crosshair/Crosshair.jsx","webpack://oceanconnect-frontend/./src/Components/DataPanel/DataPanel.jsx","webpack://oceanconnect-frontend/./src/Components/Legend/Legend.jsx","webpack://oceanconnect-frontend/./src/styles.css?44b2","webpack://oceanconnect-frontend/./src/Components/Webcams.jsx","webpack://oceanconnect-frontend/./src/Components/StationsMenu.jsx","webpack://oceanconnect-frontend/./src/Components/VerticalTrademark.jsx","webpack://oceanconnect-frontend/./src/Components/Welcome.jsx","webpack://oceanconnect-frontend/./src/Components/Spinner.jsx","webpack://oceanconnect-frontend/./src/Components/MailchimpModal.jsx","webpack://oceanconnect-frontend/./src/App.jsx","webpack://oceanconnect-frontend/./src/index.js","webpack://oceanconnect-frontend/./src/Components/Charts/styles.css","webpack://oceanconnect-frontend/./src/Components/Map/styles.css","webpack://oceanconnect-frontend/./src/Components/TimeSlider/styles.css","webpack://oceanconnect-frontend/./src/styles.css","webpack://oceanconnect-frontend/./src/Images/ sync ^\\.\\/.*$","webpack://oceanconnect-frontend/./src/Images/ sync ^\\.\\/oceanconnectlogo\\-color\\-.*\\.svg$"],"sourcesContent":["// https://d3js.org/d3-axis/ v3.0.0 Copyright 2010-2021 Mike Bostock\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined'\n ? factory(exports)\n : typeof define === 'function' && define.amd\n ? define(['exports'], factory)\n : ((global = typeof globalThis !== 'undefined' ? globalThis : global || self),\n factory((global.d3 = global.d3 || {})));\n})(this, function (exports) {\n 'use strict';\n\n function identity(x) {\n return x;\n }\n\n const top = 1;\n const right = 2;\n const bottom = 3;\n const left = 4;\n const epsilon = 1e-6;\n\n function translateX(x) {\n return 'translate(' + x + ',0)';\n }\n\n function translateY(y) {\n return 'translate(0,' + y + ')';\n }\n\n function number(scale) {\n return (d) => +scale(d);\n }\n\n function center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return (d) => +scale(d) + offset;\n }\n\n function entering() {\n return !this.__axis;\n }\n\n function axis(orient, scale) {\n let tickArguments = [];\n let tickValues = null;\n let tickFormat = null;\n let tickSizeInner = 6;\n let tickSizeOuter = 6;\n let tickPadding = 3;\n let tickSizeFunction = null;\n let offset = typeof window !== 'undefined' && window.devicePixelRatio > 1 ? 0 : 0.5;\n const k = orient === top || orient === left ? -1 : 1;\n const x = orient === left || orient === right ? 'x' : 'y';\n const transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n const values =\n tickValues == null\n ? scale.ticks\n ? scale.ticks.apply(scale, tickArguments)\n : scale.domain()\n : tickValues;\n const format =\n tickFormat == null\n ? scale.tickFormat\n ? scale.tickFormat.apply(scale, tickArguments)\n : identity\n : tickFormat;\n const spacing = Math.max(tickSizeInner, 0) + tickPadding;\n const range = scale.range();\n const range0 = +range[0] + offset;\n const range1 = +range[range.length - 1] + offset;\n const position = (scale.bandwidth ? center : number)(scale.copy(), offset);\n const selection = context.selection ? context.selection() : context;\n let path = selection.selectAll('.domain').data([null]);\n let tick = selection.selectAll('.tick').data(values, scale).order();\n let tickExit = tick.exit();\n const tickEnter = tick.enter().append('g').attr('class', 'tick');\n let line = tick.select('line');\n let text = tick.select('text');\n\n path = path.merge(\n path\n .enter()\n .insert('path', '.tick')\n .attr('class', 'domain')\n .attr('stroke', 'currentColor')\n );\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(\n tickEnter\n .append('line')\n .attr('stroke', 'currentColor')\n .attr(x + '2', k * tickSizeInner)\n );\n\n text = text.merge(\n tickEnter\n .append('text')\n .attr('fill', 'currentColor')\n .attr(x, function (d, i, nodes) {\n return tickSizeFunction == null\n ? k * spacing\n : k * spacing + tickSizeFunction(d, i, nodes);\n })\n .attr('dy', orient === top ? '0em' : orient === bottom ? '0.71em' : '0.32em')\n );\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit\n .transition(context)\n .attr('opacity', epsilon)\n .attr('transform', function (d) {\n return isFinite((d = position(d)))\n ? transform(d + offset)\n : this.getAttribute('transform');\n });\n\n tickEnter.attr('opacity', epsilon).attr('transform', function (d) {\n let p = this.parentNode.__axis;\n return transform((p && isFinite((p = p(d))) ? p : position(d)) + offset);\n });\n }\n\n tickExit.remove();\n\n path.attr(\n 'd',\n orient === left || orient === right\n ? tickSizeOuter\n ? 'M' +\n k * tickSizeOuter +\n ',' +\n range0 +\n 'H' +\n offset +\n 'V' +\n range1 +\n 'H' +\n k * tickSizeOuter\n : 'M' + offset + ',' + range0 + 'V' + range1\n : tickSizeOuter\n ? 'M' +\n range0 +\n ',' +\n k * tickSizeOuter +\n 'V' +\n offset +\n 'H' +\n range1 +\n 'V' +\n k * tickSizeOuter\n : 'M' + range0 + ',' + offset + 'H' + range1\n );\n\n tick.attr('opacity', 1).attr('transform', function (d) {\n return transform(position(d) + offset);\n });\n\n line.attr(x + '2', tickSizeFunction == null ? k * tickSizeInner : tickSizeFunction);\n\n text\n .attr(x, function (d, i, nodes) {\n return tickSizeFunction == null\n ? k * spacing\n : k * spacing + tickSizeFunction(d, i, nodes);\n })\n .text(format);\n\n selection\n .filter(entering)\n .attr('fill', 'none')\n .attr('font-size', 10)\n .attr('font-family', 'sans-serif')\n .attr(\n 'text-anchor',\n orient === right ? 'start' : orient === left ? 'end' : 'middle'\n );\n\n selection.each(function () {\n this.__axis = position;\n });\n }\n\n axis.scale = function (_) {\n return arguments.length ? ((scale = _), axis) : scale;\n };\n\n axis.ticks = function () {\n return (tickArguments = Array.from(arguments)), axis;\n };\n\n axis.tickArguments = function (_) {\n return arguments.length\n ? ((tickArguments = _ == null ? [] : Array.from(_)), axis)\n : tickArguments.slice();\n };\n\n axis.tickValues = function (_) {\n return arguments.length\n ? ((tickValues = _ == null ? null : Array.from(_)), axis)\n : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function (_) {\n return arguments.length ? ((tickFormat = _), axis) : tickFormat;\n };\n\n axis.tickSize = function (_) {\n return arguments.length\n ? typeof _ === 'function'\n ? ((tickSizeInner = tickSizeOuter = null), (tickSizeFunction = _), axis)\n : ((tickSizeFunction = null), (tickSizeInner = tickSizeOuter = +_), axis)\n : tickSizeFunction || tickSizeInner;\n };\n\n axis.tickSizeInner = function (_) {\n return arguments.length ? ((tickSizeInner = +_), axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function (_) {\n return arguments.length ? ((tickSizeOuter = +_), axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function (_) {\n return arguments.length ? ((tickPadding = +_), axis) : tickPadding;\n };\n\n axis.offset = function (_) {\n return arguments.length ? ((offset = +_), axis) : offset;\n };\n\n return axis;\n }\n\n function axisTop(scale) {\n return axis(top, scale);\n }\n\n function axisRight(scale) {\n return axis(right, scale);\n }\n\n function axisBottom(scale) {\n return axis(bottom, scale);\n }\n\n function axisLeft(scale) {\n return axis(left, scale);\n }\n\n exports.axisBottom = axisBottom;\n exports.axisLeft = axisLeft;\n exports.axisRight = axisRight;\n exports.axisTop = axisTop;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n});\n","import { createTheme } from '@mui/material/';\nexport const theme = {\n palette: {\n // https://m2.material.io/resources/color/#!/?view.left=0&view.right=0&secondary.color=BDBDBD&primary.color=0D47A1\n primary: {\n // light: '#4d6c78',\n // main: '#30505b',\n // dark: '#032b39',\n // light: '#435b67',\n // main: '#2a373f',\n // dark: '#1d262b',\n // light: '#afafaf',\n // main: '#626262',\n // dark: '#333333',\n // light: '#878d92',\n // main: '#21374b', //'#27363e',\n // dark: '#1d1e1e',\n light: '#195f84',\n main: '#0f5073',\n dark: '#023555',\n },\n secondary: {\n main: '#efefef',\n },\n error: {\n main: '#f44336',\n },\n warning: {\n main: '#ff9800',\n },\n info: {\n main: '#2196f3',\n },\n success: {\n main: '#009485',\n },\n icons: {\n buoys: {\n light: '#80e27e',\n main: '#4caf50',\n dark: '#087f23',\n },\n webcams: {\n light: '#ffd149',\n main: '#ffa000',\n dark: '#c67100',\n },\n tide_stations: {\n light: '#ff6f60',\n main: '#e53935',\n dark: '#ab000d',\n },\n currents_stations: {\n light: '#ff6f60',\n main: '#e53935',\n dark: '#ab000d',\n },\n weather_stations: {\n light: '#d05ce3',\n main: '#9c27b0',\n dark: '#6a0080',\n },\n },\n // contrastThreshold: 3 // for contrast between text and background, between 3 - 4.5\n // tonalOffset: 0.2, // for generating light and dark colour variants, between 0 - 1\n },\n};\nexport default createTheme(theme);\n","import { Dialog, Box, Typography, Stack } from '@mui/material/';\nimport React from 'react';\nimport theme from './theme';\n\nfunction Fallback({ open }) {\n return (\n \n \n \n \n Oops!\n \n \n Something went wrong. The OceanConnect™ team has been notified.\n \n \n Please refresh your browser.\n \n \n \n \n \n \n \n \n );\n}\nexport default Fallback;\n","import airTemp from './ColorScales/airTemp.json';\nimport currents from './ColorScales/currents.json';\nimport tides from './ColorScales/tides.json';\nimport waterTemp from './ColorScales/waterTemp.json';\nimport waves from './ColorScales/waves.json';\nimport wind from './ColorScales/wind.json';\nimport { metersPerSecondToKMPerHour } from './utilities';\n\nconst mapLayers = [\n {\n displayName: 'Wind',\n displayNameShort: 'Wind',\n variableName: 'wind',\n model: 'HRDPS',\n modelLongName: 'HRDPS',\n isVector: true,\n unit: 'kmh',\n icon: 'wind.svg',\n scale: wind.reverse().map((step) => {\n return { color: step.color, value: metersPerSecondToKMPerHour(step.value) };\n }),\n vectorSpeed: 1,\n maxzoom: 7,\n isWaterVariable: false,\n },\n {\n displayName: 'Currents',\n displayNameShort: 'Current',\n variableName: 'current',\n variableSelectButtonName: 'currents',\n model: 'CIOPS',\n modelLongName: 'CIOPS-SalishSea',\n isVector: true,\n unit: 'kts',\n icon: 'currents.svg',\n scale: currents.reverse().map((step) => {\n return { color: step.color, value: metersPerSecondToKMPerHour(step.value) };\n }),\n vectorSpeed: 0.75,\n maxzoom: 8,\n isWaterVariable: true,\n },\n {\n displayName: 'Waves',\n displayNameShort: 'Wave',\n variableName: 'wave',\n model: 'RDWPS',\n modelLongName: 'RDWPS',\n isVector: true,\n unit: 'm',\n icon: 'waves.svg',\n scale: waves.reverse(),\n vectorSpeed: 1,\n maxzoom: 7,\n isWaterVariable: true,\n },\n {\n displayName: 'Tides',\n variableName: 'seaSurfaceHeight',\n displayNameShort: 'Tide',\n model: 'CIOPS',\n modelLongName: 'CIOPS-SalishSea',\n isVector: false,\n unit: 'm',\n icon: 'tides.svg',\n scale: tides.reverse().map((step) => {\n return { ...step, value: step.value + 2.438 };\n }),\n maxzoom: 7,\n isWaterVariable: true,\n },\n {\n displayName: 'Sea Temperature',\n displayNameShort: 'Sea Temp',\n variableName: 'potentialTemperature',\n icon: 'ocean.temperature.svg',\n model: 'CIOPS',\n modelLongName: 'CIOPS-SalishSea',\n isVector: false,\n unit: 'c',\n scale: waterTemp.reverse(),\n maxzoom: 7,\n isWaterVariable: true,\n },\n {\n displayName: 'Air Temperature',\n displayNameShort: 'Air Temp',\n variableName: 'airTemperature',\n model: 'HRDPS',\n modelLongName: 'HRDPS',\n isVector: false,\n unit: 'c',\n icon: 'air.temperature.svg',\n scale: airTemp.reverse(),\n maxzoom: 7,\n isWaterVariable: false,\n },\n];\n\nexport default mapLayers;\n","// you can control category order and unit display order here\nconst units = [\n {\n name: 'kmh',\n display: 'km/h',\n category: 'speed',\n multiplier: (x) => x,\n decimals: false,\n },\n {\n name: 'mph',\n display: 'mph',\n category: 'speed',\n multiplier: (x) => x / 1.6,\n decimals: true,\n },\n {\n name: 'kts',\n display: 'knots',\n category: 'speed',\n multiplier: (x) => x / 1.852,\n decimals: true,\n },\n {\n name: 'c',\n display: '°C',\n category: 'temperature',\n multiplier: (x) => x,\n decimals: false,\n },\n {\n name: 'f',\n display: '°F',\n category: 'temperature',\n multiplier: (x) => (9 / 5) * x + 32,\n decimals: false,\n },\n { name: 'm', display: 'm', category: 'height', multiplier: (x) => x, decimals: true },\n {\n name: 'ft',\n display: 'ft',\n category: 'height',\n multiplier: (x) => x * 3.28084,\n decimals: false,\n },\n];\nexport default units;\n","import { useRef, useEffect, useState } from 'react';\n\nimport mapLayers from './mapLayers.js';\nimport units from './units.js';\n\nexport const server =\n process.env.API_URL || 'https://a0t6h1frq6.execute-api.us-east-1.amazonaws.com/dev';\nexport const mapboxToken =\n process.env.REACT_APP_MAPBOX_TOKEN ||\n 'pk.eyJ1IjoiaGFrYWkiLCJhIjoiY2x0ZGgycTU0MDNpMzJrcndxcDcwb21zdSJ9.db6Xl7giQcD10mcJV5xyag';\n\nexport const minScreenHeight = 550;\nexport const minScreenWidth = 500;\n\nexport function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function getPacificTime(param) {\n const date = param ? new Date(param) : new Date();\n return date.toLocaleString('en', {\n timeZone: 'America/Vancouver',\n });\n}\n\nexport function getArrowDirection(selectedVariableName, direction) {\n return direction;\n}\n\nexport const defaultSettings = {\n units: {\n speed: 'kmh',\n temperature: 'c',\n height: 'm',\n },\n showColorStrip: false,\n useCrosshair: true,\n showAnimations: true,\n colorData: false,\n};\nexport const defaultMapCenter = [-123.3, 49];\nexport const defaultMapZoom = 6.75;\n\n// https://overreacted.io/making-setinterval-declarative-with-react-hooks/\nexport function useInterval(callback, delay) {\n const savedCallback = useRef();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nexport function generateDateTime(date) {\n // eg 2023-03-21T07:00:05.000Z\n const isoDate = date.toISOString();\n\n const yearString = isoDate.substring(0, 4);\n const monthString = isoDate.substring(5, 7);\n const dayString = isoDate.substring(8, 10);\n const hourString = isoDate.substring(11, 13);\n\n const modelDateTime = `${yearString}${monthString}${dayString}_${hourString}`;\n\n return modelDateTime;\n}\n\nexport function useWindowSize() {\n // Initialize state with undefined width/height so server and client renders match\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\n const [windowSize, setWindowSize] = useState({\n width: undefined,\n height: undefined,\n });\n useEffect(() => {\n // Handler to call on window resize\n function handleResize() {\n // Set window width/height to state\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n }\n // Add event listener\n window.addEventListener('resize', handleResize);\n // Call handler right away so state gets updated with initial window size\n handleResize();\n // Remove event listener on cleanup\n return () => window.removeEventListener('resize', handleResize);\n }, []); // Empty array ensures that effect is only run on mount\n return windowSize;\n}\n\nexport const daysOfTheWeek = [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n];\n\nexport const daysOfTheWeekShortName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nexport function formatAMPM(date) {\n let hours = date.getHours();\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours = hours % 12;\n hours = hours || 12; // the hour '0' should be '12'\n const strTime = `${hours} ${ampm}`;\n return strTime;\n}\n\nexport function formatAMPMwithMinutes(date) {\n let hours = date.getHours();\n const ampm = hours >= 12 ? 'pm' : 'am';\n hours = hours % 12;\n hours = hours || 12; // the hour '0' should be '12'\n let minutes = date.getMinutes();\n if (minutes < 10) {\n minutes = `0${minutes}`;\n }\n const strTime = `${hours}:${minutes} ${ampm}`;\n return strTime;\n}\n\nexport function useDebounce(value, delay) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n useEffect(\n () => {\n // Update debounced value after delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay] // Only re-call effect if value or delay changes\n );\n return debouncedValue;\n}\n\nexport function degToCompass(num) {\n const val = Math.floor(num / 22.5 + 0.5);\n const arr = [\n 'N',\n 'NNE',\n 'NE',\n 'ENE',\n 'E',\n 'ESE',\n 'SE',\n 'SSE',\n 'S',\n 'SSW',\n 'SW',\n 'WSW',\n 'W',\n 'WNW',\n 'NW',\n 'NNW',\n ];\n return arr[val % 16];\n}\n\nexport function isSameDaySameHour(timeA, timeB) {\n const dateA = new Date(timeA).toDateString();\n const hourA = new Date(timeA).getHours();\n const dateB = new Date(timeB).toDateString();\n const hourB = new Date(timeB).getHours();\n return dateA === dateB && hourA === hourB;\n}\n\nexport function metersPerSecondToKMPerHour(metersPerSecond) {\n return metersPerSecond * 3.6;\n}\n\nexport function roundScale(scale) {\n return scale.map((step) => {\n const { color, value } = step;\n return { color, value: roundNumber(value) };\n });\n}\n\nexport function toFixedScale(scale, fix) {\n return scale.map((step) => {\n const { color, value } = step;\n return { color, value: +value.toFixed(fix) };\n });\n}\n\nexport function getColorScale(variableName, unitsSettings) {\n const selectedMapVar = mapLayers.find((e) => e.variableName === variableName);\n let { scale, unit } = selectedMapVar;\n\n const { multiplier } = getNewUnits(unit, unitsSettings);\n\n scale = scale.map((step) => {\n return { color: step.color, value: multiplier(step.value) };\n });\n\n if (['wave', 'seaSurfaceHeight', 'current'].includes(variableName)) {\n // toFixed\n scale = toFixedScale(scale, 1);\n } else if (['airTemperature', 'potentialTemperature', 'wind'].includes(variableName)) {\n // Math.round\n scale = roundScale(toFixedScale(scale, 0));\n }\n\n return scale;\n}\n\nexport function generateGradientScale(scale) {\n const gradientScale = [];\n scale?.forEach((step) => {\n gradientScale.push(`${step.color}`);\n });\n return gradientScale;\n}\n\nexport function getVariableTimeseriesData(dataArr, variableName, stationID) {\n return dataArr.map((d) => {\n const tempDate = new Date(d.date);\n return {\n date: stationID ? tempDate : makeMinutesZero(tempDate),\n isLive: d.isLive,\n ...d.data[variableName],\n };\n });\n}\n\nexport function checkLandOrWater(map, point) {\n const features = map.queryRenderedFeatures(point);\n let landOrWater;\n if (features.length) {\n landOrWater = features.pop().layer?.id === 'water' ? 'water' : 'land';\n }\n // no features are returned on transparent layers\n else landOrWater = 'land';\n\n return landOrWater;\n}\n\nexport function getNewUnits(unit, unitsSettings) {\n const { category } = units.find((e) => e.name === unit);\n const newUnits = unitsSettings[category];\n const {\n multiplier,\n display: displayUnits,\n name,\n } = units.find((e) => e.name === newUnits);\n return { multiplier, displayUnits, name };\n}\n\nexport function roundNumber(x) {\n const number = Number(x);\n if (number < 10) {\n return Number(number.toFixed(1));\n } else {\n return Number(number.toFixed(0));\n }\n}\n\nexport function formatNumberGenerator(unitsSelected) {\n let decimals = false;\n let multiplier = (x) => x;\n const res = units.find((e) => e.name === unitsSelected);\n if (res) {\n decimals = res.decimals;\n multiplier = res.multiplier;\n }\n\n return (x) => {\n if (x === undefined || isNaN(x) || x === null) return NaN;\n if (decimals) return roundNumber(multiplier(x));\n return Math.round(multiplier(x));\n };\n}\n\nexport function RGBToHSL(rgb) {\n const r = rgb[0] / 255;\n const g = rgb[1] / 255;\n const b = rgb[2] / 255;\n const l = Math.max(r, g, b);\n const s = l - Math.min(r, g, b);\n const h = s ? (l === r ? (g - b) / s : l === g ? 2 + (b - r) / s : 4 + (r - g) / s) : 0;\n return [\n 60 * h < 0 ? 60 * h + 360 : 60 * h,\n 100 * (s ? (l <= 0.5 ? s / (2 * l - s) : s / (2 - (2 * l - s))) : 0),\n (100 * (2 * l - s)) / 2,\n ];\n}\n\nexport function hexToRgb(hex) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return [r, g, b];\n}\n\nfunction rgbToLuminance(r, g, b) {\n const a = [r, g, b].map(function (v) {\n v /= 255;\n return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n });\n return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;\n}\n\nfunction contrastRatio(l1, l2) {\n const lighter = Math.max(l1, l2);\n const darker = Math.min(l1, l2);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\nexport function colorContrasts(rgbColorA, rgbColorB) {\n // Convert theme color from hex to RGB\n const colorRgbB = rgbColorB.match(/\\d+/g).map(Number);\n\n // Extract RGB values from the input color\n const colorRgbA = rgbColorA.match(/\\d+/g).map(Number);\n\n // Calculate luminance values for both colors\n const luminanceA = rgbToLuminance(...colorRgbA);\n const luminanceB = rgbToLuminance(...colorRgbB);\n\n // Calculate the contrast ratio\n const ratio = contrastRatio(luminanceB, luminanceA);\n // Check if the contrast ratio is above the recommended threshold (e.g., 4.5 for normal text)\n return ratio >= 3;\n}\n\nexport function makeMinutesZero(date) {\n date?.setMinutes(0);\n date?.setSeconds(0);\n date?.setMilliseconds(0);\n return date;\n}\n\nexport function getTileName(modelLongName, dateTime, tileTimesLookup, variableName) {\n const dateTime2 = dateTime.replace(/_/g, 'T') + 'Z';\n const modelLookup = tileTimesLookup.find((e) => e.model === modelLongName);\n\n const res = modelLookup?.model_data.filter((e) => e.model_time === dateTime2);\n let modelRun;\n if (res && res.length) {\n modelRun = res[0].model_run;\n } else {\n modelRun = 'no_tile_found';\n console.error('no model run found for ', modelLongName, dateTime2);\n }\n\n // hour is modelTime minus modelRun, convert each to datetiome first using modelDateHourToISODateHour;\n\n const hour = Math.floor(\n (new Date(modelDateHourToISODateHour(dateTime)) -\n new Date(modelDateHourToISODateHour(modelRun.replace('T', '_').replace('Z', '')))) /\n (1000 * 60 * 60)\n );\n const tileName = `${modelLongName}_${variableName}_${modelRun}_${hour}_${dateTime2}`;\n return { tileName, modelRun };\n}\n\nfunction modelDateHourToISODateHour(modelDateHour) {\n // eg converts 20230313_13 to 2023-03-13T13:00:00.000Z\n const [modelDateStr, hour] = modelDateHour.split('_');\n\n const year = modelDateStr.slice(0, 4);\n const month = modelDateStr.slice(4, 6);\n const day = modelDateStr.slice(6);\n\n const modelIsoString = `${[year, month, day].join('-')}T${hour}:00:00.000Z`;\n\n return new Date(Date.parse(modelIsoString));\n}\n\n// make a function to cut off text at length and add ...\nexport function truncateText(text, length) {\n return text.length > length ? text.slice(0, length) + '...' : text;\n}\n\nexport function roundLocation(locationArray) {\n if (!locationArray) return;\n return locationArray.map((e) => parseFloat(e).toFixed(5));\n}\n\nexport function isMobileApp() {\n return window.matchMedia('(display-mode: standalone)').matches;\n}\n","// order is relevant to how they are layered on map.\nconst stationTypes = [\n {\n type: 'webcams',\n typeName: 'Webcam',\n icon: 'Webcam_Station.png',\n displayName: 'Webcams',\n },\n { type: 'buoys', typeName: 'Buoy', icon: 'Buoy_Station.png', displayName: 'Buoys' },\n {\n type: 'weather_stations',\n typeName: 'Weather station',\n icon: 'Weather_Station.png',\n displayName: 'Weather Stations',\n },\n {\n type: 'tide_stations',\n typeName: 'Tide station',\n icon: 'Tide_Station.png',\n displayName: 'Tide Stations',\n },\n {\n type: 'currents_stations',\n typeName: 'Current station',\n icon: 'Current_Station.png',\n displayName: 'Current Stations',\n },\n];\nexport default stationTypes;\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","// models and their bounds\nconst models = {\n HRDPS: {\n bounds: [-150, 38, -120, 68],\n },\n RDWPS: {\n bounds: [-150, 38, -120, 68],\n },\n 'CIOPS-SalishSea': {\n bounds: [-126.2, 47, -121.11319, 51],\n },\n 'CIOPS-West': {\n bounds: [-140, 44.3, -122, 60],\n },\n // this is used in restricting queries only\n CIOPS: {\n bounds: [-140, 44.3, -121.11319, 60],\n },\n};\n\nexport default models;\n","import mapboxgl from 'mapbox-gl';\nconst twgl = require('twgl.js');\n\nexport function VectorField(map, gl) {\n let data;\n let bounds;\n let range;\n let programInfo;\n let textures;\n let screenProgramInfo;\n let updateProgramInfo;\n let particleTextures;\n let numParticles;\n let framebuffer;\n let particleIndices;\n let particleRes;\n let state = 'PAUSED';\n let mapBounds;\n\n let fadeOpacity;\n let speedFactor;\n let speedFactorWave;\n let dropRate;\n let dropRateBump;\n\n let animationId;\n\n let selectedLayer;\n const nParticles = 750;\n\n function setBounds(bounds) {\n const nw = bounds.getNorthWest();\n const se = bounds.getSouthEast();\n\n const nwMercator = mapboxgl.MercatorCoordinate.fromLngLat(nw);\n const seMercator = mapboxgl.MercatorCoordinate.fromLngLat(se);\n\n // minx miny maxx maxy\n mapBounds = [nwMercator.x, seMercator.y, seMercator.x, nwMercator.y];\n }\n\n function setData(dataObject, selectedLayerName) {\n selectedLayer = selectedLayerName;\n // set vectorField data and bounds of data, and range of vector components\n ({ data, bounds, range } = dataObject);\n\n // initialize settings, programs, buffers\n\n // data is an img element\n initialize(data, selectedLayerName);\n\n // start animating field\n startAnimation();\n }\n\n function setParticles(num) {\n particleRes = Math.ceil(Math.sqrt(num));\n numParticles = particleRes * particleRes;\n\n const particleState = new Uint8Array(numParticles * 4);\n\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256);\n }\n\n particleTextures = twgl.createTextures(gl, {\n particleTexture0: {\n mag: gl.NEAREST,\n min: gl.NEAREST,\n width: particleRes,\n height: particleRes,\n format: gl.RGBA,\n src: particleState,\n wrap: gl.CLAMP_TO_EDGE,\n },\n particleTexture1: {\n mag: gl.NEAREST,\n min: gl.NEAREST,\n width: particleRes,\n height: particleRes,\n format: gl.RGBA,\n src: particleState,\n wrap: gl.CLAMP_TO_EDGE,\n },\n });\n\n particleIndices = new Float32Array(numParticles);\n for (let i = 0; i < numParticles; i++) {\n particleIndices[i] = i;\n }\n }\n\n function initialize(imgElement, selectedLayerName) {\n const fs = getFS(selectedLayerName);\n // get raw data from img element by converting it to canvas\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n // var img = document.getElementById('myimg');\n canvas.width = imgElement.width;\n canvas.height = imgElement.height;\n context.drawImage(imgElement, 0, 0);\n const myData = context.getImageData(0, 0, imgElement.width, imgElement.height);\n\n // data is an element\n fadeOpacity = 0.985;\n speedFactor = 0.075;\n speedFactorWave = 0.035;\n dropRate = 0.003;\n dropRateBump = 0.05;\n\n programInfo = twgl.createProgramInfo(gl, [vs, fs]);\n screenProgramInfo = twgl.createProgramInfo(gl, [vsQuad, fsScreen]);\n updateProgramInfo = twgl.createProgramInfo(gl, [vsQuad, fsUpdate]);\n\n // initial setting of particle positions\n setParticles(nParticles);\n\n const emptyPixels = new Uint8Array(gl.canvas.width * gl.canvas.height * 4);\n\n textures = twgl.createTextures(gl, {\n u_image: {\n mag: gl.LINEAR,\n min: gl.LINEAR,\n width: myData.width,\n height: myData.height,\n format: gl.RGBA,\n src: myData.data,\n },\n backgroundTexture: {\n mag: gl.NEAREST,\n min: gl.NEAREST,\n width: gl.canvas.width,\n height: gl.canvas.height,\n format: gl.RGBA,\n src: emptyPixels,\n wrap: gl.CLAMP_TO_EDGE,\n },\n screenTexture: {\n mag: gl.NEAREST,\n min: gl.NEAREST,\n width: gl.canvas.width,\n height: gl.canvas.height,\n format: gl.RGBA,\n src: emptyPixels,\n wrap: gl.CLAMP_TO_EDGE,\n },\n });\n\n framebuffer = gl.createFramebuffer();\n }\n\n function drawParticles(isCIOPSWest, isCurrents) {\n gl.useProgram(programInfo.program);\n\n const arrays = {\n a_index: {\n numComponents: 1,\n data: particleIndices,\n },\n };\n\n const bufferInfo = twgl.createBufferInfoFromArrays(gl, arrays);\n\n const uniforms = {\n u_vector: textures.u_image,\n u_particles: particleTextures.particleTexture0,\n u_particles_res: particleRes,\n size: 2 * window.devicePixelRatio,\n u_vector_min: [range[0], range[0]],\n u_vector_max: [range[1], range[1]],\n u_bounds: mapBounds,\n u_data_bounds: bounds,\n isCIOPSWest,\n isCurrents,\n };\n\n twgl.setBuffersAndAttributes(gl, programInfo, bufferInfo);\n twgl.setUniforms(programInfo, uniforms);\n\n twgl.drawBufferInfo(gl, bufferInfo, gl.POINTS);\n }\n\n function drawTexture(texture, opacity) {\n gl.useProgram(screenProgramInfo.program);\n\n const arrays = {\n a_pos: {\n numComponents: 2,\n data: new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n },\n };\n\n const uniforms = {\n u_screen: texture,\n u_opacity: opacity,\n };\n\n const bufferInfo = twgl.createBufferInfoFromArrays(gl, arrays);\n twgl.setBuffersAndAttributes(gl, screenProgramInfo, bufferInfo);\n twgl.setUniforms(screenProgramInfo, uniforms);\n twgl.drawBufferInfo(gl, bufferInfo);\n }\n\n function drawScreen(isCIOPSWest, isCurrents) {\n // bind framebuffer\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n // draw to screenTexture\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n textures.screenTexture,\n 0\n );\n // set viewport to size of canvas\n\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n\n // first disable blending\n gl.disable(gl.BLEND);\n\n // draw backgroundTexture to screenTexture target\n drawTexture(textures.backgroundTexture, fadeOpacity);\n // draw particles to screentexture\n drawParticles(isCIOPSWest, isCurrents);\n\n // target normal canvas by setting FRAMEBUFFER to null\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n // enable blending for final render to map\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n drawTexture(textures.screenTexture, 1.0);\n\n gl.disable(gl.BLEND);\n\n // swap background with screen\n const temp = textures.backgroundTexture;\n textures.backgroundTexture = textures.screenTexture;\n textures.screenTexture = temp;\n }\n\n function updateParticles() {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n particleTextures.particleTexture1,\n 0\n );\n\n gl.viewport(0, 0, particleRes, particleRes);\n\n gl.useProgram(updateProgramInfo.program);\n\n const arrays = {\n a_pos: {\n numComponents: 2,\n data: new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n },\n };\n\n const uniforms = {\n u_vector: textures.u_image,\n u_particles: particleTextures.particleTexture0,\n u_vector_min: [range[0], range[0]],\n u_vector_max: [range[1], range[1]],\n u_rand_seed: Math.random(),\n u_vector_res: [data.width, data.height],\n u_speed_factor: selectedLayer === 'wave' ? speedFactorWave : speedFactor,\n u_drop_rate: dropRate,\n u_drop_rate_bump: dropRateBump,\n u_bounds: mapBounds,\n u_data_bounds: bounds,\n };\n\n const bufferInfo = twgl.createBufferInfoFromArrays(gl, arrays);\n twgl.setBuffersAndAttributes(gl, updateProgramInfo, bufferInfo);\n\n twgl.setUniforms(updateProgramInfo, uniforms);\n\n twgl.drawBufferInfo(gl, bufferInfo);\n\n const temp = particleTextures.particleTexture0;\n particleTextures.particleTexture0 = particleTextures.particleTexture1;\n particleTextures.particleTexture1 = temp;\n }\n\n function draw(isCIOPSWest, isCurrents) {\n if (state !== 'ANIMATING') return;\n\n gl.disable(gl.DEPTH_TEST);\n gl.disable(gl.STENCIL_TEST);\n\n drawScreen(isCIOPSWest, isCurrents);\n updateParticles();\n }\n\n function frame() {\n map.triggerRepaint();\n animationId = requestAnimationFrame(frame);\n }\n\n function startAnimation() {\n if (state === 'ANIMATING') return;\n\n state = 'ANIMATING';\n setBounds(map.getBounds());\n // todo remove this\n frame();\n }\n\n function stopAnimation() {\n state = 'PAUSED';\n clear();\n cancelAnimationFrame(animationId);\n }\n\n function clear() {\n if (!textures?.screenTexture || !textures?.backgroundTexture) {\n return;\n }\n gl.clearColor(0.0, 0.0, 0.0, 0.0);\n\n // clear framebuffer textures\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n textures.screenTexture,\n 0\n );\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n textures.backgroundTexture,\n 0\n );\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n // generate new random particle positions\n setParticles(nParticles);\n\n // target normal canvas\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n // clear canvas\n gl.clear(gl.COLOR_BUFFER_BIT);\n }\n\n return {\n setData,\n startAnimation,\n stopAnimation,\n draw,\n };\n}\n\nconst vs = `\nprecision highp float;\n\nattribute float a_index;\n\nuniform float size;\nuniform sampler2D u_particles;\nuniform float u_particles_res;\n\nvarying vec2 v_particle_pos;\n\nconst vec2 bitEnc = vec2(1.,255.);\nconst vec2 bitDec = 1./bitEnc;\n\n// decode particle position from pixel RGBA\nvec2 fromRGBA(const vec4 color) {\n vec4 rounded_color = floor(color * 255.0 + 0.5) / 255.0;\n float x = dot(rounded_color.rg, bitDec);\n float y = dot(rounded_color.ba, bitDec);\n return vec2(x, y);\n}\n\nvoid main() {\n vec4 color = texture2D(u_particles, vec2(\n fract(a_index / u_particles_res),\n floor(a_index / u_particles_res) / u_particles_res));\n\n // decode current particle position from the pixel's RGBA value\n v_particle_pos = fromRGBA(color);\n\n \n gl_PointSize = size;\n \n gl_Position = vec4(2.0 * v_particle_pos.x - 1.0, 1.0 - 2.0 * v_particle_pos.y, 0, 1);\n}\n`;\nfunction getFS(selectedLayerName) {\n return `\nprecision highp float;\n\nuniform sampler2D u_vector;\nuniform vec2 u_vector_min;\nuniform vec2 u_vector_max;\n//uniform sampler2D u_color_ramp;\n\nuniform vec4 u_bounds;\nuniform vec4 u_data_bounds;\nuniform bool isCIOPSWest;\nuniform bool isCurrents;\n\nvarying vec2 v_particle_pos;\n\nvec2 returnLonLat(float x_domain, float y_domain, vec2 pos) {\n\n //need value between 0 and 1, which fract accomplishes\n float mercator_x = fract(u_bounds.x + pos.x * x_domain);\n float mercator_y = u_bounds.w + pos.y * y_domain;\n\n float lon = mercator_x * 360.0 - 180.0;\n float lat2 = 180.0 - mercator_y * 360.0;\n float lat = 360.0 / 3.141592654 * atan(exp(lat2 * 3.141592654/180.0)) - 90.0;\n\n return vec2(lon, lat);\n}\n\nvoid main() {\n\n //convert from 0-1 to degrees for proper texture value lookup\n float x_domain = abs(u_bounds.x - u_bounds.z);\n float y_domain = abs(u_bounds.y - u_bounds.w);\n\n vec2 coordinate = returnLonLat(x_domain, y_domain, v_particle_pos);\n float lon = coordinate.x;\n float lat = coordinate.y;\nif (\n \n ((isCurrents && isCIOPSWest) &&\n ((lat > 46.7 && lon > -123.4) || (lat > 47.9 && lon > -124.527) || (lat > 49.3 && lon > -125.6) || (lat > 49.7 && lon > -126.0926) || (lon > -123.2))\n ) ||\n \n ((isCurrents && !isCIOPSWest) && ((lat > 50. && lon < -126.0926)|| (lat < 49. && lon < -124.527) || (lat < 49.8 && lon < -125.1) || (lat < 48.0 && lon < -123.26) ||\n (lat < 48.368 && lon < -124.651) || (lat < 49.46 && lat > 49.26 && (lon > -123.145 && lon < -122.816 )))) ||\n lat > u_data_bounds.w ||\n lat < u_data_bounds.y ||\n lon > u_data_bounds.z ||\n lon < u_data_bounds.x\n \n) {\n discard;\n}\n\n // Calculate the position for vector lookup\n vec2 vectorLookup = vec2(\n (lon - u_data_bounds.x) / (u_data_bounds.z - u_data_bounds.x),\n (lat - u_data_bounds.y) / (u_data_bounds.w - u_data_bounds.y)\n );\n\n // Get the velocity vector\n vec2 velocity = texture2D(u_vector, vectorLookup).rg;\n \n // Normalize the velocity\n velocity = mix(u_vector_min, u_vector_max, velocity);\n\n // Calculate the speed (magnitude of velocity)\n float speed = length(velocity);\n\n // Set a threshold for minimum speed (adjust this value as needed)\n float speedThreshold = 0.01 * length(u_vector_max);\n\n // Discard particles where speed is below the threshold\n if (speed < speedThreshold) {\n discard;\n }\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 0.33);\n}\n`;\n}\nconst vsQuad = `\nprecision highp float;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_tex_pos;\n\nvoid main() {\n v_tex_pos = a_pos;\n gl_Position = vec4(1.0 - 2.0 * a_pos, 0, 1);\n}\n`;\nconst fsScreen = `\nprecision highp float;\n\nuniform sampler2D u_screen;\nuniform float u_opacity;\n\nvarying vec2 v_tex_pos;\nprecision highp float;\n\n\n\nuniform float u_value;\nvoid main() {\n vec4 color = texture2D(u_screen, 1.0 - v_tex_pos);\n // a hack to guarantee opacity fade out even with a value close to 1.0\n gl_FragColor = vec4(floor(255.0 * color * u_opacity) / 255.0);\n}\n`;\n\nconst fsUpdate = `\nprecision highp float;\n\nuniform sampler2D u_particles;\nuniform sampler2D u_vector;\nuniform vec2 u_vector_res;\nuniform vec2 u_vector_min;\nuniform vec2 u_vector_max;\nuniform float u_rand_seed;\nuniform float u_speed_factor;\nuniform float u_drop_rate;\nuniform float u_drop_rate_bump;\nuniform vec4 u_bounds;\nuniform vec4 u_data_bounds;\n\nvarying vec2 v_tex_pos;\n\nconst vec2 bitEnc = vec2(1.,255.);\nconst vec2 bitDec = 1./bitEnc;\n\n// decode particle position from pixel RGBA\nvec2 fromRGBA(const vec4 color) {\n vec4 rounded_color = floor(color * 255.0 + 0.5) / 255.0;\n float x = dot(rounded_color.rg, bitDec);\n float y = dot(rounded_color.ba, bitDec);\n return vec2(x, y);\n}\n\n// encode particle position to pixel RGBA\nvec4 toRGBA (const vec2 pos) {\n vec2 rg = bitEnc * pos.x;\n rg = fract(rg);\n rg -= rg.yy * vec2(1. / 255., 0.);\n\n vec2 ba = bitEnc * pos.y;\n ba = fract(ba);\n ba -= ba.yy * vec2(1. / 255., 0.);\n\n return vec4(rg, ba);\n}\n\n// pseudo-random generator\nconst vec3 rand_constants = vec3(12.9898, 78.233, 4375.85453);\nfloat rand(const vec2 co) {\n float t = dot(rand_constants.xy, co);\n return fract(sin(t) * (rand_constants.z + t));\n}\n\n// vector magnitude lookup; use manual bilinear filtering based on 4 adjacent pixels for smooth interpolation\nvec2 lookup_vector(const vec2 uv) {\n // return texture2D(u_vector, uv).rg; // lower-res hardware filtering\n vec2 px = 1.0 / u_vector_res;\n vec2 vc = (floor(uv * u_vector_res)) * px;\n vec2 f = fract(uv * u_vector_res);\n vec2 tl = texture2D(u_vector, vc).rg;\n vec2 tr = texture2D(u_vector, vc + vec2(px.x, 0)).rg;\n vec2 bl = texture2D(u_vector, vc + vec2(0, px.y)).rg;\n vec2 br = texture2D(u_vector, vc + px).rg;\n return mix(mix(tl, tr, f.x), mix(bl, br, f.x), f.y);\n}\n\nvec2 returnLonLat(float x_domain, float y_domain, vec2 pos) {\n\n //need value between 0 and 1, which fract accomplishes\n float mercator_x = fract(u_bounds.x + pos.x * x_domain);\n float mercator_y = u_bounds.w + pos.y * y_domain;\n\n float lon = mercator_x * 360.0 - 180.0;\n float lat2 = 180.0 - mercator_y * 360.0;\n float lat = 360.0 / 3.141592654 * atan(exp(lat2 * 3.141592654/180.0)) - 90.0;\n\n return vec2(lon, lat);\n}\n\nvoid main() {\n vec4 color = texture2D(u_particles, v_tex_pos);\n vec2 pos = fromRGBA(color);\n\n //convert from 0-1 to degrees for proper texture value lookup\n float x_domain = abs(u_bounds.x - u_bounds.z);\n float y_domain = abs(u_bounds.y - u_bounds.w);\n\n vec2 coordinate = returnLonLat(x_domain, y_domain, pos);\n float lon = coordinate.x;\n float lat = coordinate.y;\n\n float lon_domain = u_data_bounds.z - u_data_bounds.x;\n float lat_domain = u_data_bounds.w - u_data_bounds.y;\n\n vec2 pos_lookup = vec2(\n (lon - u_data_bounds.x) / lon_domain,\n (lat - u_data_bounds.y) / lat_domain\n );\n\n vec2 velocity = mix(u_vector_min, u_vector_max, lookup_vector(pos_lookup));\n \n float speed_t = length(velocity) / length(u_vector_max);\n \n\n // take EPSG:4236 distortion into account for calculating where the particle moved\n //float distortion = cos(radians(lat));\n vec2 offset = vec2(velocity.x , -velocity.y) * 0.0001 * u_speed_factor;\n // update particle position, wrapping around the date line\n \n pos = fract(1.0 + pos + offset);\n\n // a random seed to use for the particle drop\n vec2 seed = (pos + v_tex_pos) * u_rand_seed;\n\n // drop rate is a chance a particle will restart at random position, to avoid degeneration\n float drop_rate = u_drop_rate + speed_t * u_drop_rate_bump;\n float drop = step(1.0 - drop_rate, rand(seed));\n\n vec2 random_pos = vec2(\n rand(seed + 1.3),\n rand(seed + 2.1));\n pos = mix(pos, random_pos, drop);\n\n // encode the new particle position back into RGBA\n gl_FragColor = toRGBA(pos);\n}\n`;\n\nexport async function VectorImage(url, bounds, range) {\n // this function loads an image containing the vector data stored in R and G channels\n // It requires the bounds of the data in [minx, miny, maxx, maxy] and [min, max]\n // of the vector components used when encoding the field in the image\n\n // png image would usually be hosted at a url, and url would be a string.\n // For this demo, the data is processed in the notebook,\n // and the Canvas element is fed to this function in place of the url.\n if (url instanceof HTMLCanvasElement) {\n return {\n data: url,\n bounds,\n range,\n };\n }\n\n // bounds are [minx, miny, maxx, maxy]\n return new Promise((resolve, reject) => {\n const data = new Image();\n data.crossOrigin = `Anonymous`;\n data.src = url;\n\n data.onload = () => {\n resolve({\n data,\n bounds,\n range,\n });\n };\n data.onerror = () => reject(new Error('Error'));\n });\n}\n","import React, { useRef, useEffect } from 'react';\nimport 'mapbox-gl/dist/mapbox-gl.css';\n\nimport mapboxgl, { Point } from 'mapbox-gl';\nimport { useTheme } from '@mui/material';\nimport NoDataPattern from '../../Images/backgroundNoDataPattern.png';\nimport stationTypes from '../../stations.js';\n\nimport './styles.css';\nimport mapLayers from '../../mapLayers';\nimport models from '../../models.js';\nimport {\n generateDateTime,\n checkLandOrWater,\n mapboxToken,\n getTileName,\n} from '../../utilities';\nimport { VectorField, VectorImage } from '../../Vectors/lib';\n\nimport buoyIcon from '../../Images/Buoy_Station.png';\nimport tidesIcon from '../../Images/Tide_Station.png';\nimport webcamsIcon from '../../Images/Webcam_Station.png';\nimport weatherStationIcon from '../../Images/Weather_Station.png';\nimport currentsStationIcon from '../../Images/Current_Station.png';\n\nconst stationIcons = {\n buoys: buoyIcon,\n tide_stations: tidesIcon,\n webcams: webcamsIcon,\n weather_stations: weatherStationIcon,\n currents_stations: currentsStationIcon,\n};\n\n// defaults to the \"dev\" tiles\nexport const tilesURLPrefix =\n process.env.TILES_URL || 'https://d2zehncouvcmlt.cloudfront.net';\n\nexport default function Map({\n stations,\n showStationType,\n selectedStation,\n handleSelectStation,\n setPointLocations,\n zoom,\n setZoom,\n selectedVariableName,\n flyToCoords,\n setMapPanned,\n setLandOrWater,\n settings,\n sliderCurrentTime,\n mapLayerMaxTimes,\n mapCenterPoint,\n setMapCenterPoint,\n dataPanelOpen,\n webcamDialogOpen,\n cookiesChecked,\n setMapDataLoaded,\n setMapStyleLoaded,\n mapStyleLoaded,\n tileTimesLookup,\n}) {\n const stationsShowZoomLevel = 10;\n const mapContainer = useRef(null);\n const map = useRef(null);\n const vectorFieldRef = useRef(null);\n const vectorFieldCIOPSWest = useRef(null);\n const selectedVariableNameRef = useRef();\n const markers = useRef(null);\n const hoveredStationIds = useRef(\n stationTypes.reduce((acc, station) => ({ ...acc, [station.type]: null }), {})\n );\n const layerOrder = stationTypes\n .map((station) => [station.type + 'CircleLayer', station.type + 'IconLayer'])\n .flat();\n const initialLoad = useRef(false);\n\n const modelLayersRef = useRef();\n const selectedStationIDRef = useRef();\n const selectedStationTypeRef = useRef();\n const stationsRef = useRef(stations);\n\n const tileTimesLookupRef = useRef(tileTimesLookup);\n useEffect(() => {\n tileTimesLookupRef.current = tileTimesLookup;\n }, [tileTimesLookup]);\n\n const dateTimeRef = useRef(generateDateTime(new Date(sliderCurrentTime)));\n useEffect(() => {\n dateTimeRef.current = generateDateTime(new Date(sliderCurrentTime));\n }, [sliderCurrentTime]);\n\n const cookiesCheckedRef = useRef(cookiesChecked);\n useEffect(() => {\n cookiesCheckedRef.current = cookiesChecked;\n }, [cookiesChecked]);\n\n mapboxgl.accessToken = mapboxToken;\n\n const theme = useTheme();\n const defaultMaxBounds = [\n [-160, 25],\n [-90, 70],\n ];\n const CIOPSWestVariables = ['potentialTemperature', 'current', 'seaSurfaceHeight'];\n\n const isInsideEndOfDataRef = useRef(true);\n const useCrosshairRef = useRef(settings.useCrosshair);\n useEffect(() => {\n useCrosshairRef.current = settings.useCrosshair;\n }, [settings.useCrosshair]);\n\n useEffect(() => {\n if (useCrosshairRef.current) {\n clearMarkers();\n updateCrossHair();\n } else {\n setPointLocations();\n }\n }, [useCrosshairRef.current]);\n\n const showAnimationsRef = useRef(settings.showAnimations);\n useEffect(() => {\n showAnimationsRef.current = settings.showAnimations;\n }, [settings.showAnimations]);\n\n useEffect(() => {\n if (map.current && map.current.isStyleLoaded()) {\n if (showAnimationsRef.current) {\n updateVectorAnimationLayer();\n } else {\n removeAnimationLayers();\n }\n }\n }, [showAnimationsRef.current]);\n\n const mapCenterPointRef = useRef();\n useEffect(() => {\n if (\n map.current &&\n mapCenterPointRef.current === undefined &&\n mapCenterPoint !== undefined\n ) {\n map.current.setCenter([mapCenterPoint[0], mapCenterPoint[1]]);\n mapCenterPointRef.current = mapCenterPoint;\n }\n }, [mapCenterPoint]);\n\n const zoomRef = useRef();\n\n function addSymbolLayer(symbolName, symbolData) {\n if (map.current) {\n map.current.loadImage(stationIcons[symbolName], (error, image) => {\n if (error) throw error;\n // check if this image already exists\n if (!map.current.hasImage(`${symbolName}Icon`))\n map.current.addImage(`${symbolName}Icon`, image, { sdf: true });\n // if (error) throw error;\n // if (!map.current.hasImage(`${symbolName}Icon`))\n // map.current.addImage(`${symbolName}Icon`, image, { sdf: true });\n map.current.addSource(`${symbolName}Source`, {\n type: 'geojson',\n data: symbolData,\n generateId: true,\n clusterRadius: 35,\n maxzoom: stationsShowZoomLevel,\n });\n\n map.current.addLayer({\n id: `${symbolName}CircleLayer`,\n type: 'circle',\n source: `${symbolName}Source`,\n layout: {\n visibility: 'none',\n },\n filter: ['!', ['has', 'point_count']],\n paint: {\n 'circle-radius': 15,\n 'circle-color': [\n 'case',\n ['boolean', ['feature-state', 'click'], false],\n theme.palette.icons[symbolName].light,\n theme.palette.secondary.main,\n ],\n 'circle-stroke-width': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n 4,\n ['boolean', ['feature-state', 'click'], false],\n 4,\n 2,\n ],\n 'circle-stroke-color': theme.palette.primary.main,\n },\n });\n\n map.current.addLayer({\n id: `${symbolName}IconLayer`,\n type: 'symbol',\n source: `${symbolName}Source`,\n layout: {\n visibility: 'none',\n 'icon-image': `${symbolName}Icon`,\n 'icon-size': 0.5,\n 'icon-allow-overlap': true,\n },\n paint: {\n 'icon-color': theme.palette.primary.main,\n },\n filter: ['!', ['has', 'point_count']],\n });\n\n map.current.addLayer({\n id: `${symbolName}ClusterLayer`,\n type: 'circle',\n source: `${symbolName}Source`,\n layout: {\n visibility: 'none',\n },\n filter: ['has', 'point_count'],\n paint: {\n 'circle-radius': ['step', ['get', 'point_count'], 18, 5, 20, 10, 22],\n 'circle-color': [\n 'case',\n ['boolean', ['feature-state', 'click'], false],\n theme.palette.icons[symbolName].light,\n theme.palette.secondary.main,\n ],\n 'circle-stroke-width': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n 4,\n ['boolean', ['feature-state', 'click'], false],\n 4,\n 2,\n ],\n 'circle-stroke-color': theme.palette.primary.main,\n },\n });\n\n map.current.addLayer({\n id: `${symbolName}ClusterCountLayer`,\n type: 'symbol',\n source: `${symbolName}Source`,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': ['get', 'point_count_abbreviated'],\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n // visibility: 'none',\n },\n });\n\n map.current.on('click', `${symbolName}ClusterLayer`, (e) => {\n if (!useCrosshairRef.current) clearMarkers();\n\n const features = map.current.queryRenderedFeatures(e.point, {\n layers: [`${symbolName}ClusterLayer`],\n });\n const clusterId = features[0].properties.cluster_id;\n\n map.current\n .getSource(`${symbolName}Source`)\n .getClusterExpansionZoom(clusterId, (err, zoom) => {\n if (err) return;\n\n map.current.easeTo({\n center: features[0].geometry.coordinates,\n zoom,\n });\n if (!useCrosshairRef.current) setDataPinDrawerOpen(false);\n });\n });\n if (showStationType?.type === symbolName) {\n hideAllSymbolLayers();\n showSymbolLayer(symbolName);\n }\n });\n }\n }\n\n function hideSymbolLayer(stationType) {\n if (map.current && map.current.getLayer(`${stationType}CircleLayer`)) {\n hideLayer(`${stationType}CircleLayer`);\n }\n if (map.current && map.current.getLayer(`${stationType}IconLayer`)) {\n hideLayer(`${stationType}IconLayer`);\n }\n if (map.current && map.current.getLayer(`${stationType}ClusterLayer`)) {\n hideLayer(`${stationType}ClusterLayer`);\n }\n if (map.current && map.current.getLayer(`${stationType}ClusterCountLayer`)) {\n hideLayer(`${stationType}ClusterCountLayer`);\n }\n }\n\n function showSymbolLayer(stationType) {\n if (map.current && map.current.getLayer(`${stationType}CircleLayer`)) {\n showLayer(`${stationType}CircleLayer`);\n }\n if (map.current && map.current.getLayer(`${stationType}IconLayer`)) {\n showLayer(`${stationType}IconLayer`);\n }\n if (map.current && map.current.getLayer(`${stationType}ClusterLayer`)) {\n showLayer(`${stationType}ClusterLayer`);\n }\n if (map.current && map.current.getLayer(`${stationType}ClusterCountLayer`)) {\n showLayer(`${stationType}ClusterCountLayer`);\n }\n\n if (showStationType && map.current.getSource(`${showStationType.type}Source`)) {\n const style = map?.current?.getStyle();\n style.sources[`${showStationType.type}Source`].cluster = true;\n map?.current?.setStyle(style);\n }\n }\n\n function hideAllSymbolLayers() {\n hideZoomedLayers();\n\n if (map.current) {\n stationTypes.forEach(({ type }) => {\n hideSymbolLayer(type);\n });\n }\n }\n\n function easeMapTo(lng, lat) {\n if (isNaN(lng) || isNaN(lat)) return;\n map.current.easeTo({\n center: [lng, lat],\n speed: 0.9,\n });\n }\n\n function handleStationClick(event, stationType) {\n setPointLocations([event.lngLat.lat, event.lngLat.lng]);\n event.clickOnLayer = true;\n clearMarkers();\n easeMapTo(event.lngLat.lng, event.lngLat.lat);\n clearSelectedStations();\n const stationID = event.features[0].id;\n // map.current.setFeatureState(\n // {\n // source: `${stationType}Source`,\n // id: stationID,\n // },\n // {\n // click: true,\n // }\n // );\n\n handleSelectStation(event.features[0].properties);\n\n selectedStationIDRef.current = stationID;\n selectedStationTypeRef.current = stationType;\n }\n\n function clearSelectedStations() {\n if (!map.current) return;\n if (\n selectedStationTypeRef.current !== null &&\n selectedStationTypeRef.current !== undefined &&\n typeof selectedStationIDRef.current === 'number'\n ) {\n // check if source exists first\n if (map.current.getSource(`${selectedStationTypeRef.current}Source`)) {\n map.current.removeFeatureState(\n {\n source: `${selectedStationTypeRef.current}Source`,\n id: selectedStationIDRef.current,\n },\n 'click'\n );\n }\n }\n }\n\n function clearMarkers() {\n if (markers.current) {\n markers.current.remove();\n }\n }\n\n function handleStationMouseOver(event, stationType) {\n hoveredStationIds.current[stationType] = event.features[0].id;\n map.current.setFeatureState(\n {\n source: `${stationType}Source`,\n id: hoveredStationIds.current[stationType],\n },\n {\n hover: true,\n }\n );\n }\n\n function handleStationMouseLeave() {\n for (const sT in hoveredStationIds.current) {\n if (typeof hoveredStationIds.current[sT] === 'number') {\n map.current.removeFeatureState(\n {\n source: `${sT}Source`,\n id: hoveredStationIds.current[sT],\n },\n 'hover'\n );\n }\n }\n }\n\n function addStationEventHandlers() {\n stationTypes.forEach(({ type }) => {\n map.current.on('click', `${type}CircleLayer`, (event) => {\n if (event.originalEvent.cancelBubble) {\n return;\n }\n handleStationClick(event, type);\n\n setPointLocations([event.lngLat.lat, event.lngLat.lng]);\n\n event.originalEvent.cancelBubble = true;\n });\n map.current.on('click', `AllStationsCircleLayer-zoomed`, (event) => {\n if (event.originalEvent.cancelBubble) {\n return;\n }\n handleStationClick(event, type);\n\n setPointLocations([event.lngLat.lat, event.lngLat.lng]);\n\n event.originalEvent.cancelBubble = true;\n });\n map.current.on('mouseover', `${type}CircleLayer`, (event) => {\n handleStationMouseOver(event, type);\n });\n map.current.on('mouseleave', `${type}CircleLayer`, (event) => {\n handleStationMouseLeave();\n });\n });\n }\n\n useEffect(() => {\n // POINT SOURCE SYMBOL LAYERS\n if (showStationType) {\n stations?.forEach((station) => {\n if (station.stationType === showStationType.type) {\n showSymbolLayer(showStationType.type);\n } else {\n hideSymbolLayer(station.stationType);\n }\n });\n hideZoomedLayers();\n } else {\n hideAllSymbolLayers();\n showZoomedLayers();\n }\n }, [showStationType, map.current?.getLayer('AllStationsCircleLayer-zoomed')]);\n function showZoomedLayers() {\n if (map.current) {\n const zoomedLayers = [\n 'AllStationsCircleLayer-zoomed',\n 'AllStationsIconLayer-zoomed',\n 'AllStationsClusterLayer-zoomed',\n 'AllStationsClusterCountLayer-zoomed',\n ];\n\n zoomedLayers.forEach((layerId) => {\n if (map.current.getLayer(layerId)) {\n map.current.setLayoutProperty(layerId, 'visibility', 'visible');\n }\n });\n }\n }\n\n function hideZoomedLayers() {\n if (map.current && map.current.getLayer(`AllStationsCircleLayer-zoomed`)) {\n hideLayer(`AllStationsCircleLayer-zoomed`);\n hideLayer(`AllStationsIconLayer-zoomed`);\n hideLayer(`AllStationsClusterLayer-zoomed`);\n hideLayer(`AllStationsClusterCountLayer-zoomed`);\n }\n }\n\n useEffect(() => {\n if (!map.current?.isStyleLoaded()) return;\n // load images\n stations?.forEach((d) => {\n if (d.stationType === showStationType?.type) {\n if (!map.current.getLayer(d.stationType + 'CircleLayer')) {\n addSymbolLayer(d.stationType, d.stationData);\n }\n }\n });\n stationsRef.current = stations;\n }, [stations, map.current?.isStyleLoaded()]);\n\n function removeLayers(layers) {\n if (layers !== undefined && layers.length !== 0) {\n layers.forEach((layer) => {\n if (map.current.getLayer(layer.id)) {\n map.current.removeLayer(layer.id);\n }\n\n if (map.current.getSource(layer.source)) {\n map.current.removeSource(layer.source);\n }\n });\n }\n }\n\n function hideLayer(layerID) {\n map.current.setLayoutProperty(layerID, 'visibility', 'none'); // vs \"visible\"\n }\n\n function showLayer(layerID) {\n map.current.setLayoutProperty(layerID, 'visibility', 'visible'); // vs \"visible\"\n }\n\n useEffect(() => {\n if (markers.current && !selectedStation) {\n markers.current.remove();\n clearSelectedStations();\n setPointLocations();\n }\n }, []);\n\n function setMarker(lat, lon) {\n handleSelectStation();\n if (isNaN(lon) || isNaN(lat)) return;\n map.current.easeTo({\n center: [lon, lat],\n speed: 0.2,\n });\n\n // open the data panel\n\n // remove existing markers\n if (markers.current) {\n markers.current.remove();\n }\n // make new marker\n const marker = new mapboxgl.Marker({\n draggable: true,\n clickTolerance: 20,\n color: theme.palette.primary.main,\n })\n .setLngLat([lon, lat])\n .addTo(map.current);\n // add the marker to the list\n markers.current = marker;\n setPointLocations([lat, lon]);\n\n function onDragEnd() {\n // get new data at that point\n setPointLocations([\n markers.current.getLngLat().lat,\n markers.current.getLngLat().lng,\n ]);\n markers.current.dragging = false;\n }\n\n function onDragStart() {\n markers.current.dragging = true;\n }\n\n marker.on('dragend', onDragEnd);\n marker.on('dragstart', onDragStart);\n }\n\n // parameter is the name of the current model layer\n function reorderLayers(layerID = '') {\n if (map.current.isStyleLoaded()) {\n const availLayers = map.current?.getStyle()?.layers?.map((layer) => layer.id);\n\n if (availLayers.includes('background')) map.current.moveLayer('background');\n if (availLayers.includes(layerID)) map.current.moveLayer(layerID);\n availLayers\n .filter((layer) => layer !== layerID)\n .forEach((layer) => {\n map.current.moveLayer(layer);\n });\n\n layerOrder.forEach((layer) => {\n availLayers\n .filter((availLayer) => availLayer.includes(layer))\n .forEach((availLayer) => {\n map.current.moveLayer(availLayer);\n });\n });\n }\n }\n\n function getModelLayers() {\n if (map.current && cookiesCheckedRef.current) {\n return map.current\n .getStyle()\n .layers.filter((layer) => layer.id.startsWith('model_layer'))\n .reverse();\n }\n }\n\n function updateVectorAnimationLayer() {\n const { isVector, vectorSpeed, modelLongName } = mapLayers.find(\n (e) => e.variableName === selectedVariableNameRef.current\n );\n\n if (!isVector || !tileTimesLookupRef.current) return;\n\n vectorFieldRef?.current?.stopAnimation();\n vectorFieldCIOPSWest?.current?.stopAnimation();\n const range = [vectorSpeed * -200, vectorSpeed * 200];\n\n const bounds = models[modelLongName].bounds;\n\n const { tileName, modelRun } = getTileName(\n modelLongName,\n dateTimeRef.current,\n tileTimesLookupRef.current,\n selectedVariableNameRef.current\n );\n const url = `${tilesURLPrefix}/${modelLongName}/${modelRun}/${selectedVariableNameRef.current}/${tileName}/${tileName}.webp`;\n const isCurrents = selectedVariableNameRef.current === 'current' ? 1 : 0;\n let customLayer;\n\n // CIOPS-West isn't requested explicitly, it comes with CIOPS-SalishSea\n const isCIOPSWest = false;\n\n VectorImage(url, bounds, range)\n .then((vectorData) => {\n customLayer = {\n id: 'vectorField',\n type: 'custom',\n onAdd: function (map, gl) {\n if (vectorFieldRef.current) {\n vectorFieldRef.current.stopAnimation();\n }\n // create new VectorField instance\n vectorFieldRef.current = VectorField(map, gl);\n // set data for vector field\n vectorFieldRef.current.setData(vectorData, selectedVariableNameRef.current);\n },\n render: function (gl, matrix) {\n // on Custom Layer render, draw the vector field\n vectorFieldRef.current.draw(isCIOPSWest, isCurrents);\n },\n renderingMode: '3d',\n };\n\n if (map.current.getLayer('vectorField')) map.current.removeLayer('vectorField');\n map.current.addLayer(customLayer, 'landbase');\n })\n .catch((e) => {\n console.error(e);\n });\n\n if (modelLongName === 'CIOPS-SalishSea') {\n // If we have just added CIOPS-SalishSea, add CIOPS-West now\n const isCIOPSWest = true;\n\n const bounds = models['CIOPS-West'].bounds;\n const westURL = url.replace(/SalishSea/g, 'West');\n VectorImage(westURL, bounds, range)\n .then((vectorData) => {\n customLayer = {\n id: 'vectorFieldCIOPSWest',\n type: 'custom',\n onAdd: function (map, gl) {\n // remove any existing vector field\n if (vectorFieldCIOPSWest.current) {\n vectorFieldCIOPSWest.current.stopAnimation();\n }\n\n // create new VectorField instance\n vectorFieldCIOPSWest.current = VectorField(map, gl);\n // set data for vector field\n vectorFieldCIOPSWest.current.setData(\n vectorData,\n selectedVariableNameRef.current\n );\n },\n render: function (gl, matrix) {\n // on Custom Layer render, draw the vector field\n vectorFieldCIOPSWest.current.draw(isCIOPSWest, isCurrents);\n },\n renderingMode: '3d',\n };\n\n if (map.current.getLayer('vectorFieldCIOPSWest'))\n map.current.removeLayer('vectorFieldCIOPSWest');\n map.current.addLayer(customLayer, 'landbase');\n })\n .catch((e) => {\n console.error(e);\n });\n }\n }\n\n useEffect(() => {\n if (!dataPanelOpen && !webcamDialogOpen) {\n clearSelectedStations();\n selectedStationIDRef.current = undefined;\n }\n }, [dataPanelOpen, webcamDialogOpen]);\n\n useEffect(() => {\n if (map.current && zoomRef.current === undefined && zoom !== false) {\n map.current.setZoom(zoom);\n zoomRef.current = zoom;\n }\n }, [zoom]);\n\n useEffect(() => {\n if (mapLayerMaxTimes) {\n isInsideEndOfDataRef.current =\n sliderCurrentTime <=\n new Date(mapLayerMaxTimes[selectedVariableName]).getTime() + 1000 * 60 * 60;\n }\n updateCrossHair();\n }, [mapLayerMaxTimes, sliderCurrentTime, selectedVariableName]);\n\n const oldTime = useRef();\n const oldVariable = useRef();\n\n useEffect(() => {\n const selectedVariableChanged = oldVariable.current !== selectedVariableName;\n if (selectedVariableChanged) {\n oldVariable.current = selectedVariableName;\n }\n\n const dateTimeChanged =\n oldTime.current !== generateDateTime(new Date(sliderCurrentTime));\n if (dateTimeChanged) {\n oldTime.current = generateDateTime(new Date(sliderCurrentTime));\n }\n const updateMap = selectedVariableChanged || dateTimeChanged;\n selectedVariableNameRef.current = selectedVariableName;\n\n if (map.current && updateMap) {\n let updateCalled = false; // ensure that updateMapWithLayer is only called once\n\n const updateMapWithLayer = () => {\n modelLayersRef.current = getModelLayers();\n updateMapLayerStyle();\n updateMapLayerSource();\n cleanUpMapLayers();\n reorderLayers();\n updateCalled = true;\n };\n\n if (map.current.isStyleLoaded()) {\n updateMapWithLayer();\n }\n // this was running on initail load but should only run on subsequent loads (when layers change quickly).\n else if (initialLoad.current) {\n if (!updateCalled) updateMapWithLayer();\n }\n }\n\n if (useCrosshairRef.current && !dataPanelOpen) {\n updateCrossHair();\n }\n }, [selectedVariableName, sliderCurrentTime]);\n\n useEffect(() => {\n if (!map.current) return;\n if (selectedStation || useCrosshairRef.current) {\n // if a station is selected, then zoom to that\n easeMapTo(flyToCoords[0], flyToCoords[1]);\n } else {\n // otherwise, zoom to the marker\n setMarker(flyToCoords[1], flyToCoords[0]);\n }\n }, [flyToCoords]);\n\n function updateCrossHair() {\n if (map.current) {\n const crosshairXY = new Point(window.innerWidth / 2, window.innerHeight / 2);\n\n const landOrWater = checkLandOrWater(map.current, crosshairXY);\n setLandOrWater(landOrWater);\n const centerLngLat = map.current.unproject(crosshairXY);\n setPointLocations([centerLngLat.lat, centerLngLat.lng]);\n }\n }\n\n function handleMapInteractionStart() {\n setMapPanned(true);\n if (vectorFieldRef?.current) {\n // stop animation and clear canvas\n vectorFieldRef.current.stopAnimation();\n }\n if (vectorFieldCIOPSWest?.current) {\n // stop animation and clear canvas\n vectorFieldCIOPSWest.current.stopAnimation();\n }\n }\n\n function handleMapInteractionEnd() {\n setMapPanned(false);\n setMapCenterPoint([map.current.getCenter().lng, map.current.getCenter().lat]);\n if (\n useCrosshairRef.current &&\n typeof selectedStationIDRef.current !== 'number' &&\n !selectedStationIDRef.current !== undefined\n ) {\n updateCrossHair();\n }\n if (vectorFieldRef?.current) {\n // start animating again\n vectorFieldRef.current.startAnimation(map.current);\n }\n if (vectorFieldCIOPSWest?.current) {\n // start animating again\n vectorFieldCIOPSWest.current.startAnimation(map.current);\n }\n }\n\n // Depends on map existing\n function addMapBackground() {\n if (\n map.current &&\n !map.current.hasImage('noDataPattern') &&\n map.current.getLayer('background') === undefined\n ) {\n map.current.loadImage(NoDataPattern, (err, image) => {\n // Throw an error if something goes wrong.\n if (err) throw err;\n\n // Add the image to the map style.\n if (!map.current.hasImage('noDataPattern')) {\n map.current.addImage('noDataPattern', image);\n const layers = map.current.getStyle().layers;\n // Create a new layer and style it using `fill-pattern`.\n map.current.addLayer(\n {\n id: 'background',\n type: 'background',\n paint: {\n 'background-pattern': 'noDataPattern',\n },\n },\n layers[0].id\n );\n }\n });\n }\n }\n\n const listenerAddedRef = useRef(false);\n\n useEffect(() => {\n // This is run first and adds the styles and sources\n // Also runs on play\n if (\n tileTimesLookupRef.current &&\n dateTimeRef.current &&\n !listenerAddedRef.current &&\n mapStyleLoaded\n ) {\n updateMapLayerStyle();\n updateMapLayerSource();\n const handleResize = () => {\n if (showAnimationsRef.current && isInsideEndOfDataRef.current) {\n updateVectorAnimationLayer();\n }\n };\n\n window.addEventListener('resize', handleResize);\n\n // Set the ref to true to indicate that the listener has been added\n listenerAddedRef.current = true;\n\n // Clean up the event listener when the component unmounts or when tileTimesLookup or dateTime changes\n return () => {\n window.removeEventListener('resize', handleResize);\n listenerAddedRef.current = false; // Reset the ref so the listener can be added again\n };\n }\n }, [tileTimesLookup, dateTimeRef.current, selectedVariableName, mapStyleLoaded]);\n\n function cleanUpMapLayers() {\n if (map.current && map.current.isStyleLoaded() && cookiesCheckedRef.current) {\n if (modelLayersRef.current && modelLayersRef.current.length > 1) {\n const isIncluded = CIOPSWestVariables.includes(selectedVariableNameRef.current);\n\n modelLayersRef.current.forEach((layer, index) => {\n if ((isIncluded && index >= 2) || (!isIncluded && index >= 1)) {\n removeLayers([layer]);\n }\n });\n }\n if (\n map.current &&\n mapLayerMaxTimes &&\n selectedVariableNameRef.current &&\n !isInsideEndOfDataRef.current\n ) {\n modelLayersRef.current.forEach((layer) => {\n removeLayers([layer]);\n });\n removeAnimationLayers();\n }\n }\n }\n\n // Depends on map existing, on styles being loaded, and cookies being checked\n // Depends on external refs: map, cookiesCheckedRef, selectedVariableNameRef,\n function updateMapLayerStyle() {\n if (map.current && cookiesCheckedRef.current) {\n const isFullMapLayer = ['wind', 'airTemperature'].includes(\n selectedVariableNameRef.current\n );\n map?.current?.getStyle().layers.forEach((layer) => {\n if (layer.id === 'waterway') {\n map.current.setLayoutProperty(layer.id, 'visibility', 'none');\n } else if (\n layer.id === 'landbase' ||\n layer.id === 'landbase lowZoom' ||\n layer.id === 'building' ||\n layer.id === 'land-structure-line' ||\n layer.id === 'land-structure-polygon'\n ) {\n map.current.setLayoutProperty(\n layer.id,\n 'visibility',\n isFullMapLayer ? 'none' : 'visible'\n );\n } else if (layer.id.includes('label')) {\n if (layer.id.includes('water')) {\n map.current.setPaintProperty(layer.id, 'text-halo-width', 1.5);\n map.current.setPaintProperty(layer.id, 'text-halo-color', 'white');\n map.current.setPaintProperty(layer.id, 'text-halo-blur', 2);\n map.current.setPaintProperty(layer.id, 'text-color', 'black');\n } else {\n map.current.setPaintProperty(\n layer.id,\n 'text-halo-width',\n isFullMapLayer ? 1 : 0\n );\n map.current.setPaintProperty(layer.id, 'text-halo-blur', 2);\n map.current.setPaintProperty(layer.id, 'text-halo-color', 'black');\n map.current.setPaintProperty(layer.id, 'text-color', 'white');\n }\n } else if (\n layer.id.includes('boundary') ||\n layer.id.includes('bridge') ||\n layer.id.includes('road') ||\n layer.id.includes('tunnel')\n ) {\n map.current.setPaintProperty(\n layer.id,\n 'line-color',\n isFullMapLayer ? 'black' : '#9ca7ab'\n );\n } else if (\n layer.id === 'landbaseOutline' ||\n layer.id === 'landbaseOutline lowZoom'\n ) {\n map.current.setLayoutProperty(layer.id, 'visibility', 'visible');\n }\n });\n }\n }\n\n function removeAnimationLayers() {\n if (map.current.getLayer('vectorField')) {\n map.current.removeLayer('vectorField');\n }\n if (map.current.getLayer('vectorFieldCIOPSWest')) {\n map.current.removeLayer('vectorFieldCIOPSWest');\n }\n }\n\n // Depends on map existing, on styles being loaded and cookies being checked\n // Depends on external refs: map, cookiesCheckedRef, selectedVariableNameRef, dateTime, tilesURLPrefix\n function updateMapLayerSource() {\n // Adding this here as modelLayersRef.current and getModelLayers() were getting out of sync when playing, resulting in extra layers being saved\n modelLayersRef.current = getModelLayers();\n if (\n map.current &&\n cookiesCheckedRef.current &&\n tileTimesLookupRef.current &&\n (JSON.parse(localStorage.getItem('ocSelectedVariableName')) ===\n selectedVariableNameRef.current ||\n JSON.parse(localStorage.getItem('ocSelectedVariableName')) === null)\n ) {\n const { variableName, maxzoom, isVector, modelLongName } = mapLayers.find(\n (layer) => layer.variableName === selectedVariableNameRef.current\n );\n\n const variableAndTime = variableName + '_' + dateTimeRef.current;\n const sourceID = 'model_source_' + variableAndTime;\n const layerID = 'model_layer_' + variableAndTime;\n\n // detect varable change and remove old variable's layers\n if (\n map.current.modelVariable !== undefined &&\n map.current.modelVariable !== variableName &&\n modelLayersRef.current !== undefined &&\n modelLayersRef.current.length !== 0\n ) {\n map.current.modelVariable = variableName;\n removeLayers(modelLayersRef.current);\n reorderLayers();\n } else if (map.current.modelVariable === undefined) {\n // initial load, no need to remove old layer\n map.current.modelVariable = variableName;\n reorderLayers();\n }\n if (modelLayersRef.current && modelLayersRef.current.length >= 2) {\n const isIncluded = CIOPSWestVariables.includes(selectedVariableNameRef.current);\n modelLayersRef.current.forEach((layer, index) => {\n if ((isIncluded && index >= 6) || (!isIncluded && index >= 3)) {\n // keep an extra layer to prevent flashing (no data) on play. i.e. the new layers covers the old one\n removeLayers([layer]);\n }\n });\n }\n if (isInsideEndOfDataRef.current) {\n if (!map.current.getSource(sourceID)) {\n const { tileName, modelRun } = getTileName(\n modelLongName,\n dateTimeRef.current,\n tileTimesLookupRef.current,\n selectedVariableNameRef.current\n );\n\n const tileURL = `${tilesURLPrefix}/${modelLongName}/${modelRun}/${selectedVariableNameRef.current}/${tileName}/{z}/{x}/{y}.webp`;\n // if this is CIOPS, get the West version as well\n let tileURLWest;\n if (modelLongName === 'CIOPS-SalishSea') {\n tileURLWest = tileURL.replace(/SalishSea/g, 'West');\n }\n\n // sourceID doesn't exist, so add\n map.current.addSource(sourceID, {\n type: 'raster',\n tiles: [tileURL],\n maxzoom,\n });\n loadingSourceRef.current = sourceID;\n if (tileURLWest) {\n const westSourceID = sourceID + 'West';\n const westLayerID = layerID + 'West';\n\n map.current.addSource(westSourceID, {\n type: 'raster',\n tiles: [tileURLWest],\n maxzoom,\n });\n loadingSourceWestRef.current = westSourceID;\n map.current.addLayer(\n {\n id: westLayerID,\n type: 'raster',\n source: westSourceID,\n },\n 'landbase'\n );\n }\n\n map.current.addLayer(\n {\n id: layerID,\n type: 'raster',\n source: sourceID,\n },\n 'landbase'\n );\n }\n // update animation layer if isVector and showAnimations\n if (isVector && showAnimationsRef.current) {\n updateVectorAnimationLayer();\n } else {\n removeAnimationLayers();\n }\n } else if (modelLayersRef.current && modelLayersRef.current.length !== 0) {\n removeLayers(modelLayersRef.current);\n removeAnimationLayers();\n }\n }\n }\n\n /*\n The map lifecycle is very complex.\n Initial load (in no order):\n - map is created\n - map background is added\n - cookies are read in App.jsx and passed in\n - map is styled based on cookie value\n - either default map layer is added, or cookie map layers are added\n\n On variable change (in no order):\n - map layers updated\n - map style updated\n\n On time change:\n - map layers updated\n - if: past end of data, remove layers\n - else: update layers\n\n There are situations where we are waiting on mutliple things to happen\n before we can call some functions.\n\n This means that there are times when we will be calling functions with and \n without the preconditions being met, so functions must handle incorrect state.\n\n It also means that we must trigger the entire map render process from multiple locations\n because there are multiple pathways to the desired outcome. \n\n Therefore, we both want to call the entire process from multiple triggers,\n but we also need to have the process broken out into smaller functions so that\n we can call portions of the process for the variable-change based triggers.\n \n Additional considerations:\n - because the map's functions are scoped to the context of when they are initialized,\n and do not read in parameters which change, variables that are going to change and be read\n must be stored in refs, and then read from the refs in the functions. This means that we must\n use useEffect to update the refs when the variables change so that the new values are available\n for use inside the functions. This is a major source of complexity in the map component, but \n is an appropriate use of refs and useEffect in the mapbox-gl library.\n - In practice it is worth noting that this means that a lot of our functions are not pure,\n they do not take in clear parameters and return a value, but instead read from refs and write to refs,\n and also cause side effects. This is a necessary evil in the context of the mapbox-gl library.\n - It also means that functions that are going to be called by event handlers and also from \n regular functions must utilize the ref version of a variable because they will need that context \n when called from the event handler. Our most important lifecycle functions are called from event handlers,\n and so the ref pattern is necessary.\n */\n\n const loadingSourceRef = useRef(false);\n const loadingSourceWestRef = useRef(false);\n\n useEffect(() => {\n map.current = new mapboxgl.Map({\n container: mapContainer.current,\n style: 'mapbox://styles/hakai/cltdijsxg00pc01o890vmb1bx', // stylesheet location\n center: [-123.3, 49], // starting position [lng, lat]\n zoom: 6.75, // starting zoom\n projection: 'mercator',\n cluster: true,\n minZoom: 4.5,\n renderWorldCopies: false,\n attributionControl: false,\n });\n\n map.current.on('load', () => {\n const server =\n process.env.API_URL ||\n 'https://a0t6h1frq6.execute-api.us-east-1.amazonaws.com/dev';\n // console\n const scale = new mapboxgl.ScaleControl({\n maxWidth: 55,\n unit: settings.units.scale,\n });\n\n map.current.addControl(scale, 'bottom-left');\n\n const SSVStationsAPI = '/stations/list/';\n\n stationTypes.forEach(({ type: symbolName, icon }) => {\n map.current.loadImage(stationIcons[symbolName], (error, image) => {\n if (error) throw error;\n // check if this image already exists\n if (!map.current.hasImage(`${symbolName}Icon`))\n map.current.addImage(`${symbolName}Icon`, image, { sdf: true });\n });\n });\n // const symbolName='All'\n // const symbolPath = icon;\n // const url = `${server}${SSVStationsAPI}all`;\n // const symbolData =\n // console.log('adding source for ', symbolName);\n\n // for each station type, fetch to api for that type, combine all with prmomise.all\n const allStations = [];\n const allStationPromises = stationTypes.map(({ type: symbolName }) => {\n const url = `${server}${SSVStationsAPI}${symbolName}`;\n return fetch(url);\n });\n // then get the geojson for each station\n Promise.all(allStationPromises)\n .then((responses) => {\n return Promise.all(responses.map((response) => response.json()));\n })\n .then((stationData) => {\n stationData.forEach((data) => {\n allStations.push(...data.features);\n });\n const geojson = {\n type: 'FeatureCollection',\n\n features: allStations,\n };\n\n map.current.addSource(`AllStationsSource-zoomed`, {\n type: 'geojson',\n data: geojson,\n generateId: true,\n cluster: true,\n clusterRadius: 35,\n minzoom: stationsShowZoomLevel,\n });\n\n map.current.addLayer({\n id: `AllStationsCircleLayer-zoomed`,\n\n type: 'circle',\n source: `AllStationsSource-zoomed`,\n layout: {\n visibility: 'none',\n },\n filter: ['!', ['has', 'point_count']],\n paint: {\n 'circle-radius': 15,\n 'circle-color': [\n 'case',\n ['boolean', ['feature-state', 'click'], false],\n // theme.palette.icons[symbolName].light,\n 'red',\n theme.palette.secondary.main,\n ],\n 'circle-stroke-width': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n 4,\n ['boolean', ['feature-state', 'click'], false],\n 4,\n 2,\n ],\n 'circle-stroke-color': theme.palette.primary.main,\n },\n });\n\n map.current.addLayer({\n id: `AllStationsIconLayer-zoomed`,\n type: 'symbol',\n source: `AllStationsSource-zoomed`,\n layout: {\n visibility: 'none',\n 'icon-image': ['concat', ['get', 'type'], 'Icon'],\n 'icon-size': 0.5,\n 'icon-allow-overlap': true,\n },\n paint: {\n 'icon-color': theme.palette.primary.main,\n },\n filter: ['!', ['has', 'point_count']],\n });\n map.current.addLayer({\n id: `AllStationsClusterLayer-zoomed`,\n type: 'circle',\n source: `AllStationsSource-zoomed`,\n layout: {\n visibility: 'none',\n },\n filter: ['has', 'point_count'],\n paint: {\n 'circle-radius': ['step', ['get', 'point_count'], 18, 5, 20, 10, 22],\n 'circle-color': [\n 'case',\n ['boolean', ['feature-state', 'click'], false],\n theme.palette.icons.webcams.light,\n // 'red',\n theme.palette.secondary.main,\n ],\n 'circle-stroke-width': [\n 'case',\n ['boolean', ['feature-state', 'hover'], false],\n 4,\n ['boolean', ['feature-state', 'click'], false],\n 4,\n 2,\n ],\n 'circle-stroke-color': theme.palette.primary.main,\n },\n });\n\n map.current.addLayer({\n id: `AllStationsClusterCountLayer-zoomed`,\n type: 'symbol',\n source: `AllStationsSource-zoomed`,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': ['get', 'point_count_abbreviated'],\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n visibility: 'none',\n },\n });\n // });\n\n map.current.on('click', `AllStationsClusterLayer-zoomed`, (e) => {\n if (!useCrosshairRef.current) clearMarkers();\n\n const features = map.current.queryRenderedFeatures(e.point, {\n layers: [`AllStationsClusterLayer-zoomed`],\n });\n const clusterId = features[0].properties.cluster_id;\n\n map.current\n .getSource(`AllStationsSource-zoomed`)\n .getClusterExpansionZoom(clusterId, (err, zoom) => {\n if (err) return;\n\n map.current.easeTo({\n center: features[0].geometry.coordinates,\n zoom,\n });\n });\n });\n });\n updateCrossHair();\n });\n map.current.addControl(\n new mapboxgl.AttributionControl({ compact: true }),\n 'bottom-right'\n );\n\n window.addEventListener('resize', () => {\n if (showAnimationsRef.current) {\n updateVectorAnimationLayer();\n }\n });\n\n // disable map tilting using two-finger gesture\n map.current.touchPitch.disable();\n\n // disable map rotation using right click + drag\n map.current.dragRotate.disable();\n\n // disable map rotation using touch rotation gesture\n map.current.touchZoomRotate.disableRotation();\n\n map.current.setMaxBounds(defaultMaxBounds);\n\n map.current.once('load', () => {\n modelLayersRef.current = getModelLayers();\n addMapBackground();\n // There functions are probably meant to load the layers initiallly but they are being run after layers have already loaded, so removing\n // updateMapLayerStyle();\n // updateMapLayerSource();\n // cleanUpMapLayers();\n // reorderLayers();\n\n addStationEventHandlers();\n\n map.current.on('click', (event) => {\n setLandOrWater(checkLandOrWater(map.current, event.point));\n setMapCenterPoint([event.lngLat.lng, event.lngLat.lat]);\n if (useCrosshairRef.current) {\n easeMapTo(event.lngLat.lng, event.lngLat.lat);\n } else {\n setPointLocations([event.lngLat.lat, event.lngLat.lng]);\n if (!event.clickOnLayer) {\n // click on open map\n setMarker(event.lngLat.lat, event.lngLat.lng);\n clearSelectedStations();\n }\n }\n });\n initialLoad.current = true;\n });\n\n map.current.on('zoomstart', () => {\n handleMapInteractionStart();\n return () => {\n map.off('zoomstart');\n };\n });\n\n map.current.on('zoomend', () => {\n setZoom(map.current.getZoom());\n handleMapInteractionEnd();\n return () => {\n map.off('zoomend');\n };\n });\n\n map.current.on('movestart', () => {\n handleMapInteractionStart();\n return () => {\n map.off('movestart');\n };\n });\n\n map.current.on('moveend', () => {\n handleMapInteractionEnd();\n return () => {\n map.off('moveend');\n };\n });\n\n map.current.on('sourcedata', (e) => {\n if (e.sourceId === loadingSourceRef.current && e.isSourceLoaded) {\n if (!loadingSourceWestRef.current) {\n setMapDataLoaded(true);\n }\n loadingSourceRef.current = undefined;\n } else if (e.sourceId === loadingSourceWestRef.current && e.isSourceLoaded) {\n if (!loadingSourceRef.current) {\n setMapDataLoaded(true);\n }\n loadingSourceWestRef.current = undefined;\n }\n });\n\n map.current.on('data', (e) => {\n if (map.current.isStyleLoaded()) {\n setMapStyleLoaded(true);\n }\n });\n }, []);\n\n return
;\n}\n","import React from 'react';\nimport { styled } from '@mui/material/styles';\n\nimport { Icon } from '@mui/material/';\n\nconst iHeight = '50px';\nconst iWidth = '25px';\nconst StyledMUIIcon = styled(Icon)(({ theme }) => ({\n height: '2em',\n width: 'fit-content',\n color: theme.palette.secondary.main,\n}));\n\nexport default function StyledIcon({\n filename,\n height = iHeight,\n width = iWidth,\n style = {},\n}) {\n if (filename) {\n return (\n \n \n \n );\n }\n}\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { scaleLinear, scaleTime } from 'd3-scale';\nimport {\n Box,\n Fab,\n Paper,\n Stack,\n Table,\n TableRow,\n TableCell,\n TableBody,\n useTheme,\n styled,\n Button,\n SvgIcon,\n Typography,\n useMediaQuery,\n} from '@mui/material/';\nimport { PlayArrow, Restore, Square } from '@mui/icons-material';\n\nimport {\n daysOfTheWeek,\n useInterval,\n useWindowSize,\n hexToRgb,\n formatAMPM,\n generateDateTime,\n isSameDaySameHour,\n server,\n getVariableTimeseriesData,\n getPacificTime,\n} from '../../utilities';\nimport { useDraggable } from 'react-use-draggable-scroll';\nimport './styles.css';\nimport axios from 'axios';\nexport default function TimeSlider({\n sliderCurrentTime,\n setSliderCurrentTime,\n sliderStartTime,\n stepsPerDay,\n numberOfDays,\n selectedMapLayer,\n pointLocations,\n selectedStation,\n mapLayerMaxTimes,\n settings,\n scrollTime,\n dataPanelOpen,\n dataPinDrawerShown,\n landOrWater,\n sliderPlayTime,\n setSliderPlayTime,\n}) {\n const theme = useTheme();\n const size = useWindowSize();\n const scrollRef = useRef();\n const tableRef = useRef();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n\n const { scale, isWaterVariable } = selectedMapLayer;\n const dataGradient = scaleLinear()\n .domain(scale.map((step) => step.value))\n .range(scale.map((step) => step.color))\n .unknown('#000000');\n const [dataColorScale, setDataColorScale] = useState();\n\n const oldPointLocations = useRef();\n const oldSelectedMapLayer = useRef();\n const oldSettings = useRef();\n useEffect(() => {\n if (!mapLayerMaxTimes) return;\n\n if (isWaterVariable && landOrWater === 'land' && dataPinDrawerShown) {\n // use land/not land check\n generateMapLayerColorScales([]);\n } else if (!pointLocations || !dataPinDrawerShown || !settings.showColorStrip) {\n // If no point selected && we have mapLayerMaxTimes, show mapLayer end colorStrip on timeslider\n generateMapLayerColorScales(mapLayerMaxTimes);\n } else if (\n // If pointlocations, or selectedMapLayer changesgenerate new coloStrip\n dataPinDrawerShown &&\n (oldPointLocations.current !== pointLocations ||\n oldSelectedMapLayer.current?.variableName !== selectedMapLayer?.variableName ||\n oldSettings.current !== settings ||\n settings.useCrosshair)\n ) {\n oldPointLocations.current = pointLocations;\n oldSelectedMapLayer.current = selectedMapLayer;\n oldSettings.current = settings;\n if (pointLocations) {\n axios\n .get(\n server +\n '/datapin/timeseries?' +\n new URLSearchParams({\n field: selectedMapLayer.variableName,\n lat: pointLocations[0],\n lon: pointLocations[1],\n base: landOrWater,\n }).toString()\n )\n .then((response) => {\n generateDataColorScale(\n getVariableTimeseriesData(\n response.data.data.filter(\n (d) =>\n new Date(d.date) <=\n new Date(mapLayerMaxTimes[selectedMapLayer.variableName])\n ),\n selectedMapLayer?.variableName\n )\n );\n });\n }\n }\n }, [\n pointLocations,\n selectedMapLayer,\n mapLayerMaxTimes,\n settings.showColorStrip,\n dataPinDrawerShown,\n ]);\n\n const sliderEndDate = new Date(sliderStartTime);\n sliderEndDate.setDate(sliderEndDate.getDate() + 4);\n sliderEndDate.setHours(0, 0, 0, 0);\n const sliderEndTime = sliderEndDate.getTime();\n\n function generateMapLayerColorScales(data) {\n const mapLayerColorScale = [];\n for (let i = 0; i < numberOfDays * 24; i++) {\n mapLayerColorScale.push(\n new Date(sliderStartTime).getTime() + i * 60 * 60 * 1000 <=\n new Date(data[selectedMapLayer?.variableName]).getTime()\n ? theme.palette.primary.main\n : '#00000000'\n );\n }\n setDataColorScale(mapLayerColorScale);\n }\n\n function generateDataColorScale(data) {\n const dataInTimeframe = data.filter((elem) => {\n const elemTime = new Date(elem.date).getTime();\n return elemTime >= sliderStartTime && elemTime <= sliderEndTime;\n });\n const populatedHourlyTimeseriesData = [];\n for (let i = 0; i < numberOfDays * 24; i++) {\n const thisHoursData = dataInTimeframe.find((elem) => {\n return (\n new Date(sliderStartTime).getTime() + i * 60 * 60 * 1000 ===\n new Date(elem.date).getTime()\n );\n });\n\n populatedHourlyTimeseriesData.push(\n thisHoursData?.value?.toFixed(1)\n ? settings.showColorStrip\n ? dataGradient(thisHoursData.value)\n : theme.palette.primary.main\n : '#00000000'\n );\n }\n setDataColorScale(populatedHourlyTimeseriesData);\n }\n\n const { events } = useDraggable(scrollRef, {\n decayRate: 0, // instant stop\n });\n\n function handleSliderPlayTime() {\n window.clarity('event', 'Play button click');\n if (!sliderPlayTime) {\n if (sliderCurrentTime === sliderEndTime) {\n setSliderCurrentTime(sliderStartTime);\n }\n }\n setSliderPlayTime(!sliderPlayTime);\n }\n // https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n useInterval(\n () => {\n const timeStep = (1000 * 60 * 60) / 2; // 1 hour\n if (sliderCurrentTime === sliderEndTime) {\n setSliderCurrentTime(sliderStartTime);\n }\n function takeStep(newTime) {\n newTime = sliderCurrentTime + timeStep;\n setSliderCurrentTime(newTime);\n setScrollPosition(`${formatAMPM(new Date(newTime))}`);\n scrollRef.current.scrollLeft = timeframe.current(newTime);\n }\n if (\n sliderCurrentTime + timeStep <= sliderEndTime &&\n sliderCurrentTime <=\n new Date(mapLayerMaxTimes[selectedMapLayer?.variableName]).getTime()\n ) {\n takeStep(sliderCurrentTime + timeStep);\n } else {\n // finished\n takeStep(sliderEndTime);\n setSliderPlayTime(false);\n }\n },\n sliderPlayTime ? 500 : null\n );\n\n const StyledTableCell = styled(TableCell, {\n shouldForwardProp: (prop) => prop !== 'showBorder',\n })(({ showBorder = true, theme }) => ({\n color: theme.palette.secondary.main,\n borderLeft: `2px solid ${theme.palette.secondary.main}${showBorder ? '80' : '00'}`,\n borderBottom: 'none',\n borderRight: `2px solid ${theme.palette.secondary.main}${showBorder ? '80' : '00'}`,\n }));\n\n const tableMinWidth = 1000;\n const [tableWidth, setTableWidth] = useState(window.innerWidth);\n const [scrollMax, setScrollMax] = useState(tableWidth);\n const [tableMargin, setTableMargin] = useState(200);\n const [scrollPosition, setScrollPosition] = useState('12 am');\n\n const daysInTimeframe = [];\n for (let index = 0; index < numberOfDays; index++) {\n const date = new Date(sliderStartTime);\n date.setDate(date.getDate() + index);\n daysInTimeframe.push({\n dayText: `${daysOfTheWeek[date.getDay()]}, ${date.getDate()}`,\n });\n }\n const timeframe = useRef(\n scaleTime()\n .domain([new Date(sliderStartTime), new Date(sliderEndTime)])\n .range([0, scrollMax])\n );\n\n function handleScroll() {\n scrollRef.current.scrollTop = 0;\n if (!sliderPlayTime) {\n if (scrollRef.current.scrollLeft > scrollMax) {\n scrollRef.current.scrollLeft = scrollMax;\n } else {\n const sliderTime = timeframe.current.invert(scrollRef.current.scrollLeft);\n setScrollPosition(`${formatAMPM(sliderTime)}`);\n const newSliderModelTime = generateDateTime(sliderTime);\n const oldSliderModelTime = generateDateTime(new Date(sliderCurrentTime));\n\n if (newSliderModelTime !== oldSliderModelTime) {\n setSliderCurrentTime(sliderTime.getTime());\n }\n }\n }\n\n window.clarity('event', 'Timeslider scroll');\n }\n\n function updateTimeSliderParameters() {\n if (scrollRef.current) {\n const tableWidthUpdate =\n window.innerWidth < tableMinWidth ? tableMinWidth + 50 : window.innerWidth; // 50px is total border width across the TimeSlider\n setTableWidth(tableWidthUpdate);\n setScrollMax(tableWidthUpdate);\n setTableMargin(scrollRef.current.offsetWidth / 2);\n timeframe.current.range([0, tableWidthUpdate]);\n const sliderTime = timeframe.current.invert(scrollRef.current.scrollLeft);\n setScrollPosition(`${formatAMPM(new Date(sliderTime))}`);\n\n scrollRef.current.scrollLeft = timeframe.current(sliderCurrentTime);\n }\n }\n\n useLayoutEffect(() => {\n updateTimeSliderParameters();\n }, [size]);\n\n function updateTimeSliderToMatchChartSlider() {\n scrollTime?.getMinutes() === 0 && scrollTime?.setMinutes(10);\n scrollRef.current.scrollLeft = timeframe.current(scrollTime);\n }\n\n useEffect(() => {\n if (scrollTime !== undefined && !mobileView) {\n updateTimeSliderToMatchChartSlider();\n }\n }, [scrollTime]);\n\n useEffect(() => {\n if (scrollTime !== undefined && mobileView && dataPanelOpen === false) {\n updateTimeSliderToMatchChartSlider();\n }\n }, [dataPanelOpen]);\n\n function handleResetTime() {\n scrollRef.current.scrollLeft = timeframe.current(\n new Date(getPacificTime()).getTime()\n );\n }\n\n const timesliderAtCurrentTime = isSameDaySameHour(\n sliderCurrentTime,\n new Date(getPacificTime()).getTime()\n );\n\n return (\n \n \n \n new Date(mapLayerMaxTimes[selectedMapLayer?.variableName]).getTime()\n }\n >\n \n {sliderPlayTime ? : }\n \n {/* {sliderPlayTime ? 'Pause' : 'Play'} */}\n \n \n \n \n \n {\n window.clarity('event', \"Timeslider 'go to now' click\");\n handleResetTime();\n }}\n >\n \n \n {scrollPosition}\n \n {!timesliderAtCurrentTime && (\n \n \n \n )}\n \n \n \n \n handleScroll()}\n ref={scrollRef}\n {...events}\n >\n \n \n \n {\n event.preventDefault();\n setSliderPlayTime(false);\n }}\n onTouchStart={() => setSliderPlayTime(false)}\n >\n \n \n {daysInTimeframe.map((day, index) => {\n return (\n \n {/* Background Box */}\n \n\n {/* Mid-day Tick */}\n \n\n {/* Content */}\n \n {`${day.dayText}`}\n \n \n );\n })}\n \n \n \n \n \n \n \n \n \n );\n}\n","import React, { useState } from 'react';\nimport {\n Grid,\n IconButton,\n Stack,\n TextField,\n Tooltip,\n Typography,\n useMediaQuery,\n useTheme,\n} from '@mui/material';\nimport axios from 'axios';\n\nimport { server } from '../utilities';\nimport { Send } from '@mui/icons-material';\n\nexport default function MailchimpForm({ signupMode }) {\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n const [email, setEmail] = useState('');\n const [previousEmail, setPreviousEmail] = useState('');\n const emailStates = [\n {\n state: 'empty',\n color: 'secondary',\n responseMessage: '',\n message: 'Please enter your preferred e-mail address.',\n },\n {\n state: 'sending',\n color: 'secondary',\n responseMessage: '',\n message: 'Sending...',\n },\n {\n state: 'emailSubmitted',\n color: 'secondary',\n responseMessage: 'thank you for subscribing',\n message: 'Thank you for subscribing!',\n },\n {\n state: 'emailError',\n color: theme.palette.warning.main,\n responseMessage: 'an unexpected internal error has occurred',\n message: 'An unexpected internal error has occurred.',\n },\n {\n state: 'emailSubmittedTooManyTimes',\n color: theme.palette.warning.main,\n responseMessage: 'has too many recent signup requests',\n message: 'Too many subscribe attempts for this email address',\n },\n {\n state: 'emailAlreadySubmitted',\n color: theme.palette.warning.main,\n responseMessage: 'already subscribed',\n message: 'This email is already subscribed to the newsletter.',\n },\n {\n state: 'emailInvalid',\n color: theme.palette.warning.main,\n responseMessage: 'please enter a valid email address',\n message: 'Please enter a valid email address.',\n },\n ];\n const [emailState, setEmailState] = useState(emailStates[0]);\n const regex = /^([\\w_\\.\\-\\+])+\\@([\\w\\-]+\\.)+([\\w]{2,10})+$/;\n\n function parseJsonpResponse(response) {\n // Split the response into separate JSONP responses\n const jsonpResponses = response.split(')__jp0(');\n\n // Remove the '__jp0(' at the beginning of the first response\n jsonpResponses[0] = jsonpResponses[0].replace(/^__jp0\\(/, '');\n\n // Remove the ')' at the end of the last response\n const lastIndex = jsonpResponses.length - 1;\n jsonpResponses[lastIndex] = jsonpResponses[lastIndex].replace(/\\)$/, '');\n\n // Parse each JSON string and return the resulting objects in an array\n const data = jsonpResponses.map((jsonStr) => {\n try {\n return JSON.parse(jsonStr);\n } catch (error) {\n console.error('Error parsing JSONP response:', error);\n }\n });\n\n return data;\n }\n\n function submitEmail() {\n setEmailState(emailStates[1]);\n axios\n .get(server + `/newsletter-subscribe?email=${email}`)\n .then((response) => {\n const data = parseJsonpResponse(response.data);\n const error = data.filter((item) => item.result === 'error');\n if (error.length > 0) {\n const errorType = error[0].msg;\n if (errorType.includes('already subscribed')) {\n setEmailState(emailStates[5]);\n } else if (\n errorType.includes('invalid') ||\n errorType.includes('email cannot be added to this list')\n ) {\n setEmailState(emailStates[6]);\n } else if (errorType.includes('many subscribe attempts')) {\n setEmailState(emailStates[4]);\n } else {\n setEmailState(emailStates[3]);\n }\n } else {\n if (data[0].result === 'success') {\n setEmailState(emailStates[2]);\n }\n }\n })\n .catch((error) => {\n console.error(error);\n setEmailState(emailStates[3]);\n });\n }\n\n function generateSubmitButton() {\n return (\n \n \n \n {\n setEmailState(emailStates[0]);\n submitEmail();\n setPreviousEmail(email);\n window.clarity(\n 'event',\n `Newsletter signup attempted. Mode: ${signupMode}`\n );\n }}\n sx={{\n color: theme.palette.secondary.main,\n backgroundColor: theme.palette.primary.light,\n textTransform: 'none',\n borderRadius: '25px',\n height: '38px',\n width: '84px',\n textAlign: 'center',\n paddingTop: '8px',\n border: '2px transparent solid',\n '&:hover': {\n border: `2px ${theme.palette.secondary.main} solid`,\n },\n '&:disabled': {\n backgroundColor: theme.palette.primary.dark,\n color: theme.palette.secondary.main,\n },\n }}\n variant=\"contained\"\n >\n \n \n Subscribe\n \n \n \n );\n }\n\n return (\n \n \n {\n setEmailState(emailStates[0]);\n setEmail(e.target.value);\n setPreviousEmail('');\n }}\n inputProps={{\n style: {\n color: theme.palette.secondary.main,\n padding: '15px 20px 10px 20px',\n width: '100%',\n textAlign: 'left',\n },\n }}\n />\n \n {!mobileView && generateSubmitButton()}\n \n \n {emailState.message}\n \n \n {mobileView && generateSubmitButton()}\n \n );\n}\n","import React, { useState } from 'react';\n\nimport {\n Dialog,\n List,\n ListItemText,\n ListItemButton,\n Toolbar,\n IconButton,\n Typography,\n Divider,\n Switch,\n useMediaQuery,\n useTheme,\n Radio,\n RadioGroup,\n FormControlLabel,\n FormControl,\n FormLabel,\n ListItem,\n Collapse,\n Box,\n Stack,\n Tooltip,\n styled,\n Link,\n Snackbar,\n} from '@mui/material/';\n\nimport {\n Launch,\n Close as CloseIcon,\n ExpandMore,\n ExpandLess,\n DeleteSweepRounded,\n RotateLeftRounded,\n Chat,\n InfoOutlined,\n CopyrightRounded,\n CheckCircle,\n Email,\n} from '@mui/icons-material';\nimport units from '../units.js';\nimport { capitalizeFirstLetter, defaultSettings } from '../utilities.js';\n\nimport ForecastOn from '../Images/forecastOn.png';\nimport ForecastOff from '../Images/forecastOff.png';\nimport Crosshair from '../Images/Crosshair.png';\nimport Marker from '../Images/Marker.png';\nimport AnimationOn from '../Images/AnimationOn.png';\nimport AnimationOff from '../Images/AnimationOff.png';\nimport colorDataEnabled from '../Images/colorDataEnabled.png';\nimport colorDataDisabled from '../Images/colorDataDisabled.png';\nimport Instagram from '../Images/Instagram_Glyph_White.svg';\nimport XLogo from '../Images/X-logo-white.svg';\nimport HakaiLogo from '../Images/HakaiLogo.png';\n\nimport MailchimpForm from './MailchimpForm.jsx';\n\nexport default function SettingsMenu({\n mainMenuOpen,\n setMainMenuOpen,\n setSettings,\n settings,\n cookieNames,\n}) {\n const theme = useTheme();\n\n const [unitsDrawerCollapsed, setUnitsDrawerCollapsed] = useState(true);\n const [forecastDrawerCollapsed, setForecastDrawerCollapsed] = useState(true);\n const [pointerDrawerCollpased, setPointerDrawerCollapsed] = useState(true);\n const [animationDrawerCollapsed, setAnimationDrawerCollapsed] = useState(true);\n const [colorDataDrawerCollapsed, setColorDataDrawerCollapsed] = useState(true);\n\n const uniq = (arr) => [...new Set(arr)];\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n\n const unitsCategories = uniq(units.map((e) => e.category));\n\n const logoNumber = ['03', '05', '07'];\n const [logoIndex, setLogoIndex] = useState(0);\n\n const SettingsSwitch = styled(Switch)(({ theme }) => ({\n '& .MuiSwitch-switchBase': {\n '&.Mui-checked': {\n '& .MuiSwitch-thumb': {\n backgroundColor: theme.palette.secondary.main,\n },\n '& + .MuiSwitch-track': {\n backgroundColor: theme.palette.primary.dark,\n opacity: 1,\n },\n },\n },\n '& .MuiSwitch-thumb': {\n backgroundColor: theme.palette.secondary.main,\n },\n '& .MuiSwitch-track': {\n backgroundColor: theme.palette.primary.dark,\n opacity: 1,\n },\n }));\n\n const [settingsResetSnackBarOpen, setSettingsResetSnackBarOpen] = useState(false);\n function settingsResetClick() {\n setSettingsResetSnackBarOpen(true);\n }\n function settingsResetClose() {\n setSettingsResetSnackBarOpen(false);\n }\n\n const [cookiesDeleteSnackBarOpen, setCookiesDeleteSnackBarOpen] = useState(false);\n function cookiesDeleteClick() {\n setCookiesDeleteSnackBarOpen(true);\n }\n function cookiesDeleteClose() {\n setCookiesDeleteSnackBarOpen(false);\n }\n\n function closeSettingsMenu() {\n setMainMenuOpen(false);\n setAnimationDrawerCollapsed(true);\n setColorDataDrawerCollapsed(true);\n setForecastDrawerCollapsed(true);\n setPointerDrawerCollapsed(true);\n setUnitsDrawerCollapsed(true);\n }\n\n return (\n reason === 'backdropClick' && closeSettingsMenu()}\n PaperProps={{\n style: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.secondary.main,\n },\n }}\n >\n \n \n Settings\n \n closeSettingsMenu()}\n aria-label=\"close\"\n >\n \n \n \n \n \n {\n setUnitsDrawerCollapsed(!unitsDrawerCollapsed);\n setForecastDrawerCollapsed(true);\n setPointerDrawerCollapsed(true);\n setAnimationDrawerCollapsed(true);\n setColorDataDrawerCollapsed(true);\n }}\n sx={{\n backgroundColor: unitsDrawerCollapsed\n ? theme.palette.primary.main\n : theme.palette.primary.light,\n }}\n >\n \n Units\n \n {unitsDrawerCollapsed ? : }\n \n \n \n \n {unitsCategories.map((category) => (\n \n \n \n \n {capitalizeFirstLetter(category)}\n \n \n {\n setSettings({\n ...settings,\n units: { ...settings.units, [category]: e.target.value },\n });\n }}\n name={category}\n value={settings.units[category]}\n >\n {units\n .filter((e) => e.category === category)\n .map((e) => (\n \n }\n label={e.display}\n />\n ))}\n \n \n \n ))}\n \n \n Set your preferred units here, or toggle units with the legend\n \n \n \n \n {\n setForecastDrawerCollapsed(!forecastDrawerCollapsed);\n setUnitsDrawerCollapsed(true);\n setPointerDrawerCollapsed(true);\n setAnimationDrawerCollapsed(true);\n setColorDataDrawerCollapsed(true);\n }}\n sx={{\n backgroundColor: forecastDrawerCollapsed\n ? theme.palette.primary.main\n : theme.palette.primary.light,\n }}\n >\n \n Forecast Bar\n \n {forecastDrawerCollapsed ? : }\n \n \n \n \n \n Hidden\n \n setSettings({ ...settings, showColorStrip: !settings.showColorStrip })\n }\n color=\"secondary\"\n />\n Shown\n \n \n \n \n \n \n Show or hide a forecast through time\n \n \n \n \n {\n setPointerDrawerCollapsed(!pointerDrawerCollpased);\n setUnitsDrawerCollapsed(true);\n setForecastDrawerCollapsed(true);\n setAnimationDrawerCollapsed(true);\n setColorDataDrawerCollapsed(true);\n }}\n sx={{\n backgroundColor: pointerDrawerCollpased\n ? theme.palette.primary.main\n : theme.palette.primary.light,\n }}\n >\n \n Pointer type\n \n {pointerDrawerCollpased ? : }\n \n \n \n \n \n Marker\n \n setSettings({\n ...settings,\n useCrosshair: !settings.useCrosshair,\n })\n }\n />\n Crosshair\n \n \n \n \n \n \n Use marker placement or crosshair position to access data\n \n \n \n \n {\n setAnimationDrawerCollapsed(!animationDrawerCollapsed);\n setForecastDrawerCollapsed(true);\n setUnitsDrawerCollapsed(true);\n setPointerDrawerCollapsed(true);\n setColorDataDrawerCollapsed(true);\n }}\n sx={{\n backgroundColor: animationDrawerCollapsed\n ? theme.palette.primary.main\n : theme.palette.primary.light,\n }}\n >\n \n Animations\n \n {animationDrawerCollapsed ? : }\n \n \n \n \n \n Animation off\n \n setSettings({\n ...settings,\n showAnimations: !settings.showAnimations,\n })\n }\n />\n Animation on\n \n \n \n \n \n \n Enable moving animations on map layers that support direction\n \n \n \n \n {\n setColorDataDrawerCollapsed(!colorDataDrawerCollapsed);\n setForecastDrawerCollapsed(true);\n setUnitsDrawerCollapsed(true);\n setPointerDrawerCollapsed(true);\n setAnimationDrawerCollapsed(true);\n }}\n sx={{\n backgroundColor: colorDataDrawerCollapsed\n ? theme.palette.primary.main\n : theme.palette.primary.light,\n }}\n >\n \n Color Data\n \n {colorDataDrawerCollapsed ? : }\n \n \n \n \n \n Disabled\n \n setSettings({ ...settings, colorData: !settings.colorData })\n }\n color=\"secondary\"\n />\n Enabled\n \n \n \n \n \n \n Enable or disable data values being colored. Colored data is outlined when\n contrast is low with background.\n \n \n \n \n \n \n Links\n \n \n \n \n \n \n Feedback and bug reports\n \n \n \n \n \n \n \n \n \n \n Data sources\n \n \n \n \n Privacy policy\n \n \n \n \n \n About the service\n \n \n \n \n \n \n Newsletter\n \n \n \n \n \n \n \n \n {\n setLogoIndex((logoIndex + 1) % 3);\n }}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {\n setSettings(defaultSettings);\n settingsResetClick();\n }}\n >\n \n \n \n Reset settings\n \n Settings reset\n \n \n }\n action={\n \n \n \n }\n ContentProps={{\n sx: {\n background: theme.palette.success.main,\n },\n }}\n />\n \n \n \n {\n cookieNames.forEach((cookieName) => {\n localStorage.removeItem(cookieName);\n });\n cookiesDeleteClick();\n }}\n >\n \n \n \n Delete cookies\n \n Cookies deleted\n \n \n }\n action={\n \n \n \n }\n ContentProps={{\n sx: {\n background: theme.palette.success.main,\n },\n }}\n />\n \n \n \n \n \n \n \n {' '}\n \n OceanConnect™\n {' '}\n by{' '}\n \n Tula Foundation\n {' '}\n is licensed under{' '}\n \n CC BY-NC-SA 4.0\n \n \n \n \n );\n}\n","import React, { useState, useMemo } from 'react';\nimport debounce from 'lodash.debounce';\nimport { capitalizeFirstLetter, roundLocation } from '../utilities';\n\nimport {\n Box,\n Dialog,\n List,\n ListItemText,\n ListItemButton,\n IconButton,\n Divider,\n CircularProgress,\n Stack,\n useMediaQuery,\n useTheme,\n TextField,\n} from '@mui/material/';\n\nimport { Close as CloseIcon, Search } from '@mui/icons-material';\n\nexport default function SearchMenu({\n setSelectedMapElement,\n setSelectedStation,\n setflyToCoords,\n setPointLocations,\n searchOpen,\n setSearchOpen,\n}) {\n const theme = useTheme();\n\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n\n const [searchResults, setSearchResults] = useState([]);\n const [searchLoading, setSearchLoading] = useState(false);\n\n function generateCountryCode(countryCode) {\n switch (countryCode) {\n case 'US':\n return 'USA';\n\n case 'CA':\n return 'CAN';\n\n default:\n return '';\n }\n }\n\n function handleSearchTextChange(searchText) {\n if (!searchText.length) return;\n\n setSearchLoading(true);\n\n const bbox = '-144.56,41.123,-122,60.19';\n const limit = 10;\n\n fetch(`https://photon.komoot.io/api/?q=${searchText}&bbox=${bbox}&limit=${limit}`)\n .then((res) => res.json())\n .then((data) => {\n return data.features.map(({ geometry, properties }) => ({\n lat: geometry.coordinates[0],\n lon: geometry.coordinates[1],\n properties,\n }));\n })\n .then((results) => {\n const placesParsed = results.map((place) => {\n const { lat, lon, properties } = place;\n let { name, osm_value: osmValue, countrycode, type } = properties;\n\n if (osmValue === 'unclassified') {\n osmValue = '';\n }\n\n if (type === 'house') {\n name = [properties.housenumber, properties.street].filter((e) => e).join(' ');\n }\n\n return {\n lat,\n lon,\n name,\n type: capitalizeFirstLetter(osmValue.replace('_', ' ')),\n country: generateCountryCode(countrycode),\n };\n });\n\n const filteredResults = [];\n function placeIsUnique(place) {\n let isUnique = true;\n if (filteredResults.length > 0) {\n filteredResults.forEach((p) => {\n if (\n place.name === p.name &&\n place.type === p.type &&\n place.country === p.country\n ) {\n isUnique = false;\n }\n });\n }\n return isUnique;\n }\n placesParsed.forEach((place) => {\n if (placeIsUnique(place)) {\n filteredResults.push(place);\n }\n });\n setSearchResults(filteredResults);\n setSearchLoading(false);\n });\n }\n\n const [searchString, setSearchString] = useState('');\n const debouncedHandleSearchTextChange = useMemo(\n () => debounce(handleSearchTextChange, 300),\n []\n );\n\n return (\n {\n setSearchResults([]);\n\n return reason === 'backdropClick' && setSearchOpen(false);\n }}\n PaperProps={{\n style: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.secondary.main,\n },\n }}\n >\n \n \n \n {\n setSearchResults([]);\n const { value } = e.target;\n debouncedHandleSearchTextChange(value);\n setSearchString(value);\n }}\n fullWidth\n color=\"primary\"\n autoFocus\n inputProps={{\n style: {\n color: theme.palette.secondary.main,\n height: '38px',\n padding: '2px',\n width: '100%',\n },\n }}\n sx={{ width: '100%', padding: '2px' }}\n />\n \n setSearchOpen(false)}>\n \n \n \n \n {searchLoading ? (\n \n \n \n ) : searchResults.length > 0 ? (\n \n {searchResults.map((place, index) => {\n const { lat, lon, name, type, country } = place;\n return (\n \n {\n setSelectedMapElement(place);\n setSelectedStation();\n setflyToCoords([lat, lon]);\n setPointLocations(roundLocation([lat, lon]));\n setSearchOpen(false);\n setSearchResults([]);\n setSearchString();\n }}\n >\n {name}\n {type}\n {country}\n \n \n \n );\n })}\n \n ) : (\n \n No search results found\n \n )}\n \n );\n}\n","import React from 'react';\n\nimport {\n Dialog,\n List,\n ListItemText,\n ListItemButton,\n ListItemIcon,\n Toolbar,\n IconButton,\n Typography,\n Divider,\n useMediaQuery,\n useTheme,\n} from '@mui/material/';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\nimport StyledIcon from './StyledIcon.jsx';\nimport mapLayers from '../mapLayers.js';\n\nexport default function VariableSelectMenu({\n variableSelectOpen,\n setVariableSelectOpen,\n setSelectedVariableName,\n selectedVariableName,\n}) {\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n\n return (\n reason === 'backdropClick' && setVariableSelectOpen(false)}\n PaperProps={{\n style: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.secondary.main,\n },\n }}\n >\n \n \n Conditions\n \n setVariableSelectOpen(false)}\n aria-label=\"close\"\n >\n \n \n \n \n \n {mapLayers.map((mapLayer, index) => {\n return (\n \n {\n window.clarity('event', 'Layer -> ' + mapLayer.displayName);\n setSelectedVariableName(mapLayer.variableName);\n setVariableSelectOpen(false);\n }}\n sx={{\n border:\n selectedVariableName === mapLayer.variableName && `2px solid white`,\n borderRadius: '10px',\n boxSizing: 'border-box',\n }}\n color=\"secondary\"\n >\n {mapLayer.displayName}\n \n \n \n \n \n \n );\n })}\n \n \n );\n}\n","import { Button, Skeleton, styled } from '@mui/material';\n\nexport const StyledDrawerVariableSwitchButton = styled(Button)(({ theme }) => ({\n height: '35px',\n width: '60px',\n minWidth: '40px',\n margin: 'auto 5px',\n color: 'white',\n borderRadius: '30px',\n}));\n\nexport const StyledDrawerHeaderButton = styled(Button)(({ theme }) => ({\n pointerEvents: 'auto',\n borderRadius: '30px',\n height: '30px',\n border: '2px solid #ffffff00',\n backgroundColor: `${theme.palette.primary.light}BF`,\n textTransform: 'none',\n}));\n\nexport const StyledSkeleton = styled(Skeleton)(({ theme }) => ({\n '::after': {\n background: 'linear-gradient(90deg, #ffffff00, #ffffff15, #ffffff00)',\n animation: 'animation-wiooy9 0.8s linear 0.0s infinite',\n },\n}));\n","import React from 'react';\nimport { Stack, Typography, useTheme } from '@mui/material';\nimport { ArrowUpward } from '@mui/icons-material';\nimport { colorContrasts, hexToRgb } from '../../utilities';\n\nexport default function DataElement({\n value,\n label,\n dataColor,\n units,\n direction,\n noData = false,\n variant,\n underlineUnits = true,\n backgroundColor,\n}) {\n const theme = useTheme();\n return (\n \n \n {direction !== undefined && !noData ? (\n \n ) : (\n \n {!noData ? value : 'No data'}\n \n )}\n {!noData && (\n \n {units}\n \n )}\n \n \n {label}\n \n \n );\n}\n","import React from 'react';\nimport { Box, LinearProgress } from '@mui/material';\n\nexport default function TideIndicator({\n maxTide,\n minTide,\n currentTide,\n height = '30px',\n width = '20px',\n}) {\n const VerticalLinearProgress = ({\n value,\n height = 30,\n width = 20,\n color = '#5cb6ff',\n }) => {\n return (\n \n \n \n );\n };\n\n const minMaxDifference = maxTide - minTide;\n let normCurrentTide = currentTide - minTide;\n\n if (normCurrentTide <= 0) {\n normCurrentTide = minTide;\n } else if (normCurrentTide >= maxTide) {\n normCurrentTide = maxTide;\n }\n\n const currentTidePercent = (normCurrentTide / minMaxDifference) * 100;\n\n return (\n \n \n \n );\n}\n","import React from 'react';\nimport {\n Box,\n Button,\n CircularProgress,\n Fab,\n Grid,\n Stack,\n Typography,\n useTheme,\n} from '@mui/material';\nimport DataElement from './DataElement.jsx';\nimport {\n formatNumberGenerator,\n getArrowDirection,\n getNewUnits,\n hexToRgb,\n roundNumber,\n} from '../../utilities';\nimport mapLayers from '../../mapLayers.js';\nimport { scaleLinear } from 'd3-scale';\nimport { ArrowUpward, Style, Close, SsidChartRounded } from '@mui/icons-material';\nimport TideIndicator from '../TideIndicator.jsx';\nimport { StyledSkeleton } from '../StyledComponents.jsx';\n\nexport default function DataElementStrip({\n selectedVariableName,\n variableData,\n dataLoading = false,\n changeUnits,\n minTide,\n maxTide,\n settings,\n width,\n useDataColor = false,\n backgroundColor,\n setDataPanelOpen,\n showForecastButton: isDataDrawer,\n noDataReason,\n}) {\n const theme = useTheme();\n\n const { high, value, low, direction, gust, period, change } = variableData;\n\n const selectedMapLayer = mapLayers.find((e) => e.variableName === selectedVariableName);\n const { displayUnits, name: unitsSelected } = getNewUnits(\n selectedMapLayer.unit,\n settings.units\n );\n\n const arrowDirection = getArrowDirection(selectedVariableName, direction);\n\n const selectedMapVar = mapLayers.find((e) => e.variableName === selectedVariableName);\n const { scale } = selectedMapVar;\n let dataGradient;\n if (settings.colorData && useDataColor) {\n dataGradient = scaleLinear()\n .domain(scale.map((step) => step.value))\n .range(scale.map((step) => step.color))\n .clamp(true)\n .unknown(`rgb(${hexToRgb(theme.palette.secondary.main)})`);\n } else {\n dataGradient = () => `rgb(${hexToRgb(backgroundColor)})`;\n }\n\n const formatNumber = formatNumberGenerator(unitsSelected);\n\n const hasData = value !== undefined && value !== null && !isNaN(value);\n const hasGusts = gust !== undefined && gust !== null && !isNaN(gust);\n const hasPeriod = period !== undefined && period !== null && !isNaN(period);\n\n // Define consistent container styles\n const containerStyles = {\n width,\n paddingTop: '2px',\n paddingRight: '2px',\n minHeight: '70px', // Set a consistent minimum height\n height: '100%',\n };\n\n const gridContainerStyles = {\n height: '100%',\n minHeight: '70px', // Match the container minimum height\n display: 'flex',\n alignItems: 'center',\n };\n\n let dataElement1, dataElement2, dataElement3;\n switch (selectedVariableName) {\n case 'potentialTemperature':\n dataElement1 = (\n \n );\n dataElement2 = (\n \n );\n dataElement3 = (\n \n );\n break;\n\n case 'wave':\n dataElement1 = (\n \n );\n dataElement2 = (\n \n );\n dataElement3 = (\n \n );\n break;\n\n case 'airTemperature':\n dataElement1 = (\n \n );\n dataElement2 = (\n \n );\n dataElement3 = (\n \n );\n break;\n\n case 'current':\n dataElement1 = (\n \n );\n dataElement2 = (\n \n );\n break;\n\n case 'wind':\n dataElement1 = (\n \n );\n dataElement2 = (\n \n );\n dataElement3 = (\n \n );\n break;\n\n case 'seaSurfaceHeight':\n dataElement1 = ;\n dataElement2 = (\n \n );\n dataElement3 = (\n \n \n {dataLoading ? (\n \n \n \n ) : hasData &&\n maxTide !== undefined &&\n minTide !== undefined &&\n value !== undefined ? (\n \n ) : (\n \n No data\n \n )}\n \n \n tide level\n \n \n );\n break;\n\n default:\n break;\n }\n\n if (dataLoading) {\n return (\n \n \n \n \n \n \n \n );\n }\n\n if (!hasData) {\n let noDataReasonText;\n if (isDataDrawer) {\n noDataReasonText =\n noDataReason === 'location'\n ? selectedMapLayer.variableName === 'potentialTemperature'\n ? `No ${selectedMapLayer.displayNameShort.toLowerCase()} data at this location`\n : `No ${selectedMapLayer.displayName.toLowerCase()} data at this location`\n : `No ${selectedMapLayer.displayName.toLowerCase()} data at the selected time`;\n } else {\n noDataReasonText = 'No data';\n }\n\n return (\n \n \n \n \n {noDataReasonText}\n \n \n \n \n );\n }\n\n const valueButtonStyle = {\n textTransform: 'none',\n borderRadius: '5px',\n padding: '0px',\n width: '100%',\n height: '100%',\n minHeight: '100%',\n border: '2px solid #ffffff00',\n };\n\n return (\n \n \n \n changeUnits(selectedVariableName)}\n variant=\"text\"\n sx={valueButtonStyle}\n TouchRippleProps={{ style: { color: theme.palette.secondary.main } }}\n >\n {dataElement2}\n \n \n\n \n changeUnits(selectedVariableName)}\n variant=\"text\"\n sx={valueButtonStyle}\n TouchRippleProps={{ style: { color: theme.palette.secondary.main } }}\n disabled={\n !['potentialTemperature', 'airTemperature'].includes(selectedVariableName)\n }\n >\n {dataElement1}\n \n \n\n \n changeUnits(selectedVariableName)}\n variant=\"text\"\n sx={valueButtonStyle}\n TouchRippleProps={{ style: { color: theme.palette.secondary.main } }}\n disabled={\n !['potentialTemperature', 'airTemperature', 'wind'].includes(\n selectedVariableName\n )\n }\n >\n {dataElement3}\n \n \n\n {isDataDrawer && (\n {\n setDataPanelOpen(true);\n window.clarity('event', 'Charts open');\n }}\n >\n \n \n \n {selectedMapLayer.displayNameShort} Chart\n \n \n \n )}\n \n \n );\n}\n","import React from 'react';\n\nimport { Box, useMediaQuery, useTheme, Stack, Typography, Grid } from '@mui/material';\nimport mapLayers from '../../mapLayers.js';\n\nimport { ChevronLeft, ChevronRight } from '@mui/icons-material';\n\nimport { StyledDrawerVariableSwitchButton } from '../StyledComponents.jsx';\nimport DataElementStrip from './DataElementStrip.jsx';\nimport { truncateText } from '../../utilities';\nexport default function DataDrawer({\n selectedVariableName,\n setDataPinDrawerOpen,\n setDataPanelOpen,\n moveSelectedVariable,\n drawerData,\n settings,\n loadingDrawerData,\n changeUnits,\n dataDrawerHidden,\n setDataDrawerHidden,\n}) {\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n const { noDataReason } = drawerData;\n const { title: tideStationTitle } = drawerData[selectedVariableName] || {};\n\n const selectedMapVar = mapLayers.find((e) => e.variableName === selectedVariableName);\n const borderRadius = mobileView ? '0px' : '25px';\n\n return (\n 400 ? '0px 10px 0px 10px' : '0px 0px 0px 0px',\n // marginTop: mobileView ? '30px' : '40px',\n // maxWidth: '400px',\n left: '50%',\n transform: 'translate(-50%, 0px)',\n }}\n >\n {/* */}\n {!dataDrawerHidden && (\n \n \n {\n window.clarity('event', 'Expanded Drawer change variable');\n moveSelectedVariable('right');\n }}\n disabled={drawerData?.length === 1}\n elevation={5}\n >\n \n \n \n {tideStationTitle\n ? `Tides: ${truncateText(tideStationTitle, 15)}`\n : selectedMapVar.displayName}\n \n {\n window.clarity('event', 'Expanded Drawer change variable');\n moveSelectedVariable('left');\n }}\n disabled={drawerData?.length === 1}\n elevation={5}\n >\n \n \n \n \n \n \n \n )}\n \n \n\n {/* {!dataDrawerHidden &&\n \n }\n onClick={() => setDataPanelOpen(true)}\n >\n forecast\n \n } */}\n {/* \n : }\n onClick={() => setDataDrawerHidden(!dataDrawerHidden)}\n >\n {dataDrawerHidden ? \"show values\" : \"hide\"}\n \n */}\n \n \n \n );\n}\n","import React from 'react';\nimport { Stack, Grid, Box, Typography } from '@mui/material';\nimport { ArrowUpward } from '@mui/icons-material';\n\nimport { daysOfTheWeekShortName, getArrowDirection } from '../../utilities.js';\n\nfunction VariableInsightBottom({\n variableData,\n selectedVariableName,\n formatNumber,\n unit,\n}) {\n let arrowDirection;\n if (variableData?.secondary_direction !== undefined) {\n arrowDirection = getArrowDirection(\n selectedVariableName,\n variableData?.secondary_direction\n );\n }\n\n function generateSwellStack(variableData) {\n const hasData =\n !isNaN(variableData?.secondary_height) &&\n !isNaN(formatNumber(variableData?.secondary_height)) &&\n arrowDirection != null &&\n typeof arrowDirection === 'number' &&\n !isNaN(formatNumber(variableData?.secondary_period));\n return (\n \n \n Secondary swell:\n \n {hasData ? (\n <>\n \n \n {`${formatNumber(variableData?.secondary_height)} ${unit}`}\n \n \n \n \n {`${variableData?.secondary_period?.toFixed(0)}s`}\n \n \n \n \n \n \n ) : (\n \n no data\n \n )}\n \n );\n }\n return (\n \n {selectedVariableName === 'wave' ? <>{generateSwellStack(variableData)} : <>}\n \n );\n}\n\nexport default VariableInsightBottom;\n","import React, { useEffect, useState } from 'react';\nimport { Box, Stack, Typography, useTheme, useMediaQuery, Divider } from '@mui/material';\nimport mapLayers from '../../mapLayers.js';\nimport VariableInsightBottom from './VariableInsightsBottom.jsx';\n\nimport {\n formatAMPM,\n formatAMPMwithMinutes,\n getNewUnits,\n formatNumberGenerator,\n daysOfTheWeekShortName,\n truncateText,\n} from '../../utilities.js';\n\nimport clonedeep from 'lodash.clonedeep';\nimport DataElementStrip from '../DataDrawer/DataElementStrip.jsx';\n\nexport default function VariableInsights({\n selectedVariableName,\n scrollTime,\n varData,\n liveData,\n variableInsights,\n tideStationMetadata,\n formatHourMin,\n settings,\n selectedStation,\n drawerData,\n changeUnits,\n setDataPanelOpen,\n}) {\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n\n const { unit, displayName } = mapLayers.find(\n (e) => e.variableName === selectedVariableName\n );\n\n const scrollDate = new Date(scrollTime);\n const insightsData = variableInsights[selectedVariableName];\n\n const { displayUnits, name: unitsSelected } = getNewUnits(unit, settings.units);\n\n const formatNumber = formatNumberGenerator(unitsSelected);\n\n const yyymmdd =\n scrollDate.getFullYear() +\n '-' +\n ('0' + (scrollDate.getMonth() + 1)).slice(-2) +\n '-' +\n ('0' + scrollDate.getDate()).slice(-2);\n\n const [currentInsightsData, setCurrentInsightsData] = useState();\n\n useEffect(() => {\n if (\n selectedVariableName === 'seaSurfaceHeight' ||\n selectedVariableName === 'current'\n ) {\n setCurrentInsightsData(insightsData?.filter((d) => +new Date(d.date) > scrollDate));\n } else if (\n selectedVariableName === 'airTemperature' ||\n selectedVariableName === 'potentialTemperature'\n ) {\n setCurrentInsightsData(insightsData?.find((d) => d?.date === yyymmdd));\n }\n }, [selectedVariableName, scrollTime]);\n\n const variableData = clonedeep(varData);\n\n return (\n \n {\n <>\n \n \n \n }\n \n \n {selectedVariableName === 'seaSurfaceHeight'\n ? 'Tides: ' + truncateText(tideStationMetadata?.title, 25)\n : displayName}\n \n \n\n \n {selectedVariableName === 'wave' && !selectedStation && (\n <>\n \n \n \n \n \n )}\n \n \n );\n}\n","import React from 'react';\nimport mapLayers from '../../mapLayers';\nimport {\n Box,\n Button,\n Typography,\n Grid,\n Stack,\n useMediaQuery,\n useTheme,\n} from '@mui/material';\n\nimport { getNewUnits, formatNumberGenerator } from '../../utilities.js';\n\nexport default function DataGrid({\n data,\n variableNameSelected,\n setSelectedVariableName,\n variablesInPanel,\n settings,\n}) {\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n\n return (\n \n \n {data &&\n variablesInPanel.map((variableName, index) => {\n const { displayName, unit } = mapLayers.find(\n (e) => e.variableName === variableName\n );\n\n const { displayUnits, name: unitsSelected } = getNewUnits(\n unit,\n settings.units\n );\n const formatNumber = formatNumberGenerator(unitsSelected);\n const { value } = data[variableName] || {};\n return (\n \n \n {\n window.clarity('event', 'Datapanel change variable');\n setSelectedVariableName(variableName);\n }}\n >\n \n \n \n {isNaN(formatNumber(value)) ? 'no data' : formatNumber(value)}\n \n \n {value !== undefined && value !== null && displayUnits}\n \n \n \n {displayName.slice(0, 8)}\n \n \n \n \n \n );\n })}\n \n \n );\n}\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as d3 from 'd3';\nimport * as suncalc from 'suncalc';\nimport mapLayers from '../../mapLayers.js';\nimport { getNewUnits, getPacificTime } from '../../utilities.js';\n\nexport function getZoomLevel(isCurrentsOrTidesStation, mobileView, isStation) {\n return isStation && mobileView && isCurrentsOrTidesStation\n ? 8\n : isStation && mobileView\n ? 3\n : isStation && !mobileView && isCurrentsOrTidesStation\n ? 4\n : isStation && !mobileView\n ? 2\n : mobileView\n ? 6\n : 3;\n}\n\nexport function getSubVariableLabels(settings) {\n const labels = {\n airTemperature: { value: 'Temp.' },\n potentialTemperature: { value: 'Temp.' },\n seaSurfaceHeight: { value: 'Height' },\n current: {\n value: 'Current',\n direction: 'Direction',\n },\n wind: {\n value: 'Wind',\n direction: 'Direction',\n gust: 'Gusts',\n },\n wave: {\n value: 'Height',\n direction: 'Direction',\n period: 'Period (s)',\n },\n };\n Object.keys(labels).forEach((key) => {\n const { unit } = mapLayers.find((e) => e.variableName === key);\n const { displayUnits } = getNewUnits(unit, settings.units);\n labels[key].value += ' (' + displayUnits + ')';\n labels[key].gust += ' (' + displayUnits + ')';\n });\n\n return labels;\n}\n\nexport function makeDimensions(mobileView, chartWidth, chartHeight, subVariableLength) {\n const bottomOfPlot = mobileView ? 35 : 45;\n return {\n width: chartWidth,\n height: chartHeight,\n margin: {\n top: 10,\n right: 0,\n left: 0,\n bottom:\n subVariableLength === 1\n ? mobileView\n ? bottomOfPlot - 30\n : bottomOfPlot - 40\n : subVariableLength === 2\n ? mobileView\n ? bottomOfPlot + 5\n : bottomOfPlot - 5\n : mobileView\n ? bottomOfPlot + 25\n : bottomOfPlot + 15,\n yArrowPos:\n subVariableLength === 1\n ? bottomOfPlot + 25\n : subVariableLength === 2\n ? bottomOfPlot + 18\n : bottomOfPlot + 18,\n yTextPos:\n subVariableLength === 1\n ? bottomOfPlot + 8\n : subVariableLength === 2\n ? bottomOfPlot + 22\n : bottomOfPlot + 40,\n bottomOfPlot,\n },\n };\n}\n\nexport function lineGenerator(\n data,\n xAccessor,\n yAccessor,\n xScale,\n yScale,\n curveType = d3.curveNatural\n) {\n return d3\n .line()\n .defined((d) => {\n return !isNaN(d.value) && d.value != null;\n })\n .x((d) => xScale(xAccessor(d)))\n .y((d) => yScale(yAccessor(d)))\n .curve(curveType)(data);\n}\n\nexport function areaGenerator(\n data,\n xAccessor,\n yAccessor,\n xScale,\n yScale,\n variable,\n isCurrentsOrTidesStation,\n dimensions\n) {\n return d3\n .area()\n .defined((d) => !isNaN(yAccessor(d)) && yAccessor(d) != null)\n .curve(\n (variable === 'wave' || variable === 'seaSurfaceHeight' || variable === 'wind') &&\n d3.min(data, yAccessor) === 0\n ? d3.curveMonotoneX\n : d3.curveNatural\n )\n .x((d) => xScale(xAccessor(d)))\n .y0(\n isCurrentsOrTidesStation\n ? dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n : yScale(0)\n )\n .y1((d) => yScale(yAccessor(d)))(data);\n}\n\nexport function multiFormat(date) {\n const formatMillisecond = d3.timeFormat('.%L');\n const formatSecond = d3.timeFormat(':%S');\n const formatMinute = d3.timeFormat('%I:%M');\n const formatHour = d3.timeFormat('%-I %p');\n const formatDay = d3.timeFormat('%b %e');\n const formatWeek = d3.timeFormat('%A %e');\n const formatMonth = d3.timeFormat('%b %e');\n const formatYear = d3.timeFormat('%Y');\n\n return (\n d3.timeSecond(date) < date\n ? formatMillisecond\n : d3.timeMinute(date) < date\n ? formatSecond\n : d3.timeHour(date) < date\n ? formatMinute\n : d3.timeDay(date) < date\n ? formatHour\n : d3.timeMonth(date) < date\n ? d3.timeWeek(date) < date\n ? formatWeek\n : formatWeek\n : d3.timeYear(date) < date\n ? formatMonth\n : formatYear\n )(date);\n}\n\nexport function getSunData({ data, pointLocations }) {\n const formatYMD = d3.timeFormat('%Y-%m-%d');\n const alluniqdays = [...new Set(data.map((d) => formatYMD(new Date(d.date))))];\n\n const days = alluniqdays.map((d) => {\n d = new Date(d);\n d.setHours(d.getHours() + 12);\n return d;\n });\n return days\n .map((day) => ({\n day,\n sun: suncalc.getTimes(day, pointLocations[0], pointLocations[1]),\n }))\n .map(({ day, sun }) => {\n return {\n ...sun,\n day,\n localSunrise: new Date(sun.sunrise.getTime()),\n localSunset: new Date(sun.sunset.getTime()),\n localDawn: new Date(sun.dawn.getTime()),\n localDusk: new Date(sun.dusk.getTime()),\n };\n });\n}\n\nexport function normalizeDatasetTime(data) {\n const diffHourly = data.filter((d) => !d.isLive);\n const diff = diffHourly\n .filter((e, i) => i < diffHourly.length - 1)\n .map((d, i) => {\n return i === 0\n ? {\n difference: Math.floor((diffHourly[i + 1].date - d.date) / 1000 / 60),\n time: d.date,\n }\n : {\n difference: Math.floor((diffHourly[i + 1].date - d.date) / 1000 / 60),\n time: diffHourly[i + 1].date,\n };\n })\n .filter((d) => d.difference !== 0);\n\n const completeTimeSeries =\n diffHourly.length === 1\n ? []\n : d3.timeMinute\n .every(d3.min(diff, (d) => d.difference))\n .range(new Date(data[0].date), new Date(data[data.length - 1].date));\n\n completeTimeSeries.map((item) => {\n const adjustedDate = new Date(getPacificTime(item));\n return { adjustedDate };\n });\n // range is exlusive of the end time, so add it back\n completeTimeSeries.push(new Date(data[data.length - 1].date));\n const completeDataset = completeTimeSeries.map((d) => {\n const matched = data.find((f) => +f.date === +d);\n return matched === undefined\n ? {\n date: d,\n }\n : matched;\n });\n return completeDataset;\n}\n\nexport function pulse(circle) {\n (function repeat() {\n circle\n .transition()\n .duration(500)\n .attr('stroke-width', 0)\n .attr('stroke-opacity', 0)\n .transition()\n .duration(500)\n .attr('stroke-width', 0)\n .attr('stroke-opacity', 0.5)\n .transition()\n .duration(1000)\n .attr('stroke-width', 65)\n .attr('stroke-opacity', 0)\n .ease(d3.easeSin)\n .on('end', repeat);\n })();\n}\n\nexport function getSubVariables(data, variable) {\n let variablesReturned = Object.keys(Object.assign({}, ...data)).sort(d3.descending);\n\n if (\n variablesReturned.includes('direction') &&\n data.filter((d) => !isNaN(d.direction) && d.direction != null).length === 0\n ) {\n variablesReturned = variablesReturned.filter((e) => e !== 'direction');\n }\n return {\n [variable]: variablesReturned.filter(\n (d) => d === 'value' || d === 'direction' || d === 'period' || d === 'gust'\n ),\n };\n}\n\nexport function makeClipPath() {\n let clipCount = 0;\n function uid(name) {\n return new Id('O-' + (name == null ? '' : name + '-') + ++clipCount);\n }\n function Id(id) {\n this.id = id;\n this.href = new URL(`#${id}`, location) + '';\n }\n Id.prototype.toString = function () {\n return 'url(' + this.href + ')';\n };\n return uid('clip');\n}\n","import React, { useRef, useEffect, useState } from 'react';\nimport * as d3 from 'd3';\nimport './styles.css';\nimport { axisBottom } from './d3-axis@1.js';\nimport DirectionArrow from '../../Images/direction_arrow.svg';\nimport { useTheme, useMediaQuery } from '@mui/material/';\nimport sun from '../../Images/sun-day.svg';\nimport moon from '../../Images/moon.svg';\n\nimport mapLayers from '../../mapLayers.js';\n\nimport {\n roundNumber,\n getNewUnits,\n makeMinutesZero,\n getPacificTime,\n getArrowDirection,\n} from '../../utilities';\nimport clonedeep from 'lodash.clonedeep';\nimport {\n lineGenerator,\n areaGenerator,\n getSubVariableLabels,\n multiFormat,\n getSunData,\n normalizeDatasetTime,\n pulse,\n makeDimensions,\n getSubVariables,\n makeClipPath,\n getZoomLevel,\n} from './chartsUtilities.jsx';\n\nfunction Chart({\n variable,\n data: rawData,\n insightData: rawInsightData,\n setScrollTime,\n resetTime,\n scrollTime,\n sliderCurrentTime,\n pointLocations,\n size,\n isStation,\n settings,\n height,\n}) {\n const { unit } = mapLayers.find((e) => e.variableName === variable);\n\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n const pathRef = useRef();\n const pathSubRef = useRef();\n const [dataConverted, setDataConverted] = useState(rawData);\n const [insightData, setInsightsConverted] = useState(rawInsightData);\n const [unitsConverted, setUnitsConverted] = useState(unit);\n let data = dataConverted;\n const axisRef = useRef();\n const firstLoad = useRef(true);\n const linePosition = useRef();\n let sunData;\n let xScaleCurrent;\n const svgRef = useRef(null);\n const isCurrentsOrTidesStation =\n isStation && (variable === 'seaSurfaceHeight' || variable === 'current');\n const zoomLevel = getZoomLevel(isCurrentsOrTidesStation, mobileView, isStation);\n const chartWidth = mobileView ? size.width : 600; //* (2 / 3) - size.width * 0.01;\n const chartHeight = useRef(height);\n const scale = 0.018;\n const simulationRef = useRef(null);\n const subVariables = getSubVariables(data, variable);\n\n const subVariableLabels = getSubVariableLabels(settings);\n const initialPositioningDone = useRef(false);\n\n const subVariableLength = subVariables[variable].length;\n const variableUnits = unitsConverted;\n useEffect(() => {\n const { displayUnits, multiplier } = getNewUnits(unit, settings.units);\n setUnitsConverted(displayUnits);\n let unitsData = clonedeep(rawData);\n let insightUnitsData = clonedeep(rawInsightData);\n\n if (unitsData) {\n unitsData = unitsData.map((d) => {\n d.value = multiplier(d.value);\n variable === 'wind' && d.gust !== null && (d.gust = multiplier(d.gust));\n return d;\n });\n setDataConverted(unitsData);\n }\n if (insightUnitsData) {\n insightUnitsData = insightUnitsData.map((d) => {\n d.value = multiplier(d?.value);\n // Store original positions before unit conversion\n if (d.finalX !== undefined) {\n d.prevFinalX = d.finalX;\n d.prevFinalY = d.finalY;\n d.prevX = d.x;\n }\n return d;\n });\n setInsightsConverted(insightUnitsData);\n }\n // Reset positioning flag when units change\n initialPositioningDone.current = false;\n }, [rawData, resetTime, settings.units, rawInsightData]);\n\n useEffect(() => {\n const heightToUse = height;\n\n chartHeight.current =\n mobileView && heightToUse !== undefined\n ? heightToUse - 16\n : size.height > 800\n ? 400\n : size.height > 700 && size.height < 799\n ? 300\n : 240;\n\n const dimensions = makeDimensions(\n mobileView,\n chartWidth,\n chartHeight.current,\n subVariableLength\n );\n\n const zoom = d3\n .zoom()\n .scaleExtent([zoomLevel, zoomLevel])\n .translateExtent([\n [\n (dimensions.margin.left -\n (dimensions.width + dimensions.margin.left - dimensions.margin.right) / 2 +\n 1) /\n zoomLevel,\n -Infinity,\n ],\n [\n dimensions.width -\n dimensions.margin.right +\n (dimensions.width + dimensions.margin.right - dimensions.margin.left) /\n 2 /\n zoomLevel,\n Infinity,\n ],\n ])\n .on('zoom', (e) => zoomed(e, variableUnits));\n if (isStation && data.length > 1) {\n data = normalizeDatasetTime(data);\n }\n const xScale = d3\n .scaleTime()\n .domain(d3.extent(data, (d) => new Date(d.date)))\n .range([dimensions.margin.left, dimensions.width - dimensions.margin.right]);\n\n const yAccessor = (d) => d.value;\n const xAccessor = (d) => new Date(d.date);\n const daterange = data.map((d) => new Date(d.date));\n\n const getMinDomain = (variable, data, yAccessor) => {\n const min = d3.min(data, yAccessor);\n switch (variable) {\n case 'airTemperature':\n case 'potentialTemperature':\n return min < 0 ? min - 2 : Math.min(min - 2, 0);\n default:\n return Math.min(min, 0);\n }\n };\n\n const getMaxDomain = (variable, data, yAccessor) => {\n const max = d3.max(data, yAccessor);\n switch (variable) {\n case 'wind':\n return d3.max(data, (d) => (d.gust ? d.gust : d.value)) + 4;\n case 'wave':\n if (max < 1) return 1;\n return max + 1;\n case 'current':\n if (max < 1) return 1;\n return max + 2;\n case 'airTemperature':\n case 'potentialTemperature':\n return Math.max(max + 2, max + max * 0.4);\n default:\n return max + 2;\n }\n };\n\n const yDomain = [\n getMinDomain(variable, data, yAccessor),\n getMaxDomain(variable, data, yAccessor),\n ];\n const yScale = d3\n .scaleLinear()\n .domain(yDomain)\n .range([\n variable === 'airTemperature' ||\n variable === 'potentialTemperature' ||\n variable === 'seaSurfaceHeight'\n ? dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n : dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot,\n dimensions.margin.top,\n ]);\n const yAxisGenerator = d3.axisLeft().ticks(6).scale(yScale);\n\n const xAxis = (g, x) =>\n g\n .attr(\n 'transform',\n `translate(0,${dimensions.height - dimensions.margin.bottomOfPlot})`\n )\n .call(\n axisBottom(x)\n .ticks(d3.timeHour)\n .tickSizeOuter(0)\n .tickFormat((d, i) => {\n if (\n d >= d3.min(data, (d) => new Date(d.date)) &&\n d <= d3.max(data, (d) => new Date(d.date))\n ) {\n return !mobileView\n ? d3.timeDay(d) < d\n ? null\n : multiFormat(d)\n : d.getHours() % 12 === 0\n ? multiFormat(d)\n : null;\n }\n })\n .tickSize((d, i) =>\n d >= d3.min(data, (d) => new Date(d.date)) &&\n d <= d3.max(data, (d) => new Date(d.date))\n ? d.getHours() % 4 === 0\n ? d3.timeDay(d) < d\n ? 8\n : 20\n : null\n : null\n )\n )\n .call((g) =>\n g\n .selectAll('.tick text')\n .attr('font-weight', (d) => (d3.timeDay(d) < d ? 400 : 700))\n .attr('x', (d) => (d3.timeDay(d) < d ? 0 : 8))\n .attr('text-anchor', (d) => (d3.timeDay(d) < d ? 'middle' : 'start'))\n .attr('y', 10)\n )\n .call((g) => g.select('.domain').remove());\n\n function zoomed(event, variableUnits) {\n xScaleCurrent = event.transform.rescaleX(xScale);\n\n setScrollTime(xScaleCurrent.invert(linePosition.current));\n if (variable === 'airTemperature' || variable === 'potentialTemperature') {\n pathRef.current.attr(\n 'd',\n lineGenerator(data, xAccessor, yAccessor, xScaleCurrent, yScale)\n );\n } else {\n pathRef.current.attr(\n 'd',\n areaGenerator(\n data,\n xAccessor,\n yAccessor,\n xScaleCurrent,\n yScale,\n variable,\n isCurrentsOrTidesStation,\n dimensions\n )\n );\n if (variable === 'wind') {\n pathSubRef.current.attr(\n 'd',\n areaGenerator(\n data,\n xAccessor,\n (d) => d.gust,\n xScaleCurrent,\n yScale,\n variable,\n isCurrentsOrTidesStation,\n dimensions\n )\n );\n }\n d3.selectAll('.arrowHead1').attr('transform', function (d, i) {\n // width * 0.015 is width/2 * scale, needed to rotate around image centroid\n\n d.correctedD = d.direction - 90;\n\n // wind and wave are in \"from direction\"\n const arrowDirection = getArrowDirection(variable, d.correctedD);\n\n return (\n 'translate(' +\n (xScaleCurrent(xAccessor(d)) - 400 * scale) +\n ',' +\n (dimensions.height - dimensions.margin.yArrowPos) +\n ') rotate(' +\n arrowDirection +\n ',' +\n 400 * scale +\n ',' +\n 400 * scale +\n ') scale(' +\n scale +\n ')'\n );\n });\n }\n\n for (let i = 0; i < subVariables[variable].length; i++) {\n const yTextPos = dimensions.height - dimensions.margin.yTextPos + (35 / 2) * i;\n d3.selectAll('.text' + subVariables[variable][i]).attr('transform', function (d) {\n return 'translate(' + xScaleCurrent(xAccessor(d)) + ',' + yTextPos + ')';\n });\n }\n\n if (!initialPositioningDone.current) {\n gtide.selectAll('text').each(function (d) {\n d.x = xScaleCurrent(xAccessor(d));\n d.y = yScale(d.value) - 5;\n });\n\n if (simulationRef.current) {\n simulationRef.current\n .force('x', d3.forceX((d) => xScaleCurrent(xAccessor(d))).strength(1))\n .force('y', d3.forceY((d) => d.y).strength(0.8))\n .force('collision', d3.forceCollide().radius(30))\n .alpha(1)\n .restart();\n\n simulationRef.current.on('end', () => {\n gtide.selectAll('text').each(function (d) {\n const transform = d3.select(this).attr('transform');\n if (transform) {\n const [x, y] = transform.substring(10, transform.length - 1).split(',');\n d.finalX = parseFloat(x);\n d.finalY = parseFloat(y);\n }\n });\n initialPositioningDone.current = true;\n });\n }\n } else {\n gtide.selectAll('text').attr('transform', function (d) {\n if (d.finalX === undefined || d.x === undefined) {\n return `translate(${xScaleCurrent(xAccessor(d))},${yScale(d.value) - 5})`;\n }\n const newX = xScaleCurrent(xAccessor(d)) + (d.finalX - d.x);\n return `translate(${newX},${d.finalY})`;\n });\n }\n gtideLines\n .selectAll('line')\n .attr('x1', (d, i) => {\n return xScaleCurrent(new Date(d.date));\n })\n .attr('x2', (d, i) => xScaleCurrent(new Date(d.date)))\n .attr('y2', (d) => yScale(d.value))\n .attr('y1', (d) => yScale(0));\n\n g.selectAll('.midDay').attr('transform', function (d, i) {\n return (\n 'translate(' +\n (xScaleCurrent(d.solarNoon) - 400 * 0.028) +\n ',' +\n 10 +\n ') rotate(' +\n 0 +\n ',' +\n 400 * 0.028 +\n ',' +\n 400 * 0.028 +\n ') scale(' +\n 0.028 +\n ')'\n );\n });\n g.selectAll('.midNight').attr('transform', function (d, i) {\n return (\n 'translate(' +\n (xScaleCurrent(d.nadir) - 400 * 0.02) +\n ',' +\n 10 +\n ') rotate(' +\n 0 +\n ',' +\n 400 * 0.02 +\n ',' +\n 400 * 0.02 +\n ') scale(' +\n 0.02 +\n ')'\n );\n });\n gbars\n .selectAll('rect')\n .attr('x', (d) => xScaleCurrent(new Date(d.sunrise)))\n .attr(\n 'width',\n (d) => xScaleCurrent(new Date(d.sunset)) - xScaleCurrent(new Date(d.sunrise))\n );\n\n gbarsDawn\n .selectAll('rect')\n .attr('x', (d) => xScaleCurrent(new Date(d.dawn)))\n .attr(\n 'width',\n (d) => xScaleCurrent(new Date(d.sunrise)) - xScaleCurrent(new Date(d.dawn)) + 2\n );\n\n gbarsDusk\n .selectAll('rect')\n .attr('x', (d) => xScaleCurrent(new Date(d.sunset)) - 2)\n .attr('width', (d) => {\n return xScaleCurrent(new Date(d.dusk)) - xScaleCurrent(new Date(d.sunset)) + 2;\n });\n\n axisRef.current.call(xAxis, xScaleCurrent);\n if (isStation && variable !== 'seaSurfaceHeight' && variable !== 'current') {\n gdots\n .selectAll('circle')\n .attr('cx', (d) => xScaleCurrent(d.date))\n .attr('cy', (d) => yScale(d.value));\n }\n if (isStation && variable === 'wind') {\n gustdots\n .selectAll('circle')\n .attr('cx', (d) => xScaleCurrent(d.date))\n .attr('cy', (d) => yScale(d.gust));\n }\n const nowTime = new Date(getPacificTime());\n if (\n nowTime >= d3.min(data, (d) => new Date(d.date)) &&\n nowTime <= d3.max(data, (d) => new Date(d.date))\n ) {\n nowLine.attr('transform', `translate(${xScaleCurrent(nowTime)},0)`);\n nowLine.style('display', 'block');\n } else {\n nowLine.style('display', 'none');\n }\n }\n\n const clip = makeClipPath();\n\n sunData = getSunData({ data, pointLocations });\n\n const svg = d3\n .select(svgRef.current)\n .attr('width', dimensions.width)\n .attr('height', dimensions.height)\n .attr('class', 'svgViz');\n\n const everything = svg.selectAll('*');\n everything.remove();\n\n svg\n .append('rect')\n .attr('width', mobileView ? '100%' : 600)\n .attr('height', '100%')\n .attr('fill', theme.palette.primary.dark);\n\n const gbars = svg.append('g');\n const gbarsDawn = svg.append('g');\n const gbarsDusk = svg.append('g');\n\n gbars\n .append('g')\n .selectAll('rect')\n .data(sunData)\n .join('rect')\n .attr('x', (d) => {\n return xScale(new Date(d.sunrise));\n })\n .attr('width', (d) => {\n return xScale(new Date(d.sunset)) - xScale(new Date(d.sunrise));\n })\n .attr('y', yScale(yDomain[1]))\n .attr('height', (d) => yScale(yDomain[0]) - yScale(yDomain[1]))\n .attr('fill', '#5cb6ff')\n .attr('fill-opacity', '1');\n\n gbarsDawn\n .append('g')\n .selectAll('rect')\n .data(sunData)\n .join('rect')\n .attr('x', (d) => {\n return xScale(new Date(d.dawn));\n })\n .attr('width', (d) => {\n return xScale(new Date(d.sunrise)) - xScale(new Date(d.dawn));\n })\n .attr('y', yScale(yDomain[1]))\n .attr('height', (d) => yScale(yDomain[0]) - yScale(yDomain[1]))\n .attr('fill', '#4fa3e8')\n .attr('fill-opacity', '1');\n\n gbarsDusk\n .append('g')\n .selectAll('rect')\n .data(sunData)\n .join('rect')\n .attr('x', (d) => {\n return xScale(new Date(d.dusk));\n })\n .attr('width', (d) => {\n return xScale(new Date(d.dusk)) - xScale(new Date(d.sunset));\n })\n .attr('y', yScale(yDomain[1]))\n .attr('height', (d) => yScale(yDomain[0]) - yScale(yDomain[1]))\n .attr('fill', '#4fa3e8')\n .attr('fill-opacity', '1');\n // add gusts to wind chart\n if (variable === 'wind') {\n pathSubRef.current = svg\n .append('g')\n .append('path')\n .attr('fill', theme.palette.primary.light)\n .attr(\n 'd',\n areaGenerator(\n data,\n xAccessor,\n (d) => d.gust,\n xScale,\n yScale,\n variable,\n isCurrentsOrTidesStation,\n dimensions\n )\n );\n }\n pathRef.current =\n variable === 'airTemperature' || variable === 'potentialTemperature'\n ? svg\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', '#fafafa')\n .attr('stroke-width', 4)\n .attr('d', lineGenerator(data, xAccessor, yAccessor, xScale, yScale))\n : svg\n .append('path')\n .attr('fill', 'steelblue')\n .attr(\n 'd',\n areaGenerator(\n data,\n xAccessor,\n yAccessor,\n xScale,\n yScale,\n variable,\n isCurrentsOrTidesStation,\n dimensions\n )\n );\n\n const gdots = svg.append('g');\n const gustdots = svg.append('g');\n if (isStation && variable !== 'seaSurfaceHeight' && variable !== 'current') {\n gdots\n .append('g')\n .selectAll('circle')\n .data(data.filter((d) => !isNaN(d.value) && d.value != null))\n .join('circle')\n .attr('cx', (d) => xScale(d.date))\n .attr('cy', (d) => yScale(d.value))\n .attr('class', (d) => (d.isLive === true ? 'isLive' : 'hourly'))\n .attr('fill', (d) => {\n if (d.isLive === undefined) {\n return variable === 'current' ||\n variable === 'wind' ||\n variable === 'wave' ||\n variable === 'seaSurfaceHeight'\n ? 'steelblue'\n : '#fafafa';\n } else {\n return 'orange';\n }\n })\n .attr('stroke', (d) => (d.isLive === true ? 'orange' : '#023555'))\n .attr('r', 4);\n }\n if (isStation && variable === 'wind') {\n gustdots\n .append('g')\n .selectAll('circle')\n .data(data.filter((d) => !isNaN(d.gust) && d.gust != null))\n .join('circle')\n .attr('cx', (d) => xScale(d.date))\n .attr('cy', (d) => yScale(d.gust))\n .attr('fill', (d) => {\n return theme.palette.primary.light;\n })\n .attr('stroke', '#023555')\n .attr('r', 4);\n }\n const circle = d3.select('.isLive');\n\n pulse(circle);\n\n const gArrows = svg.append('g');\n\n const gGridValues = svg.append('g');\n\n svg\n .append('g')\n .attr('clip-path', clip)\n .append('rect')\n .attr('x', 0)\n .attr(\n 'y',\n dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n )\n .attr('width', variable === 'wind' ? 70 : variable === 'current' ? 80 : 60)\n .attr('height', 80)\n .attr('fill', '#023555');\n\n const gtide = svg.append('g');\n\n const gtideLines = svg.append('g');\n\n const gridData = data.filter((item) => {\n const date = new Date(item.date);\n const minutes = date.getMinutes();\n return minutes === 0 || minutes > 30;\n });\n const g = svg.append('g').attr('clip-path', clip);\n const node2 = g.selectAll('g').data(sunData).join('g');\n\n node2\n .append('image')\n .attr('class', 'midNight')\n .attr('xlink:href', moon)\n .attr('opacity', 0.9);\n\n node2\n .append('image')\n .attr('class', 'midDay')\n .attr('xlink:href', sun)\n .attr('opacity', 0.9);\n if (\n variable === 'current' ||\n variable === 'wind' ||\n (variable === 'wave' &&\n data.filter((d) => !isNaN(d.direction) && d.direction != null).length > 0)\n ) {\n const node = gArrows\n .append('g')\n .selectAll('g')\n .data(gridData.filter((d) => !isNaN(d.direction) && d.direction != null))\n .join('g');\n\n node.append('image').attr('class', 'arrowHead1').attr('xlink:href', DirectionArrow);\n }\n\n // Y grid labels\n if (subVariables[variable].length > 1) {\n for (let i = 0; i < subVariables[variable].length; i++) {\n svg\n .append('g')\n .append('text')\n .attr('text-anchor', 'end')\n .attr('font-size', 10)\n .style('fill', '#e0f5ee')\n .attr(\n 'x',\n variable === 'wind' && mobileView\n ? 65\n : variable === 'wind'\n ? 60\n : variable === 'current'\n ? 70\n : 50\n )\n .attr(\n 'y',\n dimensions.height -\n dimensions.margin.bottom -\n dimensions.margin.bottomOfPlot +\n 17 * (i + 1)\n )\n .text(subVariableLabels[variable][subVariables[variable][i]]);\n\n // Y grid values\n\n if (\n subVariables[variable][i] !== 'direction' &&\n subVariables[variable][i] !== 'isLive'\n ) {\n gGridValues\n .append('g')\n .selectAll('text')\n .data(\n gridData.filter(\n (d) => !isNaN(d[subVariables[variable][i]]) && d.value != null\n )\n )\n .join('text')\n .text((d) => {\n return d[subVariables[variable][i]]?.toFixed(0);\n })\n .attr('class', 'text' + subVariables[variable][i])\n .attr('font-family', 'sans-serif')\n .attr('font-size', '12px')\n .attr('text-anchor', 'middle')\n .attr('fill', '#e0f5ee');\n }\n }\n }\n const isCurrentsStation = variable === 'current' && isStation;\n\n if (variable === 'seaSurfaceHeight' || isCurrentsStation) {\n const filteredData = insightData\n .filter(\n (d) =>\n new Date(d.date) >= d3.min(data, (d) => new Date(d.date)) &&\n new Date(d.date) <= d3.max(data, (d) => new Date(d.date))\n )\n .sort((a, b) => new Date(a.date) - new Date(b.date));\n\n const textGroups = gtide\n .append('g')\n .selectAll('text')\n .data(filteredData)\n .join('text')\n .attr('class', 'peakTides')\n .attr('font-family', 'sans-serif')\n .attr('font-size', '12px')\n .attr('text-anchor', 'middle')\n .attr('fill', '#e0f5ee');\n\n // Add the text content\n textGroups.each(function (d) {\n const textElement = d3.select(this);\n\n const dateFormatted = new Date(d.date).toLocaleTimeString('en-US', {\n weekday: 'short',\n hour: 'numeric',\n timeZone: 'America/Vancouver',\n minute: '2-digit',\n });\n\n let valueText = roundNumber(d.value).toString() + ' ' + variableUnits;\n\n if (isCurrentsStation && valueText === '0 knots') valueText = 'slack';\n const dateText = dateFormatted;\n let dy = -1;\n if (valueText !== 'slack') dy = dy - 0.5;\n\n // Store the original y position in the data\n d.originalY = yScale(d.value) - 5;\n\n textElement\n .append('tspan')\n .attr('x', 0)\n .attr('dy', dy + 'em')\n .text(dateText);\n\n textElement.append('tspan').attr('x', 0).attr('dy', '1.2em').text(valueText);\n });\n\n textGroups.attr(\n 'transform',\n (d) => `translate(${xScale(new Date(d.date))},${d.originalY})`\n );\n // Initialize positions\n textGroups.attr('transform', (d) => {\n const x = xScale(new Date(d.date));\n const y = yScale(d.value) - 5;\n return `translate(${x},${y})`;\n });\n\n // Create force simulation with custom y-force\n\n simulationRef.current = d3\n .forceSimulation(filteredData)\n .force('x', d3.forceX((d) => xScale(new Date(d.date))).strength(1))\n .force('y', d3.forceY((d) => yScale(d.value) - 5).strength(0.8))\n .force('collision', d3.forceCollide().radius(30))\n .alpha(1)\n .alphaDecay(0.3)\n .on('tick', () => {\n textGroups.attr('transform', (d) => `translate(${d.x},${d.y})`);\n })\n .on('end', () => {\n textGroups.each(function (d) {\n d.finalX = d.x;\n d.finalY = d.y;\n });\n initialPositioningDone.current = true;\n });\n // Force immediate completion\n for (let i = 0; i < 100; i++) {\n simulationRef.current.tick();\n }\n simulationRef.current.stop();\n\n // Add lines\n gtideLines\n .append('g')\n .selectAll('line')\n .data(\n insightData.filter(\n (d) =>\n new Date(d.date) >= d3.min(data, (j) => new Date(j.date)) &&\n new Date(d.date) <= d3.max(data, (j) => new Date(j.date))\n )\n )\n .join('line')\n .attr('x1', (d) => xScale(new Date(d.date)))\n .attr('x2', (d) => xScale(new Date(d.date)))\n .attr('y1', yScale(0))\n .attr('y2', yScale(3))\n .attr('fill', 'none')\n .attr('stroke', '#e0f5ee')\n .attr('stroke-width', 1)\n .attr('stroke-linejoin', 'round')\n .attr('stroke-opacity', 0.6);\n }\n\n // YAXIS\n svg\n .append('g')\n .call(yAxisGenerator)\n .attr('font-size', '12px')\n .call((g) => g.select('.domain').remove())\n .style('transform', `translateX(${dimensions.margin.left}px)`)\n .attr('class', 'axisWhite')\n .call((g) =>\n g\n .select('.tick:last-of-type text')\n .clone()\n .attr(\n 'x',\n variable === 'current' || variable === 'wind'\n ? -60\n : variableUnits === 'ft' &&\n (variable === 'seaSurfaceHeight' || variable === 'wave')\n ? -40\n : -50\n )\n .attr('text-anchor', 'start')\n .text('\\u00A0' + variableUnits)\n )\n .selectAll('text')\n .attr('x', 24);\n\n const gx = svg.append('g');\n\n gx.call(xAxis, xScale).attr('class', 'axisWhite');\n\n axisRef.current = gx;\n\n const gRule = svg.append('g');\n\n const rule = gRule\n .append('line')\n .attr('class', 'rule')\n .attr('y1', dimensions.margin.top)\n .attr(\n 'y2',\n variable === 'airTemperature' ||\n variable === 'potentialTemperature' ||\n variable === 'seaSurfaceHeight'\n ? dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n : dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n )\n .attr('stroke', theme.palette.secondary.main)\n .attr('stroke-opacity', 0.7)\n .attr('stroke-width', 2);\n\n const nowLine = gRule\n .append('line')\n .attr('class', 'now-line')\n .attr('y1', dimensions.margin.top)\n .attr(\n 'y2',\n variable === 'airTemperature' ||\n variable === 'potentialTemperature' ||\n variable === 'seaSurfaceHeight'\n ? dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n : dimensions.height - dimensions.margin.bottom - dimensions.margin.bottomOfPlot\n )\n .attr('stroke', theme.palette.secondary.main) // or any color you prefer\n .attr('stroke-opacity', 0.5)\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', '5,5'); // This creates the dashed effect\n\n // update rule on first load to make sure line remains in place\n // tide stations act more like model data because they are\n let hourTime = clonedeep(scrollTime);\n\n if (!data.find((d) => +d.date === +scrollTime)?.isLive && hourTime) {\n hourTime = makeMinutesZero(hourTime);\n }\n\n let date;\n\n if (\n firstLoad.current === true && // first open, past data only\n new Date(sliderCurrentTime) > daterange[daterange.length - 1]\n ) {\n date = daterange[daterange.length - 1];\n } else if (\n // first opening\n\n firstLoad.current === true &&\n new Date(sliderCurrentTime) < daterange[daterange.length - 1]\n ) {\n date = new Date(\n daterange[\n d3.bisectLeft(\n daterange,\n new Date(sliderCurrentTime).setHours(\n new Date(sliderCurrentTime).getHours() - 1\n )\n )\n ]\n );\n } else if (firstLoad.current === false && !resetTime) {\n // use chart slider time\n date = new Date(hourTime);\n } else if (resetTime && new Date(resetTime) > daterange[daterange.length - 1]) {\n date = new Date(\n (date = new Date(\n daterange[d3.bisectLeft(daterange, daterange[daterange.length - 1])]\n ))\n );\n } else if (resetTime) {\n date = new Date(\n daterange[\n d3.bisectLeft(\n daterange,\n new Date(getPacificTime()).setHours(new Date(getPacificTime()).getHours() - 1)\n )\n ]\n );\n }\n const scrubberData = data.find((d) => {\n return +new Date(d.date) === +new Date(date);\n });\n xScaleCurrent = xScale;\n\n svg.call(zoom).call(\n zoom.transform,\n d3.zoomIdentity\n .translate(\n (dimensions.width + dimensions.margin.left - dimensions.margin.right) / 2,\n dimensions.height / 2\n )\n .scale(zoomLevel)\n .translate(-xScale(scrubberData?.date), 0)\n );\n rule.attr('transform', `translate(${xScaleCurrent(scrubberData?.date) + 1},0)`);\n const nowTime = new Date(getPacificTime());\n if (\n nowTime >= d3.min(data, (d) => new Date(d.date)) &&\n nowTime <= d3.max(data, (d) => new Date(d.date))\n ) {\n nowLine.attr('transform', `translate(${xScaleCurrent(nowTime)},0)`);\n nowLine.style('display', 'block');\n } else {\n nowLine.style('display', 'none');\n }\n const linePos = xScaleCurrent(scrubberData.date);\n linePosition.current = linePos;\n\n setScrollTime(xScaleCurrent.invert(linePos));\n }, [data, mobileView, resetTime, size.width, settings.units, height]);\n\n useEffect(() => {\n if (data.length) {\n firstLoad.current = false;\n }\n }, [variable]);\n\n return ;\n}\n\nexport default Chart;\n","import React from 'react';\nimport { Box } from '@mui/material';\n\nexport default function Crosshair({ crosshairWidth, ringColor, pipColor }) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport axios from 'axios';\n\nimport {\n useMediaQuery,\n useTheme,\n Stack,\n Box,\n Dialog,\n Button,\n IconButton,\n DialogContent,\n Typography,\n Skeleton,\n} from '@mui/material';\n\nimport { Close as CloseIcon, PinDrop, Restore, ErrorOutline } from '@mui/icons-material';\nimport VariableInsights from './VariableInsights.jsx';\nimport DataGrid from './DataGrid.jsx';\nimport Chart from '../Charts/charts.jsx';\n\nimport * as d3 from 'd3';\nimport StyledIcon from '../StyledIcon.jsx';\nimport Crosshair from '../Crosshair/Crosshair.jsx';\n\nimport {\n server,\n getVariableTimeseriesData,\n hexToRgb,\n isSameDaySameHour,\n formatAMPM,\n formatAMPMwithMinutes,\n useWindowSize,\n makeMinutesZero,\n getPacificTime,\n daysOfTheWeek,\n} from '../../utilities.js';\n\nimport stationTypes from '../../stations.js';\nimport { StyledSkeleton } from '../StyledComponents.jsx';\nimport mapLayers from '../../mapLayers.js';\n\nexport default function DataPanel({\n dataPanelOpen,\n setDataPanelOpen,\n pointLocations,\n selectedStation,\n setSelectedStation,\n settings,\n sliderCurrentTime,\n selectedVariableName: selectedVariableNameParent,\n getTideStationByID,\n landOrWater,\n scrollTime: scrollTimeParent,\n startDate,\n drawerData,\n changeUnits,\n}) {\n const size = useWindowSize();\n const theme = useTheme();\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n const divHeight = document.getElementsByClassName('MuiDialogContent-root')[0];\n\n const safeAreaBottomPx = getComputedStyle(document.documentElement).getPropertyValue(\n '--sab'\n );\n const safeAreaBottom = parseInt(\n safeAreaBottomPx.substring(0, safeAreaBottomPx.length - 2)\n );\n const [loading, setLoading] = useState(true);\n const [heightToUse, setHeightToUse] = useState();\n\n const [selectedVariableName, setSelectedVariableName] = useState(\n selectedVariableNameParent\n );\n const [scrollTime, setScrollTime] = useState(scrollTimeParent);\n const scrollDate = new Date(scrollTime);\n\n const [data, setData] = useState([]);\n const [variableInsights, setVariableInsights] = useState();\n const [gridData, setGridData] = useState({});\n const [variableData, setVariableData] = useState([]);\n const [variablesInPanel, setVariablesInPanel] = useState();\n\n const [resetTime, setResetTime] = useState();\n\n const formatHour = d3.timeFormat('%-I %p');\n const formatHourMin = d3.timeFormat('%-I:%M %p');\n\n const [tideStationMetadata, setTideStationMetadata] = useState({});\n\n function loadData() {\n const stationID = selectedStation?.id;\n const stationType = selectedStation?.type;\n setLoading(true);\n\n if (stationID)\n axios\n .get(server + `/stations/${stationType}/${stationID}/history`)\n .then((response) => {\n // get all unique keys from response.data\n const { data } = response;\n const keys = [\n ...new Set(data.data.map((elem) => Object.keys(elem.data)).flat(1)),\n ];\n const availableVariable = keys.includes(selectedVariableName)\n ? selectedVariableName\n : keys[0];\n\n const adjustedData = data.data.map((item) => {\n const adjustedDate = new Date(getPacificTime(item.date));\n return { ...item, date: adjustedDate };\n });\n\n data.data = adjustedData;\n setData(data.data.filter((d) => new Date(getPacificTime(d.date)) >= startDate));\n setVariableInsights(data.variableInsights);\n setVariableData(\n getVariableTimeseriesData(\n data.data.filter((d) => {\n return new Date(getPacificTime(d.date)) >= startDate;\n }),\n availableVariable,\n stationID\n )\n );\n setSelectedVariableName(availableVariable);\n\n const tideStation = JSON.parse(selectedStation.extra_station_data);\n\n setTideStationMetadata({\n id: selectedStation.id,\n title: selectedStation.title,\n min_tide: tideStation.min_height,\n max_tide: tideStation.max_height,\n });\n\n setLoading(false);\n });\n else\n axios\n .get(\n server +\n '/datapin/timeseries?' +\n new URLSearchParams({\n lat: pointLocations[0],\n lon: pointLocations[1],\n base: landOrWater,\n }).toString()\n )\n .then((response) => {\n const { data } = response;\n\n setData(data.data.filter((d) => new Date(d.date) >= startDate));\n setVariableInsights(data.variableInsights);\n setVariableData(\n getVariableTimeseriesData(\n data.data.filter((d) => new Date(d.date) >= startDate),\n selectedVariableName,\n stationID\n )\n );\n\n if (data.tideStation !== undefined) {\n setTideStationMetadata({\n id: data.tideStation.id,\n title: data.tideStation.title,\n min_tide: data.tideStation.min_height,\n max_tide: data.tideStation.max_height,\n });\n }\n\n setLoading(false);\n });\n }\n\n // This useEffect is bad, because this useEffect shares the 'selectedVariableName' with another useEffect.\n // Removing this useEffect, or combining it with the other useEffect that listens to the same\n // variable causes flickering in the charts. Not dealing with this now, but this needs to change.\n useEffect(() => {\n if (data.length) {\n setResetTime(undefined);\n setVariableData(getVariableTimeseriesData(data, selectedVariableName, stationID));\n }\n }, [selectedVariableName]);\n\n // Load data\n useEffect(() => {\n if (dataPanelOpen && selectedVariableName && !data.length) {\n loadData();\n }\n }, [dataPanelOpen, pointLocations]);\n // let tideStation;\n useEffect(() => {\n if (data.length) {\n let scrollHour = new Date(scrollTime);\n if (!data.find((d) => +new Date(d.date) === +scrollTime)?.isLive) {\n scrollHour = makeMinutesZero(scrollHour);\n }\n const c = data.find((e) => {\n let tempDate = new Date(e.date);\n tempDate = +scrollHour === +tempDate ? tempDate : makeMinutesZero(tempDate);\n return tempDate.getTime() === scrollHour.getTime();\n });\n setGridData(c?.data || {});\n\n // if (selectedStation) {\n // tideStation = getTideStationByID(selectedStation?.id);\n // }\n }\n }, [scrollTime, selectedVariableName]);\n\n useEffect(() => {\n if (data) {\n const keys = data.reduce((accumulatedLayers, currentLayer) => {\n return [\n ...accumulatedLayers,\n ...Object.keys(currentLayer.data).filter(\n (k) => currentLayer.data[k]?.value !== null\n ),\n ];\n }, []);\n const uniqueKeys = [...new Set(keys)];\n const presentMapLayers = mapLayers\n .filter((mapLayer) => uniqueKeys.includes(mapLayer.variableName))\n .map((mapLayer) => mapLayer.variableName);\n if (presentMapLayers) {\n setVariablesInPanel(presentMapLayers);\n }\n }\n }, [data]);\n\n // remove duplicates\n function closeDataPanel() {\n setDataPanelOpen(false);\n setData();\n setSelectedStation();\n }\n\n if (\n !selectedStation &&\n landOrWater === 'land' &&\n (selectedVariableName === 'wave' ||\n selectedVariableName === 'seaSurfaceHeight' ||\n selectedVariableName === 'current' ||\n selectedVariableName === 'potentialTemperature')\n ) {\n closeDataPanel();\n }\n\n const selectedStationType = stationTypes.find(\n (stationType) => stationType?.type === selectedStation?.type\n );\n // set the chart height\n useEffect(() => {\n if (divHeight?.clientHeight) {\n setHeightToUse(divHeight?.clientHeight);\n }\n }, [gridData]);\n\n if (divHeight?.clientHeight !== undefined && divHeight?.clientHeight !== heightToUse) {\n setHeightToUse(divHeight?.clientHeight);\n }\n const stationID =\n selectedStation?.id &&\n variableData &&\n variableData?.length &&\n selectedStationType?.type !== 'tide_stations' &&\n selectedStationType?.type !== 'currents_stations';\n\n return (\n {\n return reason === 'backdropClick' && closeDataPanel();\n }}\n PaperProps={{\n style: { backgroundColor: theme.palette.primary.dark, minWidth: '300px' },\n }}\n >\n \n {selectedStation?.id ? (\n \n \n \n ) : settings.useCrosshair ? (\n \n \n \n ) : (\n \n )}\n \n \n {selectedStation?.title || selectedStation?.id || 'Forecast'}\n \n {stationID ? (\n \n {variableData.find((d) => d.isLive === true)\n ? `${selectedStationType.typeName}, last updated ${formatAMPMwithMinutes(\n variableData[variableData?.length - 1]?.date\n )} `\n : `${selectedStationType.typeName}, last updated ${formatAMPM(\n variableData[variableData?.length - 1]?.date\n )} `}\n \n ) : null}\n \n \n \n \n \n {variablesInPanel?.length === 0 && Object.keys(gridData).length === 0 ? (\n \n \n \n \n \n ) : (\n !loading &&\n variablesInPanel?.length > 1 &&\n Object.keys(gridData).length >= 0 && (\n \n )\n )}\n \n {loading && Object.keys(gridData).length === 0 ? (\n \n \n \n \n \n ) : (\n !loading &&\n heightToUse !== undefined && (\n d.isLive === true)}\n formatHourMin={formatHourMin}\n settings={settings}\n selectedStation={selectedStation}\n drawerData={drawerData}\n changeUnits={changeUnits}\n setDataPanelOpen={setDataPanelOpen}\n />\n )\n )}\n {loading ? (\n \n \n \n \n \n ) : (\n \n {sliderCurrentTime !== undefined && !variableData.length ? (\n \n \n \n Data not available\n \n \n ) : (\n !loading &&\n heightToUse !== undefined && (\n <>\n \n\n {\n window.clarity('event', \"Datapanel 'go to now' click\");\n setResetTime(new Date(getPacificTime()));\n }}\n endIcon={\n (variableData.find((d) => d?.isLive === true) &&\n selectedStation &&\n (selectedVariableName !== 'seaSurfaceHeight' ||\n selectedVariableName !== 'current') &&\n !(\n +scrollTime === +variableData[variableData.length - 1]?.date\n ) && ) ||\n ((!selectedStation ||\n (selectedStation &&\n !variableData.find((d) => d?.isLive === true))) &&\n !isSameDaySameHour(\n scrollTime,\n new Date(getPacificTime()).getTime()\n ) && )\n }\n >\n {variableData.find((d) => d.isLive === true) &&\n +scrollTime === +variableData[variableData.length - 1]?.date\n ? formatHourMin(scrollTime)\n : formatHour(scrollTime) +\n ', ' +\n daysOfTheWeek[scrollDate.getDay()]}\n \n \n )\n )}\n \n )}\n \n \n );\n}\n","import React from 'react';\nimport { Fab, Stack, Typography, useTheme } from '@mui/material';\nimport {\n generateGradientScale,\n getColorScale,\n minScreenHeight,\n useWindowSize,\n} from '../../utilities';\nimport units from '../../units.js';\n\nexport default function Legend({ selectedMapLayer, settings, changeUnits }) {\n const theme = useTheme();\n let { scale, unit, variableName } = selectedMapLayer;\n const unitCategory = units.find((e) => e.name === unit)?.category;\n const size = useWindowSize();\n const screenIsShort = size.height < minScreenHeight;\n const legendStepHeight = screenIsShort ? 14.3 : 25;\n const legendStepWidth = 24;\n\n const unitSelected = settings.units[unitCategory];\n\n const { display } = units.find((e) => e.name === unitSelected);\n\n scale = getColorScale(variableName, settings.units);\n\n const gradientScale = generateGradientScale(scale);\n\n // extend end colors so that text lines up with correct values\n gradientScale.unshift(gradientScale[0]);\n gradientScale.push(gradientScale[gradientScale.length - 1]);\n\n return (\n {\n window.clarity('event', 'Change units from legend');\n changeUnits(variableName);\n }}\n >\n \n \n \n {scale?.map((step, index) => {\n if (index % (screenIsShort ? 4 : 2) === 0) {\n return (\n \n {`${+step?.value}${index === 0 ? '+' : ''}`}\n \n );\n }\n })}\n \n \n {display}\n \n \n \n );\n}\n","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!./styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from 'react';\n\nimport {\n Dialog,\n Box,\n IconButton,\n Typography,\n useMediaQuery,\n useTheme,\n Stack,\n} from '@mui/material/';\nimport StyledIcon from './StyledIcon.jsx';\nimport stationTypes from '../stations.js';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nexport default function Webcams({\n setWebcamDialogOpen,\n setSelectedStation,\n webcamDialogOpen,\n webcamDialogData,\n}) {\n const theme = useTheme();\n\n const mobileView = useMediaQuery(theme.breakpoints.down('md'));\n const selectedStationType = stationTypes.find(\n (stationType) => stationType?.type === 'webcams'\n );\n\n function handleWebcamPanelClose() {\n setWebcamDialogOpen(false);\n setSelectedStation();\n }\n\n return (\n handleWebcamPanelClose()}\n open={webcamDialogOpen}\n PaperProps={{\n style: {\n backgroundColor: theme.palette.primary.dark,\n color: theme.palette.secondary.main,\n },\n }}\n >\n \n \n \n \n \n {webcamDialogData.title}\n \n handleWebcamPanelClose()} aria-label=\"close\">\n \n \n \n