import type { QuotaInfo } from '../lib/billing/types';
/**
 * Unified hook providing subscription, features, limits, and canDo() method
 *
 * This hook integrates RBAC permissions (from TeamContext), feature access (from Plan),
 * and quota enforcement (from Limits) into a single DX-friendly interface.
 *
 * FIX2: Refactored to avoid React hooks violations:
 * - hasFeature() now uses cached features from context (no hook calls)
 * - getQuota() returns sync cached data
 * - Added getQuotaAsync() for full quota info with current usage
 *
 * @example
 * ```tsx
 * const membership = useMembership()
 *
 * // Check subscription info
 * console.log(membership.plan.name) // 'Pro'
 * console.log(membership.subscription.status) // 'active'
 *
 * // Check feature access (sync, cached)
 * if (membership.hasFeature('advanced_analytics')) {
 *   // Show analytics
 * }
 *
 * // Check quota limits (sync, cached)
 * const projectsLimit = membership.getQuota('projects')
 * console.log(projectsLimit.max, projectsLimit.resetPeriod)
 *
 * // Get full quota info with current usage (async)
 * const projectsQuota = await membership.getQuotaAsync('projects')
 * console.log(projectsQuota.current, projectsQuota.max)
 *
 * // Unified permission check (Permission + Feature + Quota)
 * const canCreateProject = await membership.canDo('projects.create')
 * if (canCreateProject.allowed) {
 *   // Create project
 * } else {
 *   toast.error(canCreateProject.reason)
 * }
 * ```
 */
export declare function useMembership(): {
    plan: import("../lib/billing/types").Plan;
    subscription: import("../lib/billing/types").SubscriptionWithPlan;
    status: import("../lib/billing/types").SubscriptionStatus;
    isTrialing: boolean;
    isActive: boolean;
    isPastDue: boolean;
    isCanceled: boolean;
    isLoading: boolean;
    hasFeature: (featureSlug: string) => boolean;
    getQuota: (limitSlug: string) => {
        max: number;
        resetPeriod: string;
    } | null;
    getQuotaAsync: (limitSlug: string) => Promise<QuotaInfo | null>;
    canDo: (action: string) => Promise<{
        allowed: boolean;
        reason?: string;
    }>;
    refetch: () => void;
};
//# sourceMappingURL=useMembership.d.ts.map