import { JSX } from 'solid-js';
import { P as PermixDefinition, a as Permix, f as CheckFunctionObject, b as PermixStateJSON, h as CheckFunctionParams, e as PermixRules } from '../shared/permix.CuefdCK4.js';

/**
 * Provider that provides the Permix context to your Solid components.
 *
 * @link https://permix.letstri.dev/docs/integrations/solid
 */
declare function PermixProvider<Permissions extends PermixDefinition>(props: {
    children: JSX.Element;
    permix: Permix<Permissions>;
}): JSX.Element;
declare function PermixHydrate(props: {
    children: JSX.Element;
    state: PermixStateJSON<any>;
}): JSX.Element;
type CheckProps<Permissions extends PermixDefinition, K extends keyof Permissions> = CheckFunctionObject<Permissions, K> & {
    children: JSX.Element;
    otherwise?: JSX.Element;
    reverse?: boolean;
};
interface PermixComponents<Permissions extends PermixDefinition> {
    Check: <K extends keyof Permissions>(props: CheckProps<Permissions, K>) => JSX.Element;
}
declare function createComponents<Permissions extends PermixDefinition>(permix: Permix<Permissions>): PermixComponents<Permissions>;

interface PermixContext<T extends PermixDefinition> {
    permix: Permix<T>;
    isReady: boolean;
    rules: PermixRules<T>;
}
/**
 * Hook that provides the Permix reactive methods to your Solid components.
 *
 * @link https://permix.letstri.dev/docs/integrations/solid
 */
declare function usePermix<T extends PermixDefinition>(permix: Permix<T>): {
    check: <K extends keyof T>(...args: CheckFunctionParams<T, K>) => boolean;
    isReady: () => any;
};

export { PermixHydrate, PermixProvider, createComponents, usePermix };
export type { CheckProps, PermixComponents, PermixContext };
