import { UISettings } from './types'; /** * XSTATE SELECTORS * * These selector functions provide STABLE references to state values, * preventing unnecessary re-renders and eliminating infinite loop possibilities. * * IMPORTANT RULES: * 1. Components should ONLY use these selectors to access state * 2. NEVER access state.context directly * 3. Selectors only return PUBLIC settings - internal state is never exposed * 4. XState's useSelector hook memoizes these, ensuring stable references * * WHY THIS WORKS: * - Even if context.internal.configModel changes (new reference), * context.public remains stable (same values = same reference after JSON comparison) * - useSelector only triggers re-render if the RETURNED value changes * - No manual filtering needed - separation is built into the structure */ /** * Select all UI settings (excludes internal machine state) * * This is the primary selector for getting user-facing settings. * XState's useSelector will automatically memoize this, so it only * re-renders when the UI settings actually change. * * @example * const settings = useSelector(actor, selectPublicSettings); */ export declare const selectPublicSettings: (state: any) => UISettings; /** * Select only changed settings (for save button state). * Use this to check if there are unsaved changes. * * @example * const changedSettings = useSelector(actor, selectChangedSettings); * const hasChanges = Object.keys(changedSettings).length > 0; */ export declare const selectChangedSettings: (state: any) => Record; /** * Select current device type (desktop/mobile). * Use this to check which device mode is active. * * @example * const deviceType = useSelector(actor, selectDeviceType); */ export declare const selectDeviceType: (state: any) => "desktop" | "mobile"; /** * Select current route path. * Use this to check which route is active. * * @example * const currentRoute = useSelector(actor, selectCurrentRoute); */ export declare const selectCurrentRoute: (state: any) => string; /** * Select a specific setting by key. * Returns a selector function that extracts a specific setting value. * * @example * const navTheme = useSelector(actor, selectSetting('navTheme')); * const primaryColor = useSelector(actor, selectSetting('primaryColor')); */ export declare const selectSetting: (key: keyof UISettings) => (state: any) => any; /** * Select navigation theme specifically. * Commonly used setting, provided as convenience. * * @example * const navTheme = useSelector(actor, selectNavTheme); */ export declare const selectNavTheme: (state: any) => "light" | "dark" | "realDark"; /** * Select primary color specifically. * Commonly used setting, provided as convenience. * * @example * const primaryColor = useSelector(actor, selectPrimaryColor); */ export declare const selectPrimaryColor: (state: any) => string; /** * Select whether settings panel should be shown. * Use this to control settings drawer visibility. * * @example * const showSettingPanel = useSelector(actor, selectShowSettingPanel); */ export declare const selectShowSettingPanel: (state: any) => boolean; /** * Select menu visibility settings. * Returns both hiddenMenuKeys and hiddenMenuCategories. * * @example * const { hiddenMenuKeys, hiddenMenuCategories } = useSelector(actor, selectMenuVisibility); */ export declare const selectMenuVisibility: (state: any) => { hiddenMenuKeys: string[]; hiddenMenuCategories: string[]; }; /** * Check if there are unsaved changes. * Use this for save button disabled state. * * @example * const hasUnsavedChanges = useSelector(actor, selectHasUnsavedChanges); */ export declare const selectHasUnsavedChanges: (state: any) => boolean; /** * COMPARISON HELPER * * Use this to compare settings between renders without triggering infinite loops. * This performs a deep comparison of UI settings only. * * @example * const settingsChanged = !areUISettingsEqual(prevSettings, currentSettings); */ export declare const areUISettingsEqual: (a: UISettings, b: UISettings) => boolean; //# sourceMappingURL=selectors.d.ts.map