{"version":3,"file":"index.mjs","sources":["../../../../src/lib/state/selectors/index.ts"],"sourcesContent":["/**\n * @file Memoized Selectors\n * @description Type-safe selectors with automatic memoization for optimal performance\n *\n * SELECTOR STRATEGY:\n * - Primitive selectors (strings, numbers, booleans): No memoization needed\n * - Object selectors: Use createObjectSelector for stable references\n * - Array selectors: Use createArraySelector for stable references\n * - Computed selectors: Use createSelector for dependency-based memoization\n *\n * USAGE:\n * - Use primitive selectors for simple values: useStore(selectLocale)\n * - Use memoized selectors for objects: useStore(selectDisplaySettings)\n * - Use action selectors with shallow: useStore(selectUIActions, shallow)\n */\n\nimport { useStore, type StoreState, type StoreSelector } from '../store';\nimport {\n  createSelector,\n  createObjectSelector,\n  createParameterizedSelector,\n} from '../core/createSelectors';\n\n// ============================================================================\n// Primitive Selectors (No memoization needed - identity equality)\n// ============================================================================\n\n// UI State\nexport const selectSidebarOpen = (state: StoreState): boolean => state.sidebarOpen;\nexport const selectSidebarCollapsed = (state: StoreState): boolean => state.sidebarCollapsed;\nexport const selectActiveModal = (state: StoreState): string | null => state.activeModal;\nexport const selectModalData = (state: StoreState): Record<string, unknown> | null =>\n  state.modalData;\nexport const selectModalStack = (state: StoreState): StoreState['modalStack'] => state.modalStack;\nexport const selectGlobalLoading = (state: StoreState): boolean => state.globalLoading;\nexport const selectLoadingMessage = (state: StoreState): string | null => state.loadingMessage;\nexport const selectLoadingProgress = (state: StoreState): number | null => state.loadingProgress;\nexport const selectToasts = (state: StoreState): StoreState['toasts'] => state.toasts;\nexport const selectLayoutDensity = (state: StoreState): StoreState['layoutDensity'] =>\n  state.layoutDensity;\nexport const selectAnimationsEnabled = (state: StoreState): boolean => state.animationsEnabled;\nexport const selectCommandPaletteOpen = (state: StoreState): boolean => state.commandPaletteOpen;\n\n// Session State\nexport const selectSessionId = (state: StoreState): string | null => state.sessionId;\nexport const selectIsSessionActive = (state: StoreState): boolean => state.isSessionActive;\nexport const selectLastActivity = (state: StoreState): number | null => state.lastActivity;\nexport const selectSessionStartedAt = (state: StoreState): number | null => state.sessionStartedAt;\nexport const selectSessionExpiresAt = (state: StoreState): number | null => state.sessionExpiresAt;\nexport const selectActivityTimeoutMs = (state: StoreState): number => state.activityTimeoutMs;\nexport const selectNavigationHistory = (state: StoreState): string[] => state.navigationHistory;\nexport const selectMaxHistoryLength = (state: StoreState): number => state.maxHistoryLength;\nexport const selectDeviceId = (state: StoreState): string | null => state.deviceId;\nexport const selectBrowserTabId = (state: StoreState): string | null => state.browserTabId;\n\n// Settings State\nexport const selectLocale = (state: StoreState): string => state.locale;\nexport const selectTimezone = (state: StoreState): string => state.timezone;\nexport const selectDateFormat = (state: StoreState): string => state.dateFormat;\nexport const selectTimeFormat = (state: StoreState): StoreState['timeFormat'] => state.timeFormat;\nexport const selectNumberFormat = (state: StoreState): string => state.numberFormat;\nexport const selectTheme = (state: StoreState): StoreState['theme'] => state.theme;\nexport const selectNotificationsEnabled = (state: StoreState): boolean =>\n  state.notificationsEnabled;\nexport const selectSoundEnabled = (state: StoreState): boolean => state.soundEnabled;\nexport const selectDesktopNotifications = (state: StoreState): boolean =>\n  state.desktopNotifications;\nexport const selectEmailNotifications = (state: StoreState): boolean => state.emailNotifications;\nexport const selectReducedMotion = (state: StoreState): boolean => state.reducedMotion;\nexport const selectHighContrast = (state: StoreState): boolean => state.highContrast;\nexport const selectFontSize = (state: StoreState): StoreState['fontSize'] => state.fontSize;\nexport const selectKeyboardShortcutsEnabled = (state: StoreState): boolean =>\n  state.keyboardShortcutsEnabled;\nexport const selectFeatures = (state: StoreState): Record<string, boolean> => state.features;\nexport const selectAnalyticsEnabled = (state: StoreState): boolean => state.analyticsEnabled;\nexport const selectCrashReportingEnabled = (state: StoreState): boolean =>\n  state.crashReportingEnabled;\n\n// Hydration State\nexport const selectHasHydrated = (state: StoreState): boolean => state._hasHydrated;\n\n// ============================================================================\n// Computed Selectors (Memoized)\n// ============================================================================\n\n/**\n * Is any modal currently open\n */\nexport const selectIsModalOpen = createSelector<StoreState, [string | null], boolean>(\n  [selectActiveModal],\n  (activeModal): boolean => activeModal !== null\n);\n\n/**\n * Has modal stack (for showing back button in nested modals)\n */\nexport const selectHasModalStack = createSelector<StoreState, [StoreState['modalStack']], boolean>(\n  [selectModalStack],\n  (stack): boolean => stack.length > 0\n);\n\n/**\n * Modal stack depth\n */\nexport const selectModalStackDepth = createSelector<StoreState, [StoreState['modalStack']], number>(\n  [selectModalStack],\n  (stack): number => stack.length\n);\n\n/**\n * Has any toasts\n */\nexport const selectHasToasts = createSelector<StoreState, [StoreState['toasts']], boolean>(\n  [selectToasts],\n  (toasts): boolean => toasts.length > 0\n);\n\n/**\n * Toast count\n */\nexport const selectToastCount = createSelector<StoreState, [StoreState['toasts']], number>(\n  [selectToasts],\n  (toasts): number => toasts.length\n);\n\n/**\n * Navigation history length\n */\nexport const selectNavigationHistoryLength = createSelector<StoreState, [string[]], number>(\n  [selectNavigationHistory],\n  (history): number => history.length\n);\n\n/**\n * Last visited path\n */\nexport const selectLastVisitedPath = createSelector<StoreState, [string[]], string | null>(\n  [selectNavigationHistory],\n  (history): string | null => history[history.length - 1] ?? null\n);\n\n/**\n * Session duration in milliseconds (null if no session)\n *\n * @deprecated This selector uses Date.now() which breaks memoization - the combiner\n * returns a new value on every call, defeating the purpose of createSelector.\n * Use the `useSessionDuration` hook instead for proper time-based calculations.\n *\n * @see useSessionDuration in state/hooks/useSessionTime.ts\n */\nexport const selectSessionDuration = createSelector<StoreState, [number | null], number | null>(\n  [selectSessionStartedAt],\n  (startedAt): number | null => (startedAt !== null ? Date.now() - startedAt : null)\n);\n\n/**\n * Time until session expires (null if no expiry set)\n *\n * @deprecated This selector uses Date.now() which breaks memoization - the combiner\n * returns a new value on every call, defeating the purpose of createSelector.\n * Use the `useTimeUntilExpiry` hook instead for proper time-based calculations.\n *\n * @see useTimeUntilExpiry in state/hooks/useSessionTime.ts\n */\nexport const selectTimeUntilExpiry = createSelector<StoreState, [number | null], number | null>(\n  [selectSessionExpiresAt],\n  (expiresAt): number | null => (expiresAt !== null ? Math.max(0, expiresAt - Date.now()) : null)\n);\n\n/**\n * Is session expired\n *\n * @deprecated This selector uses Date.now() which breaks memoization - the combiner\n * returns a new value on every call, defeating the purpose of createSelector.\n * Use the `useIsSessionExpired` hook instead for proper time-based calculations.\n *\n * @see useIsSessionExpired in state/hooks/useSessionTime.ts\n */\nexport const selectIsSessionExpired = createSelector<\n  StoreState,\n  [number | null, number | null, number],\n  boolean\n>(\n  [selectSessionExpiresAt, selectLastActivity, selectActivityTimeoutMs],\n  (expiresAt, lastActivity, timeoutMs): boolean => {\n    const now = Date.now();\n    if (expiresAt !== null && now > expiresAt) return true;\n    return lastActivity !== null && now - lastActivity > timeoutMs;\n  }\n);\n\n// ============================================================================\n// Object Selectors (Memoized with shallow equality)\n// ============================================================================\n\n/**\n * Display settings bundle\n * Returns stable reference when underlying values haven't changed\n */\nexport const selectDisplaySettings = createObjectSelector((state: StoreState) => ({\n  locale: state.locale,\n  timezone: state.timezone,\n  dateFormat: state.dateFormat,\n  timeFormat: state.timeFormat,\n  numberFormat: state.numberFormat,\n  theme: state.theme,\n}));\n\n/**\n * Accessibility settings bundle\n */\nexport const selectAccessibilitySettings = createObjectSelector((state: StoreState) => ({\n  reducedMotion: state.reducedMotion,\n  highContrast: state.highContrast,\n  fontSize: state.fontSize,\n  keyboardShortcutsEnabled: state.keyboardShortcutsEnabled,\n  animationsEnabled: state.animationsEnabled,\n}));\n\n/**\n * Notification settings bundle\n */\nexport const selectNotificationSettings = createObjectSelector((state: StoreState) => ({\n  notificationsEnabled: state.notificationsEnabled,\n  soundEnabled: state.soundEnabled,\n  desktopNotifications: state.desktopNotifications,\n  emailNotifications: state.emailNotifications,\n}));\n\n/**\n * Privacy settings bundle\n */\nexport const selectPrivacySettings = createObjectSelector((state: StoreState) => ({\n  analyticsEnabled: state.analyticsEnabled,\n  crashReportingEnabled: state.crashReportingEnabled,\n}));\n\n/**\n * UI preferences bundle\n */\nexport const selectUIPreferences = createObjectSelector((state: StoreState) => ({\n  sidebarOpen: state.sidebarOpen,\n  sidebarCollapsed: state.sidebarCollapsed,\n  layoutDensity: state.layoutDensity,\n  animationsEnabled: state.animationsEnabled,\n}));\n\n/**\n * Session info bundle\n */\nexport const selectSessionInfo = createObjectSelector((state: StoreState) => ({\n  sessionId: state.sessionId,\n  isActive: state.isSessionActive,\n  startedAt: state.sessionStartedAt,\n  expiresAt: state.sessionExpiresAt,\n  lastActivity: state.lastActivity,\n  deviceId: state.deviceId,\n  browserTabId: state.browserTabId,\n}));\n\n/**\n * Loading state bundle\n */\nexport const selectLoadingState = createObjectSelector((state: StoreState) => ({\n  isLoading: state.globalLoading,\n  message: state.loadingMessage,\n  progress: state.loadingProgress,\n}));\n\n/**\n * Modal state bundle\n */\nexport const selectModalState = createObjectSelector((state: StoreState) => ({\n  activeModal: state.activeModal,\n  modalData: state.modalData,\n  stackDepth: state.modalStack.length,\n  hasStack: state.modalStack.length > 0,\n}));\n\n// ============================================================================\n// Parameterized Selectors\n// ============================================================================\n\n/**\n * Check if a specific feature flag is enabled\n *\n * @example\n * const isNewDashboardEnabled = useStore(selectFeatureFlag('newDashboard'));\n */\nexport const selectFeatureFlag = createParameterizedSelector(\n  (flag: string) => (state: StoreState) => state.features[flag] ?? false\n);\n\n/**\n * Check if a specific modal is open\n *\n * @example\n * const isSettingsModalOpen = useStore(selectIsSpecificModalOpen('settings'));\n */\nexport const selectIsSpecificModalOpen = createParameterizedSelector(\n  (modalId: string) => (state: StoreState) => state.activeModal === modalId\n);\n\n/**\n * Get toast by ID\n *\n * @example\n * const toast = useStore(selectToastById('toast-123'));\n */\nexport const selectToastById = createParameterizedSelector(\n  (toastId: string) => (state: StoreState) => state.toasts.find((t) => t.id === toastId) ?? null\n);\n\n// ============================================================================\n// Action Selectors (Stable references - use with shallow)\n// ============================================================================\n\n/**\n * UI actions selector\n * Actions are stable references, but return new object each time.\n * Use with shallow equality: useStore(selectUIActions, shallow)\n */\nexport const selectUIActions = (\n  state: StoreState\n): Pick<\n  StoreState,\n  | 'toggleSidebar'\n  | 'setSidebarOpen'\n  | 'setSidebarCollapsed'\n  | 'openModal'\n  | 'closeModal'\n  | 'closeAllModals'\n  | 'setGlobalLoading'\n  | 'setLoadingProgress'\n  | 'addToast'\n  | 'removeToast'\n  | 'clearToasts'\n  | 'setLayoutDensity'\n  | 'setAnimationsEnabled'\n  | 'toggleCommandPalette'\n  | 'setCommandPaletteOpen'\n> => ({\n  toggleSidebar: state.toggleSidebar,\n  setSidebarOpen: state.setSidebarOpen,\n  setSidebarCollapsed: state.setSidebarCollapsed,\n  openModal: state.openModal,\n  closeModal: state.closeModal,\n  closeAllModals: state.closeAllModals,\n  setGlobalLoading: state.setGlobalLoading,\n  setLoadingProgress: state.setLoadingProgress,\n  addToast: state.addToast,\n  removeToast: state.removeToast,\n  clearToasts: state.clearToasts,\n  setLayoutDensity: state.setLayoutDensity,\n  setAnimationsEnabled: state.setAnimationsEnabled,\n  toggleCommandPalette: state.toggleCommandPalette,\n  setCommandPaletteOpen: state.setCommandPaletteOpen,\n});\n\n/**\n * Session actions selector\n */\nexport const selectSessionActions = (\n  state: StoreState\n): Pick<\n  StoreState,\n  | 'initSession'\n  | 'updateActivity'\n  | 'endSession'\n  | 'checkSessionExpiry'\n  | 'extendSession'\n  | 'addToHistory'\n  | 'removeFromHistory'\n  | 'clearHistory'\n  | 'getLastVisitedPath'\n  | 'goBack'\n  | 'setActivityTimeout'\n  | 'setMaxHistoryLength'\n  | 'setBrowserTabId'\n> => ({\n  initSession: state.initSession,\n  updateActivity: state.updateActivity,\n  endSession: state.endSession,\n  checkSessionExpiry: state.checkSessionExpiry,\n  extendSession: state.extendSession,\n  addToHistory: state.addToHistory,\n  removeFromHistory: state.removeFromHistory,\n  clearHistory: state.clearHistory,\n  getLastVisitedPath: state.getLastVisitedPath,\n  goBack: state.goBack,\n  setActivityTimeout: state.setActivityTimeout,\n  setMaxHistoryLength: state.setMaxHistoryLength,\n  setBrowserTabId: state.setBrowserTabId,\n});\n\n/**\n * Settings actions selector\n *\n * Note: Fixed bug where setNumberFormat was incorrectly returning state.numberFormat (value)\n * instead of state.setNumberFormat (action function).\n */\nexport const selectSettingsActions = (\n  state: StoreState\n): Pick<\n  StoreState,\n  | 'setLocale'\n  | 'setTimezone'\n  | 'setDateFormat'\n  | 'setTimeFormat'\n  | 'setNumberFormat'\n  | 'setTheme'\n  | 'setNotificationsEnabled'\n  | 'setSoundEnabled'\n  | 'setDesktopNotifications'\n  | 'setEmailNotifications'\n  | 'setReducedMotion'\n  | 'setHighContrast'\n  | 'setFontSize'\n  | 'setKeyboardShortcutsEnabled'\n  | 'setAnalyticsEnabled'\n  | 'setCrashReportingEnabled'\n  | 'updateSettings'\n  | 'updateDisplaySettings'\n  | 'updateAccessibilitySettings'\n  | 'updateNotificationSettings'\n  | 'updatePrivacySettings'\n  | 'setFeatureFlag'\n  | 'setFeatureFlags'\n  | 'syncFeatureFlags'\n  | 'isFeatureEnabled'\n  | 'resetSettings'\n  | 'resetDisplaySettings'\n  | 'resetAccessibilitySettings'\n  | 'resetNotificationSettings'\n> => ({\n  setLocale: state.setLocale,\n  setTimezone: state.setTimezone,\n  setDateFormat: state.setDateFormat,\n  setTimeFormat: state.setTimeFormat,\n  setNumberFormat: state.setNumberFormat,\n  setTheme: state.setTheme,\n  setNotificationsEnabled: state.setNotificationsEnabled,\n  setSoundEnabled: state.setSoundEnabled,\n  setDesktopNotifications: state.setDesktopNotifications,\n  setEmailNotifications: state.setEmailNotifications,\n  setReducedMotion: state.setReducedMotion,\n  setHighContrast: state.setHighContrast,\n  setFontSize: state.setFontSize,\n  setKeyboardShortcutsEnabled: state.setKeyboardShortcutsEnabled,\n  setAnalyticsEnabled: state.setAnalyticsEnabled,\n  setCrashReportingEnabled: state.setCrashReportingEnabled,\n  updateSettings: state.updateSettings,\n  updateDisplaySettings: state.updateDisplaySettings,\n  updateAccessibilitySettings: state.updateAccessibilitySettings,\n  updateNotificationSettings: state.updateNotificationSettings,\n  updatePrivacySettings: state.updatePrivacySettings,\n  setFeatureFlag: state.setFeatureFlag,\n  setFeatureFlags: state.setFeatureFlags,\n  syncFeatureFlags: state.syncFeatureFlags,\n  isFeatureEnabled: state.isFeatureEnabled,\n  resetSettings: state.resetSettings,\n  resetDisplaySettings: state.resetDisplaySettings,\n  resetAccessibilitySettings: state.resetAccessibilitySettings,\n  resetNotificationSettings: state.resetNotificationSettings,\n});\n\n// ============================================================================\n// Utility Hooks\n// ============================================================================\n\n/**\n * Use selector with proper typing\n */\nexport function useStoreSelector<T>(selector: StoreSelector<T>): T {\n  return useStore(selector);\n}\n\n/**\n * Use selector with shallow equality (for non-memoized objects/arrays)\n */\nexport function useShallowSelector<T>(selector: StoreSelector<T>): T {\n  return useStore(selector);\n}\n"],"names":["selectSidebarOpen","state","selectSidebarCollapsed","selectActiveModal","selectModalData","selectModalStack","selectGlobalLoading","selectLoadingMessage","selectLoadingProgress","selectToasts","selectLayoutDensity","selectAnimationsEnabled","selectCommandPaletteOpen","selectSessionId","selectIsSessionActive","selectLastActivity","selectSessionStartedAt","selectSessionExpiresAt","selectActivityTimeoutMs","selectNavigationHistory","selectMaxHistoryLength","selectDeviceId","selectBrowserTabId","selectLocale","selectTimezone","selectDateFormat","selectTimeFormat","selectNumberFormat","selectTheme","selectNotificationsEnabled","selectSoundEnabled","selectDesktopNotifications","selectEmailNotifications","selectReducedMotion","selectHighContrast","selectFontSize","selectKeyboardShortcutsEnabled","selectFeatures","selectAnalyticsEnabled","selectCrashReportingEnabled","selectHasHydrated","selectIsModalOpen","createSelector","activeModal","selectHasModalStack","stack","selectModalStackDepth","selectHasToasts","toasts","selectToastCount","selectNavigationHistoryLength","history","selectLastVisitedPath","selectSessionDuration","startedAt","selectTimeUntilExpiry","expiresAt","selectIsSessionExpired","lastActivity","timeoutMs","now","selectDisplaySettings","createObjectSelector","selectAccessibilitySettings","selectNotificationSettings","selectPrivacySettings","selectUIPreferences","selectSessionInfo","selectLoadingState","selectModalState","selectFeatureFlag","createParameterizedSelector","flag","selectIsSpecificModalOpen","modalId","selectToastById","toastId","t","selectUIActions","selectSessionActions","selectSettingsActions","useStoreSelector","selector","useStore","useShallowSelector"],"mappings":"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"}