{"version":3,"file":"settingsSlice.mjs","sources":["../../../../src/lib/state/slices/settingsSlice.ts"],"sourcesContent":["/**\n * @file Settings Slice\n * @description User preferences and settings with batch updates and DevTools integration\n *\n * This slice manages all user-configurable settings including locale, display preferences,\n * notifications, accessibility options, and feature flags. Uses Immer for immutable updates.\n */\n\nimport { createSlice } from '../core/createSlice';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Font size options\n */\nexport type FontSize = 'small' | 'medium' | 'large';\n\n/**\n * Time format options\n */\nexport type TimeFormat = '12h' | '24h';\n\n/**\n * Theme options\n */\nexport type Theme = 'light' | 'dark' | 'system';\n\n/**\n * Settings state interface\n */\nexport interface SettingsState {\n  // Locale & Timezone\n  locale: string;\n  timezone: string;\n\n  // Display\n  dateFormat: string;\n  timeFormat: TimeFormat;\n  numberFormat: string;\n  theme: Theme;\n\n  // Notifications\n  notificationsEnabled: boolean;\n  soundEnabled: boolean;\n  desktopNotifications: boolean;\n  emailNotifications: boolean;\n\n  // Accessibility\n  reducedMotion: boolean;\n  highContrast: boolean;\n  fontSize: FontSize;\n  keyboardShortcutsEnabled: boolean;\n\n  // Feature Flags (synced from server or local overrides)\n  features: Record<string, boolean>;\n\n  // Privacy\n  analyticsEnabled: boolean;\n  crashReportingEnabled: boolean;\n}\n\n/**\n * Settings actions interface\n */\nexport interface SettingsActions {\n  // Individual Locale & Display Setters\n  /** Set the user's locale (e.g., 'en-US', 'fr-FR') */\n  setLocale: (locale: string) => void;\n  /** Set the user's timezone (IANA timezone, e.g., 'America/New_York') */\n  setTimezone: (timezone: string) => void;\n  /** Set date format pattern (e.g., 'MM/DD/YYYY') */\n  setDateFormat: (format: string) => void;\n  /** Set time format preference (12h or 24h) */\n  setTimeFormat: (format: TimeFormat) => void;\n  /** Set number format locale (e.g., 'en-US' for 1,234.56) */\n  setNumberFormat: (format: string) => void;\n  /** Set color theme preference */\n  setTheme: (theme: Theme) => void;\n\n  // Individual Notification Setters\n  /** Enable or disable all notifications */\n  setNotificationsEnabled: (enabled: boolean) => void;\n  /** Enable or disable notification sounds */\n  setSoundEnabled: (enabled: boolean) => void;\n  /** Enable or disable desktop/browser notifications */\n  setDesktopNotifications: (enabled: boolean) => void;\n  /** Enable or disable email notifications */\n  setEmailNotifications: (enabled: boolean) => void;\n\n  // Individual Accessibility Setters\n  /** Enable or disable reduced motion for animations */\n  setReducedMotion: (enabled: boolean) => void;\n  /** Enable or disable high contrast mode */\n  setHighContrast: (enabled: boolean) => void;\n  /** Set font size preference */\n  setFontSize: (size: FontSize) => void;\n  /** Enable or disable keyboard shortcuts */\n  setKeyboardShortcutsEnabled: (enabled: boolean) => void;\n\n  // Individual Privacy Setters\n  /** Enable or disable analytics tracking */\n  setAnalyticsEnabled: (enabled: boolean) => void;\n  /** Enable or disable crash reporting */\n  setCrashReportingEnabled: (enabled: boolean) => void;\n\n  // Batch Update Actions (single DevTools action for multiple changes)\n  /** Update multiple settings at once */\n  updateSettings: (settings: Partial<SettingsState>) => void;\n  /** Update display-related settings as a batch */\n  updateDisplaySettings: (\n    settings: Partial<\n      Pick<\n        SettingsState,\n        'locale' | 'timezone' | 'dateFormat' | 'timeFormat' | 'numberFormat' | 'theme'\n      >\n    >\n  ) => void;\n  /** Update accessibility settings as a batch */\n  updateAccessibilitySettings: (\n    settings: Partial<\n      Pick<\n        SettingsState,\n        'reducedMotion' | 'highContrast' | 'fontSize' | 'keyboardShortcutsEnabled'\n      >\n    >\n  ) => void;\n  /** Update notification settings as a batch */\n  updateNotificationSettings: (\n    settings: Partial<\n      Pick<\n        SettingsState,\n        'notificationsEnabled' | 'soundEnabled' | 'desktopNotifications' | 'emailNotifications'\n      >\n    >\n  ) => void;\n  /** Update privacy settings as a batch */\n  updatePrivacySettings: (\n    settings: Partial<Pick<SettingsState, 'analyticsEnabled' | 'crashReportingEnabled'>>\n  ) => void;\n\n  // Feature Flag Actions\n  /** Set a single feature flag */\n  setFeatureFlag: (flag: string, enabled: boolean) => void;\n  /** Set multiple feature flags (merges with existing) */\n  setFeatureFlags: (flags: Record<string, boolean>) => void;\n  /** Replace all feature flags from server sync */\n  syncFeatureFlags: (flags: Record<string, boolean>) => void;\n  /** Check if a feature flag is enabled */\n  isFeatureEnabled: (flag: string) => boolean;\n\n  // Reset Actions\n  /** Reset all settings to defaults */\n  resetSettings: () => void;\n  /** Reset display settings to defaults */\n  resetDisplaySettings: () => void;\n  /** Reset accessibility settings to defaults */\n  resetAccessibilitySettings: () => void;\n  /** Reset notification settings to defaults */\n  resetNotificationSettings: () => void;\n}\n\n// ============================================================================\n// Initial State\n// ============================================================================\n\n/**\n * Detect user's timezone safely (SSR compatible)\n */\nfunction getDefaultTimezone(): string {\n  if (typeof Intl !== 'undefined' && typeof Intl.DateTimeFormat === 'function') {\n    try {\n      return Intl.DateTimeFormat().resolvedOptions().timeZone;\n    } catch {\n      return 'UTC';\n    }\n  }\n  return 'UTC';\n}\n\n/**\n * Detect user's preferred locale\n */\nfunction getDefaultLocale(): string {\n  if (typeof navigator !== 'undefined' && navigator.language) {\n    return navigator.language;\n  }\n  return 'en-US';\n}\n\n/**\n * Detect user's reduced motion preference\n */\nfunction getDefaultReducedMotion(): boolean {\n  if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n    return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  }\n  return false;\n}\n\n/**\n * Detect user's color scheme preference\n */\nfunction getDefaultTheme(): Theme {\n  if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n    if (window.matchMedia('(prefers-color-scheme: dark)').matches) {\n      return 'system';\n    }\n  }\n  return 'system';\n}\n\n/**\n * Default settings (used for reset and initial state)\n */\nconst defaultSettings: SettingsState = {\n  // Locale & Timezone\n  locale: getDefaultLocale(),\n  timezone: getDefaultTimezone(),\n\n  // Display\n  dateFormat: 'MM/DD/YYYY',\n  timeFormat: '12h',\n  numberFormat: 'en-US',\n  theme: getDefaultTheme(),\n\n  // Notifications\n  notificationsEnabled: true,\n  soundEnabled: true,\n  desktopNotifications: false,\n  emailNotifications: true,\n\n  // Accessibility\n  reducedMotion: getDefaultReducedMotion(),\n  highContrast: false,\n  fontSize: 'medium',\n  keyboardShortcutsEnabled: true,\n\n  // Feature Flags\n  features: {},\n\n  // Privacy\n  analyticsEnabled: true,\n  crashReportingEnabled: true,\n};\n\n/**\n * Default display settings subset\n */\nconst defaultDisplaySettings = {\n  locale: defaultSettings.locale,\n  timezone: defaultSettings.timezone,\n  dateFormat: defaultSettings.dateFormat,\n  timeFormat: defaultSettings.timeFormat,\n  numberFormat: defaultSettings.numberFormat,\n  theme: defaultSettings.theme,\n};\n\n/**\n * Default accessibility settings subset\n */\nconst defaultAccessibilitySettings = {\n  reducedMotion: defaultSettings.reducedMotion,\n  highContrast: defaultSettings.highContrast,\n  fontSize: defaultSettings.fontSize,\n  keyboardShortcutsEnabled: defaultSettings.keyboardShortcutsEnabled,\n};\n\n/**\n * Default notification settings subset\n */\nconst defaultNotificationSettings = {\n  notificationsEnabled: defaultSettings.notificationsEnabled,\n  soundEnabled: defaultSettings.soundEnabled,\n  desktopNotifications: defaultSettings.desktopNotifications,\n  emailNotifications: defaultSettings.emailNotifications,\n};\n\n// ============================================================================\n// Slice Definition\n// ============================================================================\n\n/**\n * Settings slice using createSlice factory for automatic DevTools action naming\n *\n * All actions are automatically prefixed with \"settings/\" in DevTools, e.g.:\n * - settings/setLocale\n * - settings/updateDisplaySettings\n * - settings/setFeatureFlag\n */\nexport const settingsSlice = createSlice<\n  SettingsState,\n  SettingsActions & Record<string, (...args: never[]) => unknown>\n>({\n  name: 'settings',\n  initialState: defaultSettings,\n  actions: (set, get) => ({\n    // ========================================================================\n    // Individual Setters\n    // ========================================================================\n\n    setLocale: (locale) => {\n      set((state) => {\n        state.locale = locale;\n      }, 'setLocale');\n    },\n\n    setTimezone: (timezone) => {\n      set((state) => {\n        state.timezone = timezone;\n      }, 'setTimezone');\n    },\n\n    setDateFormat: (format) => {\n      set((state) => {\n        state.dateFormat = format;\n      }, 'setDateFormat');\n    },\n\n    setTimeFormat: (format) => {\n      set((state) => {\n        state.timeFormat = format;\n      }, 'setTimeFormat');\n    },\n\n    setNumberFormat: (format) => {\n      set((state) => {\n        state.numberFormat = format;\n      }, 'setNumberFormat');\n    },\n\n    setTheme: (theme) => {\n      set((state) => {\n        state.theme = theme;\n      }, 'setTheme');\n    },\n\n    setNotificationsEnabled: (enabled) => {\n      set((state) => {\n        state.notificationsEnabled = enabled;\n      }, 'setNotificationsEnabled');\n    },\n\n    setSoundEnabled: (enabled) => {\n      set((state) => {\n        state.soundEnabled = enabled;\n      }, 'setSoundEnabled');\n    },\n\n    setDesktopNotifications: (enabled) => {\n      set((state) => {\n        state.desktopNotifications = enabled;\n      }, 'setDesktopNotifications');\n    },\n\n    setEmailNotifications: (enabled) => {\n      set((state) => {\n        state.emailNotifications = enabled;\n      }, 'setEmailNotifications');\n    },\n\n    setReducedMotion: (enabled) => {\n      set((state) => {\n        state.reducedMotion = enabled;\n      }, 'setReducedMotion');\n    },\n\n    setHighContrast: (enabled) => {\n      set((state) => {\n        state.highContrast = enabled;\n      }, 'setHighContrast');\n    },\n\n    setFontSize: (size) => {\n      set((state) => {\n        state.fontSize = size;\n      }, 'setFontSize');\n    },\n\n    setKeyboardShortcutsEnabled: (enabled) => {\n      set((state) => {\n        state.keyboardShortcutsEnabled = enabled;\n      }, 'setKeyboardShortcutsEnabled');\n    },\n\n    setAnalyticsEnabled: (enabled) => {\n      set((state) => {\n        state.analyticsEnabled = enabled;\n      }, 'setAnalyticsEnabled');\n    },\n\n    setCrashReportingEnabled: (enabled) => {\n      set((state) => {\n        state.crashReportingEnabled = enabled;\n      }, 'setCrashReportingEnabled');\n    },\n\n    // ========================================================================\n    // Batch Updates (Single Action in DevTools)\n    // ========================================================================\n\n    updateSettings: (settings) => {\n      set((state) => {\n        if (settings !== null && settings !== undefined) {\n          // Use Immer-compatible property assignment instead of Object.assign\n          for (const [key, value] of Object.entries(settings)) {\n            (state as Record<string, unknown>)[key] = value;\n          }\n        }\n      }, 'updateSettings');\n    },\n\n    updateDisplaySettings: (settings) => {\n      set((state) => {\n        if (settings !== null && settings !== undefined) {\n          // Use Immer-compatible property assignment instead of Object.assign\n          for (const [key, value] of Object.entries(settings)) {\n            (state as Record<string, unknown>)[key] = value;\n          }\n        }\n      }, 'updateDisplaySettings');\n    },\n\n    updateAccessibilitySettings: (settings) => {\n      set((state) => {\n        if (settings !== null && settings !== undefined) {\n          // Use Immer-compatible property assignment instead of Object.assign\n          for (const [key, value] of Object.entries(settings)) {\n            (state as Record<string, unknown>)[key] = value;\n          }\n        }\n      }, 'updateAccessibilitySettings');\n    },\n\n    updateNotificationSettings: (settings) => {\n      set((state) => {\n        if (settings !== null && settings !== undefined) {\n          // Use Immer-compatible property assignment instead of Object.assign\n          for (const [key, value] of Object.entries(settings)) {\n            (state as Record<string, unknown>)[key] = value;\n          }\n        }\n      }, 'updateNotificationSettings');\n    },\n\n    updatePrivacySettings: (settings) => {\n      set((state) => {\n        if (settings !== null && settings !== undefined) {\n          // Use Immer-compatible property assignment instead of Object.assign\n          for (const [key, value] of Object.entries(settings)) {\n            (state as Record<string, unknown>)[key] = value;\n          }\n        }\n      }, 'updatePrivacySettings');\n    },\n\n    // ========================================================================\n    // Feature Flags\n    // ========================================================================\n\n    setFeatureFlag: (flag, enabled) => {\n      set((state) => {\n        state.features[flag] = enabled;\n      }, 'setFeatureFlag');\n    },\n\n    setFeatureFlags: (flags) => {\n      set((state) => {\n        // Use Immer-compatible property assignment instead of Object.assign\n        for (const [key, value] of Object.entries(flags)) {\n          state.features[key] = value;\n        }\n      }, 'setFeatureFlags');\n    },\n\n    syncFeatureFlags: (flags) => {\n      set((state) => {\n        state.features = flags;\n      }, 'syncFeatureFlags');\n    },\n\n    isFeatureEnabled: (flag) => {\n      return get().features[flag] ?? false;\n    },\n\n    // ========================================================================\n    // Reset Actions\n    // ========================================================================\n\n    resetSettings: () => {\n      set(() => ({ ...defaultSettings }), 'resetSettings');\n    },\n\n    resetDisplaySettings: () => {\n      set((state) => {\n        // Use Immer-compatible property assignment instead of Object.assign\n        for (const [key, value] of Object.entries(defaultDisplaySettings)) {\n          (state as Record<string, unknown>)[key] = value;\n        }\n      }, 'resetDisplaySettings');\n    },\n\n    resetAccessibilitySettings: () => {\n      set((state) => {\n        // Use Immer-compatible property assignment instead of Object.assign\n        for (const [key, value] of Object.entries(defaultAccessibilitySettings)) {\n          (state as Record<string, unknown>)[key] = value;\n        }\n      }, 'resetAccessibilitySettings');\n    },\n\n    resetNotificationSettings: () => {\n      set((state) => {\n        // Use Immer-compatible property assignment instead of Object.assign\n        for (const [key, value] of Object.entries(defaultNotificationSettings)) {\n          (state as Record<string, unknown>)[key] = value;\n        }\n      }, 'resetNotificationSettings');\n    },\n  }),\n});\n\n// ============================================================================\n// Exported Type\n// ============================================================================\n\nexport type SettingsSlice = SettingsState & SettingsActions;\n\n// ============================================================================\n// Default Settings Export (for external use)\n// ============================================================================\n\nexport {\n  defaultSettings,\n  defaultDisplaySettings,\n  defaultAccessibilitySettings,\n  defaultNotificationSettings,\n};\n"],"names":["getDefaultTimezone","getDefaultLocale","getDefaultReducedMotion","getDefaultTheme","defaultSettings","defaultDisplaySettings","defaultAccessibilitySettings","defaultNotificationSettings","settingsSlice","createSlice","set","get","locale","state","timezone","format","theme","enabled","size","settings","key","value","flag","flags"],"mappings":"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"}