{"version":3,"file":"useStore.mjs","sources":["../../../../src/lib/state/hooks/useStore.ts"],"sourcesContent":["/**\n * @file Store Hooks\n * @description Optimized hooks for store access with shallow equality and memoization\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { type StoreSelector, useStore } from '../store';\n\n// ============================================================================\n// Core Hooks\n// ============================================================================\n\n/**\n * Select state with custom equality function\n *\n * @example\n * ```typescript\n * const count = useStoreState((state) => state.count);\n * ```\n */\nexport function useStoreState<T>(selector: StoreSelector<T>): T {\n  return useStore(selector);\n}\n\n/**\n * Select state with shallow equality (recommended for objects/arrays)\n *\n * Use this when selecting objects or arrays to prevent unnecessary re-renders.\n *\n * @example\n * ```typescript\n * const settings = useShallowState((state) => ({\n *   locale: state.locale,\n *   timezone: state.timezone,\n * }));\n * ```\n */\nexport function useShallowState<T extends object>(selector: StoreSelector<T>): T {\n  return useStore(selector as unknown as StoreSelector<never>);\n}\n\n/**\n * Select an action (stable reference, never causes rerender)\n *\n * @example\n * ```typescript\n * const toggleSidebar = useStoreAction((state) => state.toggleSidebar);\n * ```\n */\nexport function useStoreAction<T extends (...args: never[]) => unknown>(\n  selector: StoreSelector<T>\n): T {\n  return useStore(selector);\n}\n\n// ============================================================================\n// Slice Hooks\n// ============================================================================\n\n/**\n * Use UI state (shallow comparison)\n */\nexport function useUIState(): {\n  sidebarOpen: boolean;\n  sidebarCollapsed: boolean;\n  activeModal: string | null;\n  modalData: Record<string, unknown> | null;\n  globalLoading: boolean;\n  loadingMessage: string | null;\n} {\n  return useStore((state) => ({\n    sidebarOpen: state.sidebarOpen,\n    sidebarCollapsed: state.sidebarCollapsed,\n    activeModal: state.activeModal,\n    modalData: state.modalData,\n    globalLoading: state.globalLoading,\n    loadingMessage: state.loadingMessage,\n  })) as {\n    sidebarOpen: boolean;\n    sidebarCollapsed: boolean;\n    activeModal: string | null;\n    modalData: Record<string, unknown> | null;\n    globalLoading: boolean;\n    loadingMessage: string | null;\n  };\n}\n\n/**\n * Use UI actions (stable references)\n */\nexport function useUIActions(): {\n  toggleSidebar: () => void;\n  setSidebarOpen: (open: boolean) => void;\n  setSidebarCollapsed: (collapsed: boolean) => void;\n  openModal: (id: string, data?: Record<string, unknown>) => void;\n  closeModal: () => void;\n  setGlobalLoading: (loading: boolean, message?: string) => void;\n} {\n  const toggleSidebar = useStore((s) => s.toggleSidebar);\n  const setSidebarOpen = useStore((s) => s.setSidebarOpen);\n  const setSidebarCollapsed = useStore((s) => s.setSidebarCollapsed);\n  const openModal = useStore((s) => s.openModal);\n  const closeModal = useStore((s) => s.closeModal);\n  const setGlobalLoading = useStore((s) => s.setGlobalLoading);\n\n  return {\n    toggleSidebar,\n    setSidebarOpen,\n    setSidebarCollapsed,\n    openModal,\n    closeModal,\n    setGlobalLoading,\n  };\n}\n\n/**\n * Use session state (shallow comparison)\n */\nexport function useSessionState(): {\n  sessionId: string | null;\n  isSessionActive: boolean;\n  lastActivity: number | null;\n  navigationHistory: string[];\n} {\n  return useStore((state) => ({\n    sessionId: state.sessionId,\n    isSessionActive: state.isSessionActive,\n    lastActivity: state.lastActivity,\n    navigationHistory: state.navigationHistory,\n  })) as {\n    sessionId: string | null;\n    isSessionActive: boolean;\n    lastActivity: number | null;\n    navigationHistory: string[];\n  };\n}\n\n/**\n * Use session actions (stable references)\n */\nexport function useSessionActions(): {\n  initSession: (sessionId: string, options?: { expiresInMs?: number; deviceId?: string }) => void;\n  updateActivity: () => void;\n  endSession: () => void;\n  addToHistory: (path: string) => void;\n  clearHistory: () => void;\n} {\n  const initSession = useStore((s) => s.initSession);\n  const updateActivity = useStore((s) => s.updateActivity);\n  const endSession = useStore((s) => s.endSession);\n  const addToHistory = useStore((s) => s.addToHistory);\n  const clearHistory = useStore((s) => s.clearHistory);\n\n  return {\n    initSession,\n    updateActivity,\n    endSession,\n    addToHistory,\n    clearHistory,\n  };\n}\n\n/**\n * Use settings state (shallow comparison)\n */\nexport function useSettingsState(): {\n  locale: string;\n  timezone: string;\n  dateFormat: string;\n  timeFormat: string;\n  numberFormat: string;\n  notificationsEnabled: boolean;\n  soundEnabled: boolean;\n  desktopNotifications: boolean;\n  reducedMotion: boolean;\n  highContrast: boolean;\n  fontSize: string;\n} {\n  return useStore((state) => ({\n    locale: state.locale,\n    timezone: state.timezone,\n    dateFormat: state.dateFormat,\n    timeFormat: state.timeFormat,\n    numberFormat: state.numberFormat,\n    notificationsEnabled: state.notificationsEnabled,\n    soundEnabled: state.soundEnabled,\n    desktopNotifications: state.desktopNotifications,\n    reducedMotion: state.reducedMotion,\n    highContrast: state.highContrast,\n    fontSize: state.fontSize,\n  })) as {\n    locale: string;\n    timezone: string;\n    dateFormat: string;\n    timeFormat: string;\n    numberFormat: string;\n    notificationsEnabled: boolean;\n    soundEnabled: boolean;\n    desktopNotifications: boolean;\n    reducedMotion: boolean;\n    highContrast: boolean;\n    fontSize: string;\n  };\n}\n\n/**\n * Use settings actions (stable references)\n */\nexport function useSettingsActions(): {\n  setLocale: (locale: string) => void;\n  setTimezone: (timezone: string) => void;\n  setDateFormat: (format: string) => void;\n  setTimeFormat: (format: string) => void;\n  setNotificationsEnabled: (enabled: boolean) => void;\n  setSoundEnabled: (enabled: boolean) => void;\n  setDesktopNotifications: (enabled: boolean) => void;\n  setReducedMotion: (enabled: boolean) => void;\n  setHighContrast: (enabled: boolean) => void;\n  setFontSize: (size: string) => void;\n  resetSettings: () => void;\n} {\n  const setLocale = useStore((s) => s.setLocale);\n  const setTimezone = useStore((s) => s.setTimezone);\n  const setDateFormat = useStore((s) => s.setDateFormat);\n  const setTimeFormat = useStore((s) => s.setTimeFormat);\n  const setNotificationsEnabled = useStore((s) => s.setNotificationsEnabled);\n  const setSoundEnabled = useStore((s) => s.setSoundEnabled);\n  const setDesktopNotifications = useStore((s) => s.setDesktopNotifications);\n  const setReducedMotion = useStore((s) => s.setReducedMotion);\n  const setHighContrast = useStore((s) => s.setHighContrast);\n  const setFontSize = useStore((s) => s.setFontSize);\n  const resetSettings = useStore((s) => s.resetSettings);\n\n  return {\n    setLocale,\n    setTimezone,\n    setDateFormat,\n    setTimeFormat: setTimeFormat as (format: string) => void,\n    setNotificationsEnabled,\n    setSoundEnabled,\n    setDesktopNotifications,\n    setReducedMotion,\n    setHighContrast,\n    setFontSize: setFontSize as (size: string) => void,\n    resetSettings,\n  };\n}\n\n// ============================================================================\n// Convenience Hooks\n// ============================================================================\n\n/**\n * Use sidebar state and actions\n * Combined into single subscription with shallow equality for performance\n */\nexport function useSidebar(): {\n  isOpen: boolean;\n  isCollapsed: boolean;\n  toggle: () => void;\n  setOpen: (open: boolean) => void;\n  setCollapsed: (collapsed: boolean) => void;\n} {\n  return useStore((state) => ({\n    isOpen: state.sidebarOpen,\n    isCollapsed: state.sidebarCollapsed,\n    toggle: state.toggleSidebar,\n    setOpen: state.setSidebarOpen,\n    setCollapsed: state.setSidebarCollapsed,\n  }));\n}\n\n/**\n * Use modal state and actions\n * Combined into single subscription with shallow equality for performance\n */\nexport function useModal<T extends Record<string, unknown> = Record<string, unknown>>(): {\n  activeModal: string | null;\n  data: T | null;\n  isOpen: boolean;\n  open: (id: string, data?: Record<string, unknown>) => void;\n  close: () => void;\n} {\n  const { activeModal, modalData, open, close } = useStore((state) => ({\n    activeModal: state.activeModal,\n    modalData: state.modalData,\n    open: state.openModal,\n    close: state.closeModal,\n  })) as {\n    activeModal: string | null;\n    modalData: Record<string, unknown> | null;\n    open: (id: string, data?: Record<string, unknown>) => void;\n    close: () => void;\n  };\n\n  return {\n    activeModal,\n    data: modalData as T | null,\n    isOpen: activeModal !== null,\n    open,\n    close,\n  };\n}\n\n/**\n * Check if a specific modal is open\n */\nexport function useIsModalOpen(modalId: string): boolean {\n  return useStore((state) => state.activeModal === modalId);\n}\n\n/**\n * Use loading state and actions\n * Combined into single subscription with shallow equality for performance\n */\nexport function useLoading(): {\n  isLoading: boolean;\n  message: string | null;\n  start: (loadingMessage?: string) => void;\n  stop: () => void;\n} {\n  const { isLoading, message, setGlobalLoading } = useStore((state) => ({\n    isLoading: state.globalLoading,\n    message: state.loadingMessage,\n    setGlobalLoading: state.setGlobalLoading,\n  })) as {\n    isLoading: boolean;\n    message: string | null;\n    setGlobalLoading: (loading: boolean, message?: string) => void;\n  };\n\n  const start = useCallback(\n    (loadingMessage?: string) => setGlobalLoading(true, loadingMessage),\n    [setGlobalLoading]\n  );\n\n  const stop = useCallback(() => setGlobalLoading(false), [setGlobalLoading]);\n\n  return {\n    isLoading,\n    message,\n    start,\n    stop,\n  };\n}\n\n/**\n * Use display settings (memoized)\n */\nexport function useDisplaySettings(): {\n  locale: string;\n  timezone: string;\n  dateFormat: string;\n  timeFormat: string;\n  numberFormat: string;\n} {\n  return useStore((state) => ({\n    locale: state.locale,\n    timezone: state.timezone,\n    dateFormat: state.dateFormat,\n    timeFormat: state.timeFormat,\n    numberFormat: state.numberFormat,\n  })) as {\n    locale: string;\n    timezone: string;\n    dateFormat: string;\n    timeFormat: string;\n    numberFormat: string;\n  };\n}\n\n/**\n * Use accessibility settings (memoized)\n */\nexport function useAccessibilitySettings(): {\n  reducedMotion: boolean;\n  highContrast: boolean;\n  fontSize: string;\n} {\n  return useStore((state) => ({\n    reducedMotion: state.reducedMotion,\n    highContrast: state.highContrast,\n    fontSize: state.fontSize,\n  })) as {\n    reducedMotion: boolean;\n    highContrast: boolean;\n    fontSize: string;\n  };\n}\n\n/**\n * Use notification settings (memoized)\n */\nexport function useNotificationSettings(): {\n  notificationsEnabled: boolean;\n  soundEnabled: boolean;\n  desktopNotifications: boolean;\n} {\n  return useStore((state) => ({\n    notificationsEnabled: state.notificationsEnabled,\n    soundEnabled: state.soundEnabled,\n    desktopNotifications: state.desktopNotifications,\n  })) as {\n    notificationsEnabled: boolean;\n    soundEnabled: boolean;\n    desktopNotifications: boolean;\n  };\n}\n\n// ============================================================================\n// Advanced Hooks\n// ============================================================================\n\n/**\n * Subscribe to store changes with callback (for side effects)\n *\n * @example\n * ```typescript\n * useStoreSubscription(\n *   (state) => state.locale,\n *   (newLocale, oldLocale) => {\n *     console.log(`Locale changed from ${oldLocale} to ${newLocale}`);\n *   }\n * );\n * ```\n */\nexport function useStoreSubscription<T>(\n  selector: StoreSelector<T>,\n  callback: (value: T, prevValue: T) => void,\n  options?: { fireImmediately?: boolean }\n): void {\n  const callbackRef = useRef(callback);\n  const selectorRef = useRef(selector);\n\n  // Update refs in useEffect to avoid accessing during render\n  useEffect(() => {\n    callbackRef.current = callback;\n    selectorRef.current = selector;\n  });\n\n  useEffect(() => {\n    let prevValue = selectorRef.current(useStore.getState());\n\n    if (options?.fireImmediately === true) {\n      callbackRef.current(prevValue, prevValue);\n    }\n\n    return useStore.subscribe((state) => {\n      const newValue = selectorRef.current(state);\n      if (!Object.is(newValue, prevValue)) {\n        callbackRef.current(newValue, prevValue);\n        prevValue = newValue;\n      }\n    });\n  }, [options?.fireImmediately]);\n}\n\n/**\n * Debounced state selector\n *\n * @example\n * ```typescript\n * const debouncedSearch = useDebouncedState(\n *   (state) => state.searchQuery,\n *   300\n * );\n * ```\n */\nexport function useDebouncedState<T>(selector: StoreSelector<T>, delay: number = 300): T {\n  const value = useStore(selector);\n  const [debouncedValue, setDebouncedValue] = useState(value);\n  const timeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\n  useEffect(() => {\n    timeoutRef.current = setTimeout(() => {\n      setDebouncedValue(value);\n    }, delay);\n\n    return () => {\n      if (timeoutRef.current !== undefined) {\n        clearTimeout(timeoutRef.current);\n      }\n    };\n  }, [value, delay]);\n\n  return debouncedValue;\n}\n\n/**\n * Get previous value of a selector\n *\n * @example\n * ```typescript\n * const currentCount = useStore((s) => s.count);\n * const previousCount = usePreviousState((s) => s.count);\n * ```\n */\nexport function usePreviousState<T>(selector: StoreSelector<T>): T | undefined {\n  const value = useStore(selector);\n  const [prevValue, setPrevValue] = useState<T | undefined>(undefined);\n\n  useEffect(() => {\n    setPrevValue(value);\n  }, [value]);\n\n  return prevValue;\n}\n\n/**\n * Track if value has changed since component mounted\n *\n * @example\n * ```typescript\n * const { value, hasChanged, changeCount } = useStateChange((s) => s.count);\n * ```\n */\nexport function useStateChange<T>(selector: StoreSelector<T>): {\n  value: T;\n  initialValue: T;\n  hasChanged: boolean;\n  changeCount: number;\n} {\n  const value = useStore(selector);\n  const [state, setState] = useState(() => ({\n    initialValue: value,\n    prevValue: value,\n    changeCount: 0,\n  }));\n\n  // Derive new state if value changed\n  if (!Object.is(value, state.prevValue)) {\n    setState({\n      initialValue: state.initialValue,\n      prevValue: value,\n      changeCount: state.changeCount + 1,\n    });\n  }\n\n  return {\n    value,\n    initialValue: state.initialValue,\n    hasChanged: !Object.is(value, state.initialValue),\n    changeCount: state.changeCount,\n  };\n}\n\n// ============================================================================\n// Hydration Hook\n// ============================================================================\n\n/**\n * Wait for store hydration before rendering\n *\n * @example\n * ```typescript\n * function App() {\n *   const { hasHydrated, isHydrating } = useHydration();\n *\n *   if (isHydrating) {\n *     return <LoadingScreen />;\n *   }\n *\n *   return <MainApp />;\n * }\n * ```\n */\nexport function useHydration(): {\n  hasHydrated: boolean;\n  isHydrating: boolean;\n} {\n  const [hasHydrated, setHasHydrated] = useState(() => {\n    // Check if already hydrated (for SSR)\n    const state = useStore.getState();\n    return (state as { _hasHydrated?: boolean })._hasHydrated ?? true;\n  });\n\n  useEffect(() => {\n    const state = useStore.getState();\n    if ((state as { _hasHydrated?: boolean })._hasHydrated) {\n      // Use queueMicrotask to avoid calling setState synchronously in effect\n      queueMicrotask(() => {\n        setHasHydrated(true);\n      });\n      return;\n    }\n\n    return useStore.subscribe((state) => {\n      if ((state as { _hasHydrated?: boolean })._hasHydrated) {\n        setHasHydrated(true);\n      }\n    });\n  }, []);\n\n  return {\n    hasHydrated,\n    isHydrating: !hasHydrated,\n  };\n}\n"],"names":["useStoreState","selector","useStore","useShallowState","useStoreAction","useUIState","state","useUIActions","toggleSidebar","s","setSidebarOpen","setSidebarCollapsed","openModal","closeModal","setGlobalLoading","useSessionState","useSessionActions","initSession","updateActivity","endSession","addToHistory","clearHistory","useSettingsState","useSettingsActions","setLocale","setTimezone","setDateFormat","setTimeFormat","setNotificationsEnabled","setSoundEnabled","setDesktopNotifications","setReducedMotion","setHighContrast","setFontSize","resetSettings","useSidebar","useModal","activeModal","modalData","open","close","useIsModalOpen","modalId","useLoading","isLoading","message","start","useCallback","loadingMessage","stop","useDisplaySettings","useAccessibilitySettings","useNotificationSettings","useStoreSubscription","callback","options","callbackRef","useRef","selectorRef","useEffect","prevValue","newValue","useDebouncedState","delay","value","debouncedValue","setDebouncedValue","useState","timeoutRef","usePreviousState","setPrevValue","useStateChange","setState","useHydration","hasHydrated","setHasHydrated"],"mappings":"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"}