/** * helpers.js — Shared UI utility functions * Extracted from app.js */ export function formatDate(date) { if (!date) return '—'; if (date instanceof Date) { const m = String(date.getUTCMonth() + 1).padStart(2, '0'); const d = String(date.getUTCDate()).padStart(2, '0'); const y = date.getUTCFullYear(); return `${m}/${d}/${y}`; } const parts = String(date).split('T')[0].split('-'); if (parts.length !== 3) return String(date); return `${parts[1]}/${parts[2]}/${parts[0]}`; } export function setDefaultDate() { const today = new Date().toISOString().split('T')[0]; const quoteDateEl = document.getElementById('quote-date'); const invoiceDateEl = document.getElementById('invoice-date'); if (quoteDateEl) quoteDateEl.value = today; if (invoiceDateEl) invoiceDateEl.value = today; } export function showSpinner(message = 'Bitte warten...') { let overlay = document.getElementById('qbo-spinner'); if (!overlay) { overlay = document.createElement('div'); overlay.id = 'qbo-spinner'; overlay.style.cssText = 'position:fixed;inset:0;background:rgba(0,0,0,0.4);display:flex;align-items:center;justify-content:center;z-index:9999;'; document.body.appendChild(overlay); } overlay.innerHTML = `
${message}
`; overlay.style.display = 'flex'; } export function hideSpinner() { const overlay = document.getElementById('qbo-spinner'); if (overlay) overlay.style.display = 'none'; } // Keep backward compat for onclick handlers and modules using typeof check window.showSpinner = showSpinner; window.hideSpinner = hideSpinner;