export function shorten(str) { if (str.length < 10) return str; return `${str.slice(0, 6)}...${str.slice(str.length - 4)}`; } export function capitalize(str) { if (str.length === 0) return str; if (str.length === 1) return str.toUpperCase(); return String(str[0]).toUpperCase() + String(str).slice(1); } export function shouldTriggerSafetyCheck() { const _storage = window.sessionStorage; const _safetyCheckKey = "-ghst-safety"; // check if sessionStorage item exists for SafetyCheck if (!_storage.getItem(_safetyCheckKey)) { _storage.setItem(_safetyCheckKey, "true"); return true; } return false; } export function formatCurrency(c, precision = 0, currency = "USD") { const formatted = new Intl.NumberFormat("en-US", { style: currency === "USD" || currency === "" ? "currency" : undefined, currency: "USD", maximumFractionDigits: precision, minimumFractionDigits: precision, }).format(c); if (currency) return `${formatted} ${currency}`; return formatted; } export const formatNumber = (number, precision = 0) => { return new Intl.NumberFormat("en-US", { minimumFractionDigits: precision, maximumFractionDigits: precision, }).format(number); }; export const sortBondsByDiscount = (bonds) => { return Array.from(bonds).filter((bond) => !bond.isSoldOut).sort((a, b) => (a.discount.gt(b.discount) ? -1 : 1)); }; export const timeConverter = (time, max = 7200, maxText = "long ago") => { const seconds = Number(time); const mins = Math.floor(seconds / 60); const secs = seconds % 60; if (mins > max) { return maxText; } else { return `${mins}m ${secs < 10 ? '0' : ''}${secs}s`; } } export const bigIntSqrt = (n) => { if (n < 0n) return 0n; if (n < 2n) return n; let x = n / 2n + 1n; let y = (x + n / x) / 2n; while (y < x) { x = y; y = (x + n / x) / 2n; } return x; }