import { EqualityFn } from 'react-redux';
export type SelectStateFieldFunction<TState = unknown, Selected = unknown> = (fieldName: string | Array<string>, defaultValue?: Selected | Selected[]) => (state: TState) => Selected;
export interface UseStateSelectorOptions<Selected = unknown> {
    defaultValue?: Selected | Array<Selected>;
    equalityFn?: EqualityFn<Selected>;
}
/**
 * Generic selector that receives a field selector function returned from getSelectField
 * @see /lib/api/helpers.ts#getSelectField
 * @param {SelectStateFieldFunction} selectStateFieldFunc the store state's field selector function
 * ```javascript
 *  // reducer.js
 * import { getSelectField } from 'elliemae/pui-app-sdk';
 *
 * const name = 'someState';
 * export selectStateFieldFunc = getSelectField(name);
 * ```
 * @param {string | Array<string>} fieldName the state's field you want to acccess, this accepts nested objects access, like so 'rootObj.childObj.field'
 * @param {useStateSelectorOptions} opts options { defaultValue, equalityFn }
 * @returns
 */
export declare function useStateSelector<TState = unknown, Selected = unknown>(selectStateFieldFunc: SelectStateFieldFunction<TState, Selected>, fieldName?: string | Array<string>, { defaultValue, equalityFn, }?: UseStateSelectorOptions<Selected>): Selected;
/**
 * Generic selector that receives a field selector function returned from getSelectField.
 * @see /lib/api/helpers.ts#getSelectField
 *
 * This is the same as useStateSelector with shallowEqual as default for equalityFn option.
 * @param {SelectStateFieldFunction} selectStateFieldFunc the store state's field selector function
 * ```javascript
 *  // reducer.js
 * import { getSelectField } from 'elliemae/pui-app-sdk';
 *
 * const name = 'someState';
 * export selectStateFieldFunc = getSelectField(name);
 * ```
 * @param {string | Array<string>} fieldName the state's field you want to acccess, this accepts nested objects access, like so 'rootObj.childObj.field'
 * @param {useStateSelectorOptions} opts options { defaultValue, equalityFn = shallowEqual }
 * @returns
 */
export declare function useStateSelectorShallow<TState = unknown, Selected = unknown>(selectStateFieldFunc: SelectStateFieldFunction<TState, Selected>, fieldName?: string | Array<string>, { defaultValue, equalityFn, }?: UseStateSelectorOptions<Selected>): Selected;
