{"version":3,"file":"system-preferences.mjs","names":[],"sources":["../../src/renderer/system-preferences/index.ts"],"sourcesContent":["/**\n * Renderer process API for systemPreferences module\n * Usage in renderer process:\n *\n * import * as systemPreferences from 'electron-main-bridge/renderer/system-preferences';\n * const accentColor = await systemPreferences.getAccentColor();\n */\n\nimport type {\n  AnimationSettings,\n  EffectiveAppearance,\n  MacOsColor,\n  MacOsSystemColor,\n  MediaAccessType,\n  MediaAccessStatus,\n  NotificationEventData,\n  SystemPreferencesEventCallbacks,\n  UserDefaultType,\n  UserDefaultTypes,\n  WindowsColor,\n} from \"@shared/system-preferences.types.js\";\n\n// ============================================================================\n// Swipe Tracking (macOS)\n// ============================================================================\n\n/**\n * Whether swipe tracking is enabled from scroll events (macOS)\n */\nexport async function isSwipeTrackingFromScrollEventsEnabled(): Promise<boolean> {\n  return (await window.rpc.call(\n    \"systemPreferences.isSwipeTrackingFromScrollEventsEnabled\",\n  )) as boolean;\n}\n\n// ============================================================================\n// Notification Posting (macOS)\n// ============================================================================\n\n/**\n * Post a macOS notification with `NSUserNotificationCenter` (macOS)\n */\nexport async function postNotification(\n  event: string,\n  userInfo?: Record<string, unknown>,\n  deliverImmediately?: boolean,\n): Promise<void> {\n  await window.rpc.call(\"systemPreferences.postNotification\", event, userInfo, deliverImmediately);\n}\n\n/**\n * Post a macOS local notification with `NSUserNotificationCenter` (macOS)\n */\nexport async function postLocalNotification(\n  event: string,\n  userInfo?: Record<string, unknown>,\n): Promise<void> {\n  await window.rpc.call(\"systemPreferences.postLocalNotification\", event, userInfo);\n}\n\n/**\n * Post a macOS workspace notification with `NSDistributedNotificationCenter` (macOS)\n */\nexport async function postWorkspaceNotification(\n  event: string,\n  userInfo?: Record<string, unknown>,\n): Promise<void> {\n  await window.rpc.call(\"systemPreferences.postWorkspaceNotification\", event, userInfo);\n}\n\n// ============================================================================\n// Notification Subscription (macOS)\n// ============================================================================\n\n/**\n * Subscribe to macOS notifications with `NSUserNotificationCenter` (macOS)\n * Returns a subscription ID that can be used to unsubscribe\n */\nexport async function subscribeNotification(event: string | null): Promise<number> {\n  return (await window.rpc.call(\"systemPreferences.subscribeNotification\", event)) as number;\n}\n\n/**\n * Subscribe to macOS local notifications with `NSUserNotificationCenter` (macOS)\n */\nexport async function subscribeLocalNotification(event: string | null): Promise<number> {\n  return (await window.rpc.call(\"systemPreferences.subscribeLocalNotification\", event)) as number;\n}\n\n/**\n * Subscribe to macOS workspace notifications with `NSDistributedNotificationCenter` (macOS)\n */\nexport async function subscribeWorkspaceNotification(event: string | null): Promise<number> {\n  return (await window.rpc.call(\n    \"systemPreferences.subscribeWorkspaceNotification\",\n    event,\n  )) as number;\n}\n\n/**\n * Unsubscribe from a macOS notification (macOS)\n */\nexport async function unsubscribeNotification(id: number): Promise<void> {\n  await window.rpc.call(\"systemPreferences.unsubscribeNotification\", id);\n}\n\n/**\n * Unsubscribe from a macOS local notification (macOS)\n */\nexport async function unsubscribeLocalNotification(id: number): Promise<void> {\n  await window.rpc.call(\"systemPreferences.unsubscribeLocalNotification\", id);\n}\n\n/**\n * Unsubscribe from a macOS workspace notification (macOS)\n */\nexport async function unsubscribeWorkspaceNotification(id: number): Promise<void> {\n  await window.rpc.call(\"systemPreferences.unsubscribeWorkspaceNotification\", id);\n}\n\n// ============================================================================\n// NSUserDefaults (macOS)\n// ============================================================================\n\n/**\n * Register default values for macOS user defaults (macOS)\n */\nexport async function registerDefaults(\n  defaults: Record<string, string | boolean | number | Record<string, unknown>>,\n): Promise<void> {\n  await window.rpc.call(\"systemPreferences.registerDefaults\", defaults);\n}\n\n/**\n * Get a value from macOS user defaults (macOS)\n */\nexport async function getUserDefault<T extends UserDefaultType>(\n  key: string,\n  type: T,\n): Promise<UserDefaultTypes[T]> {\n  return (await window.rpc.call(\n    \"systemPreferences.getUserDefault\",\n    key,\n    type,\n  )) as UserDefaultTypes[T];\n}\n\n/**\n * Set a value in macOS user defaults (macOS)\n */\nexport async function setUserDefault<T extends UserDefaultType>(\n  key: string,\n  type: T,\n  value: UserDefaultTypes[T],\n): Promise<void> {\n  await window.rpc.call(\"systemPreferences.setUserDefault\", key, type, value);\n}\n\n/**\n * Remove a value from macOS user defaults (macOS)\n */\nexport async function removeUserDefault(key: string): Promise<void> {\n  await window.rpc.call(\"systemPreferences.removeUserDefault\", key);\n}\n\n// ============================================================================\n// Color Methods\n// ============================================================================\n\n/**\n * Get the system accent color as RGBA hex string\n */\nexport async function getAccentColor(): Promise<string> {\n  return (await window.rpc.call(\"systemPreferences.getAccentColor\")) as string;\n}\n\n/**\n * Get a system color value (Windows, macOS)\n */\nexport async function getColor(color: WindowsColor | MacOsColor): Promise<string> {\n  return (await window.rpc.call(\"systemPreferences.getColor\", color)) as string;\n}\n\n/**\n * Get a macOS system color value (macOS)\n */\nexport async function getSystemColor(color: MacOsSystemColor): Promise<string> {\n  return (await window.rpc.call(\"systemPreferences.getSystemColor\", color)) as string;\n}\n\n/**\n * Get the effective appearance (dark/light/unknown) (macOS)\n */\nexport async function getEffectiveAppearance(): Promise<EffectiveAppearance> {\n  return (await window.rpc.call(\"systemPreferences.getEffectiveAppearance\")) as EffectiveAppearance;\n}\n\n// ============================================================================\n// Touch ID (macOS)\n// ============================================================================\n\n/**\n * Check if Touch ID authentication is available (macOS)\n */\nexport async function canPromptTouchID(): Promise<boolean> {\n  return (await window.rpc.call(\"systemPreferences.canPromptTouchID\")) as boolean;\n}\n\n/**\n * Prompt for Touch ID authentication (macOS)\n */\nexport async function promptTouchID(reason: string): Promise<void> {\n  await window.rpc.call(\"systemPreferences.promptTouchID\", reason);\n}\n\n// ============================================================================\n// Accessibility (macOS)\n// ============================================================================\n\n/**\n * Check if the app is a trusted accessibility client (macOS)\n */\nexport async function isTrustedAccessibilityClient(prompt = false): Promise<boolean> {\n  return (await window.rpc.call(\n    \"systemPreferences.isTrustedAccessibilityClient\",\n    prompt,\n  )) as boolean;\n}\n\n// ============================================================================\n// Media Access (Windows, macOS)\n// ============================================================================\n\n/**\n * Get the current media access status (Windows, macOS)\n */\nexport async function getMediaAccessStatus(mediaType: MediaAccessType): Promise<MediaAccessStatus> {\n  return (await window.rpc.call(\n    \"systemPreferences.getMediaAccessStatus\",\n    mediaType,\n  )) as MediaAccessStatus;\n}\n\n/**\n * Ask for media access permission (macOS)\n */\nexport async function askForMediaAccess(\n  mediaType: Exclude<MediaAccessType, \"screen\">,\n): Promise<boolean> {\n  return (await window.rpc.call(\"systemPreferences.askForMediaAccess\", mediaType)) as boolean;\n}\n\n// ============================================================================\n// Animation Settings\n// ============================================================================\n\n/**\n * Get the current animation settings\n */\nexport async function getAnimationSettings(): Promise<AnimationSettings> {\n  return (await window.rpc.call(\"systemPreferences.getAnimationSettings\")) as AnimationSettings;\n}\n\n// ============================================================================\n// Event Listeners\n// ============================================================================\n\n/**\n * Listen for systemPreferences events\n */\nexport function on<K extends keyof SystemPreferencesEventCallbacks>(\n  event: K,\n  callback: SystemPreferencesEventCallbacks[K],\n): () => void {\n  return window.rpc.on(`systemPreferences.${event}`, callback as (...args: unknown[]) => void);\n}\n\n/**\n * Listen for a systemPreferences event once\n */\nexport function once<K extends keyof SystemPreferencesEventCallbacks>(\n  event: K,\n  callback: SystemPreferencesEventCallbacks[K],\n): void {\n  window.rpc.once(`systemPreferences.${event}`, callback as (...args: unknown[]) => void);\n}\n\n/**\n * Remove a systemPreferences event listener\n */\nexport function off<K extends keyof SystemPreferencesEventCallbacks>(\n  event: K,\n  callback?: SystemPreferencesEventCallbacks[K],\n): void {\n  window.rpc.off(\n    `systemPreferences.${event}`,\n    callback as ((...args: unknown[]) => void) | undefined,\n  );\n}\n\n// ============================================================================\n// macOS Notification Events (dynamic)\n// ============================================================================\n\n/**\n * Listen for macOS notification events (macOS)\n */\nexport function onNotification(callback: (data: NotificationEventData) => void): () => void {\n  return window.rpc.on(\"systemPreferences.notification\", callback as (...args: unknown[]) => void);\n}\n\n/**\n * Listen for macOS local notification events (macOS)\n */\nexport function onLocalNotification(callback: (data: NotificationEventData) => void): () => void {\n  return window.rpc.on(\n    \"systemPreferences.local-notification\",\n    callback as (...args: unknown[]) => void,\n  );\n}\n\n/**\n * Listen for macOS workspace notification events (macOS)\n */\nexport function onWorkspaceNotification(\n  callback: (data: NotificationEventData) => void,\n): () => void {\n  return window.rpc.on(\n    \"systemPreferences.workspace-notification\",\n    callback as (...args: unknown[]) => void,\n  );\n}\n"],"mappings":"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"}