{"version":3,"file":"math-D1WKoC5Z.js","sources":["../../../app/frontend/utils/string.js","../../../app/frontend/utils/math.js"],"sourcesContent":["// should do this on the server\nexport function formatPhone(phone) {\n phone = phone.replace(/[^\\d]/g, \"\");\n\n if (phone.length == 10) {\n return phone\n .replace(/^1/, \"\")\n .replace(/(\\d{3})(\\d{3})(\\d{4})/, \"($1) $2-$3\");\n }\n\n return phone;\n}\n\nexport function getConcisePersonName(person) {\n if (!person.userFirstName && person.customerEmail) {\n return person.customerEmail;\n }\n\n if (!person.userLastName) {\n return person.userFirstName;\n }\n\n const lastInitial = person.userLastName.slice(0, 1);\n return `${person.userFirstName} ${lastInitial}`;\n}\n\n// Validates the format of a zip code string based on whether it's U.S. or Canada\nexport function isValidZipCode (str, countryCode) {\n if(countryCode === undefined || countryCode != 'CA') {\n return /^[0-9]{5}$/.test(str);\n } else {\n return /^[A-Za-z][0-9][A-Za-z][ ]?[0-9][A-Za-z][0-9]$/.test(str);\n }\n}\n","/**\n * Smart number formatting with configurable precision levels\n * \n * options.smallNumberThreshold - Numbers below this are considered \"small\"\n * options.smallNumberDecimals - Decimal places to keep for small numbers\n * options.largeNumberDecimals - Decimal places to keep for large numbers\n */\nexport function formatNumber(input, {\n smallNumberThreshold = 10,\n smallNumberDecimals = 1,\n largeNumberDecimals = 0\n} = {}) {\n const num = Number(input);\n \n if (Number.isNaN(num)) {\n throw new Error(`Invalid number: ${input}`);\n }\n \n const factor = Math.pow(10, num < smallNumberThreshold ? smallNumberDecimals : largeNumberDecimals);\n return Math.round(num * factor) / factor;\n}\n\n// Formats distance nicely from meters to miles or kilometers depending on the country code\nexport function formatDistance(distanceMeters, countryCode) {\n if(countryCode === undefined || countryCode != \"CA\") {\n return `${formatNumber(.00062137 * distanceMeters)} mi`;\n } else {\n return `${formatNumber(distanceMeters/1000)} km`;\n }\n}"],"names":["formatPhone","phone","getConcisePersonName","person","lastInitial","isValidZipCode","str","countryCode","formatNumber","input","smallNumberThreshold","smallNumberDecimals","largeNumberDecimals","num","factor","formatDistance","distanceMeters"],"mappings":"AACO,SAASA,EAAYC,EAAO,CAGjC,OAFAA,EAAQA,EAAM,QAAQ,SAAU,EAAE,EAE9BA,EAAM,QAAU,GACXA,EACI,QAAQ,KAAM,EAAE,EAChB,QAAQ,wBAAyB,YAAY,EAGnDA,CACT,CAEO,SAASC,EAAqBC,EAAQ,CAC3C,GAAI,CAACA,EAAO,eAAiBA,EAAO,cAClC,OAAOA,EAAO,cAGhB,GAAI,CAACA,EAAO,aACV,OAAOA,EAAO,cAGhB,MAAMC,EAAcD,EAAO,aAAa,MAAM,EAAG,CAAC,EAClD,MAAO,GAAGA,EAAO,aAAa,IAAIC,CAAW,EAC/C,CAGO,SAASC,EAAgBC,EAAKC,EAAa,CAChD,OAAGA,IAAgB,QAAaA,GAAe,KACtC,aAAa,KAAKD,CAAG,EAErB,gDAAgD,KAAKA,CAAG,CAEnE,CC1BO,SAASE,EAAaC,EAAO,CAClC,qBAAAC,EAAuB,GACvB,oBAAAC,EAAsB,EACtB,oBAAAC,EAAsB,CACxB,EAAI,GAAI,CACN,MAAMC,EAAM,OAAOJ,CAAK,EAExB,GAAI,OAAO,MAAMI,CAAG,EAClB,MAAM,IAAI,MAAM,mBAAmBJ,CAAK,EAAE,EAG5C,MAAMK,EAAS,KAAK,IAAI,GAAID,EAAMH,EAAuBC,EAAsBC,CAAmB,EAClG,OAAO,KAAK,MAAMC,EAAMC,CAAM,EAAIA,CACpC,CAGO,SAASC,EAAeC,EAAgBT,EAAa,CAC1D,OAAGA,IAAgB,QAAaA,GAAe,KACtC,GAAGC,EAAa,SAAYQ,CAAc,CAAC,MAE3C,GAAGR,EAAaQ,EAAe,GAAI,CAAC,KAE/C"}