{"version":3,"sources":["../../src/react/PermissionGate.tsx","../../src/react/RoleGate.tsx"],"names":["React"],"mappings":";;;AA4EO,SAAS,cAAA,CAAe;AAAA,EAC7B,QAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW;AACb,CAAA,EAAwB;AAEtB,EAAA,IAAI,UAAA,IAAc,CAAC,eAAA,CAAgB,QAAA,CAAS,UAAU,CAAA,EAAG;AACvD,IAAA,mEAAU,QAAS,CAAA;AAAA,EACrB;AAGA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,gBAAgB,UAAA,GAClB,WAAA,CAAY,KAAA,CAAM,CAAA,CAAA,KAAK,gBAAgB,QAAA,CAAS,CAAC,CAAC,CAAA,GAClD,YAAY,IAAA,CAAK,CAAA,CAAA,KAAK,eAAA,CAAgB,QAAA,CAAS,CAAC,CAAC,CAAA;AAErD,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,mEAAU,QAAS,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,mEAAU,QAAS,CAAA;AACrB;ACpCO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAAkB;AAChB,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBAAOA,MAAAA,CAAA,aAAA,CAAAA,MAAAA,CAAA,gBAAG,QAAS,CAAA;AAAA,EACrB;AAGA,EAAA,IAAI,IAAA,IAAQ,aAAa,IAAA,EAAM;AAC7B,IAAA,uBAAOA,MAAAA,CAAA,aAAA,CAAAA,MAAAA,CAAA,gBAAG,QAAS,CAAA;AAAA,EACrB;AAGA,EAAA,IAAI,KAAA,IAAS,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG;AACtC,IAAA,uBAAOA,MAAAA,CAAA,aAAA,CAAAA,MAAAA,CAAA,gBAAG,QAAS,CAAA;AAAA,EACrB;AAEA,EAAA,uBAAOA,MAAAA,CAAA,aAAA,CAAAA,MAAAA,CAAA,gBAAG,QAAS,CAAA;AACrB","file":"index.mjs","sourcesContent":["import React from 'react';\nimport type { Permission } from '../types';\n\ninterface PermissionGateProps {\n  children: React.ReactNode;\n  /**\n   * Single permission to check\n   */\n  permission?: Permission;\n  /**\n   * Multiple permissions to check\n   */\n  permissions?: Permission[];\n  /**\n   * User's permissions (pass from session or context)\n   */\n  userPermissions: Permission[];\n  /**\n   * If true, user must have ALL permissions. If false, user needs ANY permission.\n   * @default false\n   */\n  requireAll?: boolean;\n  /**\n   * Fallback content to render if permission check fails\n   * @default null\n   */\n  fallback?: React.ReactNode;\n}\n\n/**\n * Component that renders children only if user has required permissions\n *\n * @example\n * ```tsx\n * // Server Component\n * import { PermissionGate } from '@yourusername/next-rbac/react';\n * import { auth } from '@/auth';\n * import { getUserPermissions } from '@/lib/rbac';\n *\n * export default async function Page() {\n *   const session = await auth();\n *   const permissions = await getUserPermissions(session.user.id);\n *\n *   return (\n *     <PermissionGate\n *       permission=\"users.create\"\n *       userPermissions={permissions}\n *     >\n *       <button>Create User</button>\n *     </PermissionGate>\n *   );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Client Component with Context\n * 'use client';\n * import { PermissionGate } from '@yourusername/next-rbac/react';\n * import { usePermissions } from './hooks';\n *\n * export function MyComponent() {\n *   const { permissions } = usePermissions();\n *\n *   return (\n *     <PermissionGate\n *       permissions={['users.update', 'users.delete']}\n *       userPermissions={permissions}\n *       requireAll\n *     >\n *       <button>Edit & Delete</button>\n *     </PermissionGate>\n *   );\n * }\n * ```\n */\nexport function PermissionGate({\n  children,\n  permission,\n  permissions,\n  userPermissions,\n  requireAll = false,\n  fallback = null,\n}: PermissionGateProps) {\n  // Check single permission\n  if (permission && !userPermissions.includes(permission)) {\n    return <>{fallback}</>;\n  }\n\n  // Check multiple permissions\n  if (permissions) {\n    const hasPermission = requireAll\n      ? permissions.every(p => userPermissions.includes(p))\n      : permissions.some(p => userPermissions.includes(p));\n\n    if (!hasPermission) {\n      return <>{fallback}</>;\n    }\n  }\n\n  return <>{children}</>;\n}\n","import React from 'react';\nimport type { Role } from '../types';\n\ninterface RoleGateProps {\n  children: React.ReactNode;\n  /**\n   * Single role to check\n   */\n  role?: Role;\n  /**\n   * Multiple roles to check\n   */\n  roles?: Role[];\n  /**\n   * User's role (pass from session or context)\n   */\n  userRole: Role | null;\n  /**\n   * Fallback content to render if role check fails\n   * @default null\n   */\n  fallback?: React.ReactNode;\n}\n\n/**\n * Component that renders children only if user has required role\n *\n * @example\n * ```tsx\n * // Server Component\n * import { RoleGate } from '@yourusername/next-rbac/react';\n * import { auth } from '@/auth';\n *\n * export default async function Page() {\n *   const session = await auth();\n *\n *   return (\n *     <RoleGate role=\"admin\" userRole={session.user.role}>\n *       <AdminPanel />\n *     </RoleGate>\n *   );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // Client Component\n * 'use client';\n * import { RoleGate } from '@yourusername/next-rbac/react';\n * import { useSession } from 'next-auth/react';\n *\n * export function MyComponent() {\n *   const { data: session } = useSession();\n *\n *   return (\n *     <RoleGate\n *       roles={['admin', 'manager']}\n *       userRole={session?.user?.role}\n *     >\n *       <ManagementPanel />\n *     </RoleGate>\n *   );\n * }\n * ```\n */\nexport function RoleGate({\n  children,\n  role,\n  roles,\n  userRole,\n  fallback = null,\n}: RoleGateProps) {\n  if (!userRole) {\n    return <>{fallback}</>;\n  }\n\n  // Check single role\n  if (role && userRole !== role) {\n    return <>{fallback}</>;\n  }\n\n  // Check multiple roles\n  if (roles && !roles.includes(userRole)) {\n    return <>{fallback}</>;\n  }\n\n  return <>{children}</>;\n}\n"]}