1import{I as g,S as C,f as y,aa as O,H as x,q as s}from"./CujwEPkh.js";const $="fh_units_pref",A=["US"];function P(r){return r&&A.includes(r.toUpperCase())?"imperial":"metric"}const o=r=>typeof r=="number"&&Number.isFinite(r),I=.621371,L=3.28084,l=y(null);let _=!1;function R(){const r=g();if(!_){_=!0;const e=C($);(e==="metric"||e==="imperial")&&(l.value=e)}const f=s(()=>{const e=r.user?.units;return e==="metric"||e==="imperial"?e:l.value||"metric"}),n=s(()=>f.value==="imperial"),a=s(()=>n.value?"mi":"km"),m=s(()=>n.value?"ft":"m"),v=s(()=>n.value?"°F":"°C"),d=s(()=>n.value?"mph":"km/h"),c=e=>o(e)?n.value?e*I:e:null,p=e=>o(e)?n.value?e*L:e:null,S=e=>o(e)?n.value?e*9/5+32:e:null,U=e=>o(e)?n.value?e*I:e:null,M=(e,t={})=>{const i=c(e);if(i===null)return"";const u=t.decimals??1;return`${i.toFixed(u)} ${a.value}`},T=e=>{const t=p(e);return t===null?"":`${Math.round(t).toLocaleString()} ${m.value}`},h=e=>{const t=S(e);return t===null?"":`${Math.round(t)}${v.value}`},E=e=>{const t=U(e);return t===null?"":`${Math.round(t)} ${d.value}`},F=e=>{const t=c(e);return t===null?"":`${t.toFixed(1)} ${a.value}`};async function b(e){l.value=e,O($,e);const t=r.user?.id;if(!t)return{success:!0};const i=x(),{error:u}=await i.from("users").update({units:e}).eq("id",t);return u?(console.error("[useUnits] failed to persist preference",u),{success:!1,error:u}):(r.setUser({...r.user,units:e}),{success:!0})}return{units:f,isImperial:n,distanceUnit:a,elevationUnit:m,tempUnit:v,windUnit:d,convertDistance:c,convertElevation:p,convertTemperature:S,convertWindSpeed:U,formatDistance:M,formatElevation:T,formatTemperature:h,formatWindSpeed:E,formatVisibility:F,setUnits:b}}export{P as i,R as u};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.