// ── Urgency System ───────────────────────────────────────────── // 5 levels mapping to notification style, sound, vibration, visual intensity, snooze behavior export type UrgencyLevel = 'critical' | 'important' | 'standard' | 'gentle' | 'passive'; export interface UrgencyConfig { level: UrgencyLevel; label: string; color: string; bgColor: string; borderColor: string; notificationStyle: 'persistent' | 'prominent' | 'default' | 'subtle' | 'badge'; soundEnabled: boolean; vibrationPattern: number[]; // ms on/off pattern visualIntensity: number; // 0-1 autoSnoozeMinutes: number | null; // null = no auto-snooze requireConfirmToDismiss: boolean; fullScreenOverlay: boolean; } export const URGENCY_CONFIGS: Record = { critical: { level: 'critical', label: 'Critical', color: 'var(--cm-critical)', bgColor: 'var(--cm-critical-15)', borderColor: 'var(--cm-critical-40)', notificationStyle: 'persistent', soundEnabled: true, vibrationPattern: [200, 100, 200, 100, 400], visualIntensity: 1.0, autoSnoozeMinutes: null, requireConfirmToDismiss: true, fullScreenOverlay: true, }, important: { level: 'important', label: 'Important', color: 'var(--cm-important)', bgColor: 'var(--cm-important-15)', borderColor: 'var(--cm-important-40)', notificationStyle: 'prominent', soundEnabled: true, vibrationPattern: [200, 100, 200], visualIntensity: 0.8, autoSnoozeMinutes: 10, requireConfirmToDismiss: false, fullScreenOverlay: false, }, standard: { level: 'standard', label: 'Standard', color: 'var(--cm-standard)', bgColor: 'var(--cm-standard-15)', borderColor: 'var(--cm-standard-40)', notificationStyle: 'default', soundEnabled: true, vibrationPattern: [200], visualIntensity: 0.6, autoSnoozeMinutes: 5, requireConfirmToDismiss: false, fullScreenOverlay: false, }, gentle: { level: 'gentle', label: 'Gentle', color: 'var(--cm-gentle)', bgColor: 'var(--cm-gentle-15)', borderColor: 'var(--cm-gentle-40)', notificationStyle: 'subtle', soundEnabled: true, vibrationPattern: [100], visualIntensity: 0.3, autoSnoozeMinutes: 5, requireConfirmToDismiss: false, fullScreenOverlay: false, }, passive: { level: 'passive', label: 'Passive', color: 'var(--cm-passive)', bgColor: 'var(--cm-passive-10)', borderColor: 'var(--cm-passive-20)', notificationStyle: 'badge', soundEnabled: false, vibrationPattern: [], visualIntensity: 0.1, autoSnoozeMinutes: null, requireConfirmToDismiss: false, fullScreenOverlay: false, }, }; export const URGENCY_ORDER: UrgencyLevel[] = ['critical', 'important', 'standard', 'gentle', 'passive']; export function getUrgencyConfig(level: UrgencyLevel): UrgencyConfig { return URGENCY_CONFIGS[level]; } export function getUrgencyIndex(level: UrgencyLevel): number { return URGENCY_ORDER.indexOf(level); }