From a94cdea9b2eeb9b2dd3bf248f215a536fc9a408d Mon Sep 17 00:00:00 2001 From: fraxle Date: Tue, 4 Aug 2026 03:05:07 +0100 Subject: [PATCH] 4.9.1 Fix vehicle day tabs --- assets/js/app.js | 8 +++++++- assets/js/components/DayTabs.js | 30 +++++++++--------------------- assets/js/config.js | 8 +++----- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 92ff2d7..ef9522a 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -1312,9 +1312,15 @@ export function UTCIForecast() { color: feelLum > 165 ? '#1a1a1a' : '#ffffff', ...(cat.fontWeight ? { fontWeight: cat.fontWeight } : {}), }; + // Card wears the same hue as its feel tag, washed right back so + // the tag still reads as the strong swatch on top of it. + const cardRgb = fscRgb(dispTemp, 0.70) || [245, 245, 245]; return html`
+ style=${{ + background: `rgb(${cardRgb[0]},${cardRgb[1]},${cardRgb[2]})`, + ...(fscPlot ? { gridColumn: fscPlot.cardCol(fscPlot.landing[ri]) } : {}), + }}>
${localHHMMs}
<${SkyScope} elev=${r.elev} dt=${r.dt} glob=${r.glob} size=${42} /> diff --git a/assets/js/components/DayTabs.js b/assets/js/components/DayTabs.js index 70da23e..8c02873 100644 --- a/assets/js/components/DayTabs.js +++ b/assets/js/components/DayTabs.js @@ -22,8 +22,8 @@ // activeProfile - current filter profile key // outdoorsVariant - current outdoors sub-variant key // openPanel - opens the profile/config nav dropdown -// vehicleType/vehicleSpeed - current vehicle config (vehicle-cabin day-tab -// reference calc + row label) +// vehicleType - current vehicle config, for the "Viewing" row +// label // buildingType/indoorManaged/utciEnv/furColor - current config values, // for the "Viewing" row label // dayTabsRef - ref for the scrollable tab strip element @@ -33,9 +33,8 @@ import { h, Fragment } from '../../vendor/preact.js'; import htm from '../../vendor/htm.js'; -import { confidenceBand, utciCategory, petCategory, hexToRgb, mixRgb, rainTint, cloudTint, snowTint, VEHICLE_SPEEDS, VEHICLE_TYPES, BUILDING_TYPES, FUR_COLORS } from '../utils.js'; +import { confidenceBand, utciCategory, petCategory, hexToRgb, mixRgb, rainTint, cloudTint, snowTint, VEHICLE_TYPES, BUILDING_TYPES, FUR_COLORS } from '../utils.js'; import { FREE_DAYS, UTCI_ENVIRONMENTS, deriveProfileMain, FILTER_PROFILES, variantIcons } from '../config.js'; -import { calcVehicleInteriorTempPass } from '../physics.js'; import { CloudIcon, PrecipIcon, HouseIcon, CarIcon, FogIcon, IceIcon } from '../components.js'; import { SubscribeModal } from './SubscribeModal.js'; @@ -124,7 +123,7 @@ export function DayTabs({ proPromptSource, setProPromptSource, activeProfile, outdoorsVariant, openPanel, - vehicleType, vehicleSpeed, buildingType, indoorManaged, utciEnv, furColor, + vehicleType, buildingType, indoorManaged, utciEnv, furColor, dayTabsRef, canScrollLeft, canScrollRight, scrollDayTabs, }) { // Which metric drives the day-tab's hi/lo readout depends on the active @@ -215,7 +214,7 @@ export function DayTabs({ ${isHomeOrOffice ? 'Home' : isVehicleProfile ? 'Alert' : 'Sky'}
${mainMetricLabel} - ${(isVehicleProfile || secondaryField) && html` + ${secondaryField && html` ${secondaryMetricLabel}`}
@@ -233,22 +232,11 @@ export function DayTabs({ const dayHi = mainVals.length ? Math.round(Math.max(...mainVals)) : null; const dayLo = mainVals.length ? Math.round(Math.min(...mainVals)) : null; - // Vehicle/Driver: no table column exists for the ventilated cabin - // temp (ventilation is just an input toggle on the main vehicleT - // calc), so run the physics model again with vent forced on, to - // show "if you opened the windows" as a reference hi/lo. + // Vehicle/Driver has no secondary field — the cabin number already + // reflects the selected vehicle type, ventilation and speed, so the + // tab shows that alone rather than a second reference figure. let shadeHi = null, shadeLo = null; - if (isVehicleProfile) { - const speedMph = (VEHICLE_SPEEDS[vehicleSpeed] ?? VEHICLE_SPEEDS.static).mph; - // Run the lagged pass over the whole day, not per-hour equilibrium, - // so this hi/lo is directly comparable with the vehicleT column. - const ventVals = calcVehicleInteriorTempPass( - d.rows.map(r => r.Ta), d.rows.map(r => r.glob), d.rows.map(r => r.elev), - d.rows.map(r => r.va), vehicleType, true, speedMph - ).filter(v => v != null && isFinite(v)); - shadeHi = ventVals.length ? Math.round(Math.max(...ventVals)) : null; - shadeLo = ventVals.length ? Math.round(Math.min(...ventVals)) : null; - } else if (secondaryField) { + if (secondaryField) { const secondaryVals = d.rows.map(r => r[secondaryField]).filter(v => isFinite(v)); shadeHi = secondaryVals.length ? Math.round(Math.max(...secondaryVals)) : null; shadeLo = secondaryVals.length ? Math.round(Math.min(...secondaryVals)) : null; diff --git a/assets/js/config.js b/assets/js/config.js index d52242f..69f96e4 100644 --- a/assets/js/config.js +++ b/assets/js/config.js @@ -209,11 +209,9 @@ export function deriveProfileMain(activeProfile, outdoorsVariant) { // every field matches its column key except utciAdj, whose column is utciP. const colKey = mainField === 'utciAdj' ? 'utciP' : mainField; const mainMetric = COL_DESCRIPTIONS[colKey] || {}; - // Vehicle/Driver has no secondary column — the small number is a live - // re-run of the cabin model with ventilation forced on (see DayTabs). - const secondaryMetric = isVehicleProfile - ? { title: 'Windows Open', desc: 'The same vehicle interior estimate, recalculated with the windows open — how much cooler the cabin would run if it were ventilated.' } - : (secondaryField ? (COL_DESCRIPTIONS[secondaryField] || {}) : null); + // Vehicle/Driver has no secondary column — the day tab shows only the cabin + // temp for the config actually selected (vehicle type, ventilation, speed). + const secondaryMetric = secondaryField ? (COL_DESCRIPTIONS[secondaryField] || {}) : null; return { isHomeOrOffice, isVehicleProfile, isPetsProfile,