{"version":3,"file":"Protected-Cf9XjIbv.cjs","sources":["../src/access/Protected.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\r\nimport { useAccess } from '../hooks/useAccess';\r\n\r\n/**\r\n * Props for the AccessGuard component\r\n */\r\nexport interface AccessGuardProps {\r\n  /** Children to render when access is granted */\r\n  children: ReactNode;\r\n  /** Fallback content when access is denied (optional) */\r\n  fallback?: ReactNode;\r\n  /** Single role to check */\r\n  role?: string;\r\n  /** Multiple roles to check (user needs any one) */\r\n  roles?: string[];\r\n  /** Single permission to check */\r\n  permission?: string;\r\n  /** Multiple permissions to check (user needs all) */\r\n  permissions?: string[];\r\n  /** Feature name for feature-based access */\r\n  feature?: string;\r\n  /** Required access level for feature (default: 1) */\r\n  level?: number;\r\n  /** Whether user must be authenticated (default: true when using any check) */\r\n  requireAuth?: boolean;\r\n}\r\n\r\n/**\r\n * AccessGuard - Component for conditional rendering based on access control\r\n * \r\n * Wraps children and only renders them if the user has the required\r\n * role, permission, or feature access level.\r\n * \r\n * @example\r\n * ```tsx\r\n * // Role-based protection\r\n * <Protected role=\"admin\">\r\n *   <DeleteButton />\r\n * </Protected>\r\n * \r\n * // Permission-based protection\r\n * <Protected permission=\"users.delete\">\r\n *   <DeleteButton />\r\n * </Protected>\r\n * \r\n * // Feature with level\r\n * <Protected feature=\"Users\" level={3}>\r\n *   <DeleteButton />\r\n * </Protected>\r\n * \r\n * // Multiple roles (any match)\r\n * <Protected roles={['admin', 'manager']}>\r\n *   <ManagePanel />\r\n * </Protected>\r\n * \r\n * // With fallback content\r\n * <Protected role=\"admin\" fallback={<span>Admin only</span>}>\r\n *   <AdminPanel />\r\n * </Protected>\r\n * \r\n * // Multiple permissions (all required)\r\n * <Protected permissions={['users.read', 'users.write']}>\r\n *   <EditForm />\r\n * </Protected>\r\n * ```\r\n */\r\nexport function AccessGuard({\r\n  children,\r\n  fallback = null,\r\n  role,\r\n  roles,\r\n  permission,\r\n  permissions,\r\n  feature,\r\n  level = 1,\r\n  requireAuth,\r\n}: AccessGuardProps): React.ReactElement | null {\r\n  const access = useAccess();\r\n\r\n  // Determine if auth is required\r\n  const needsAuth = requireAuth ?? (\r\n    role !== undefined ||\r\n    roles !== undefined ||\r\n    permission !== undefined ||\r\n    permissions !== undefined ||\r\n    feature !== undefined\r\n  );\r\n\r\n  // Check authentication first\r\n  if (needsAuth && !access.isAuthenticated) {\r\n    return fallback as React.ReactElement | null;\r\n  }\r\n\r\n  // Check single role\r\n  if (role !== undefined && !access.hasRole(role)) {\r\n    return fallback as React.ReactElement | null;\r\n  }\r\n\r\n  // Check multiple roles (any match)\r\n  if (roles !== undefined && !access.hasAnyRole(roles)) {\r\n    return fallback as React.ReactElement | null;\r\n  }\r\n\r\n  // Check single permission\r\n  if (permission !== undefined && !access.hasPermission(permission)) {\r\n    return fallback as React.ReactElement | null;\r\n  }\r\n\r\n  // Check multiple permissions (all required)\r\n  if (permissions !== undefined && !access.hasAllPermissions(permissions)) {\r\n    return fallback as React.ReactElement | null;\r\n  }\r\n\r\n  // Check feature access\r\n  if (feature !== undefined && !access.hasFeature(feature, level)) {\r\n    return fallback as React.ReactElement | null;\r\n  }\r\n\r\n  // All checks passed, render children\r\n  return <>{children}</>;\r\n}\r\n\r\nexport default AccessGuard;"],"names":["useAccess"],"mappings":";;;AAkEO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AACF,GAAgD;AAC9C,QAAM,SAASA,UAAAA,UAAA;AAGf,QAAM,YAAY,gBAChB,SAAS,UACT,UAAU,UACV,eAAe,UACf,gBAAgB,UAChB,YAAY;AAId,MAAI,aAAa,CAAC,OAAO,iBAAiB;AACxC,WAAO;AAAA,EACT;AAGA,MAAI,SAAS,UAAa,CAAC,OAAO,QAAQ,IAAI,GAAG;AAC/C,WAAO;AAAA,EACT;AAGA,MAAI,UAAU,UAAa,CAAC,OAAO,WAAW,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AAGA,MAAI,eAAe,UAAa,CAAC,OAAO,cAAc,UAAU,GAAG;AACjE,WAAO;AAAA,EACT;AAGA,MAAI,gBAAgB,UAAa,CAAC,OAAO,kBAAkB,WAAW,GAAG;AACvE,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,UAAa,CAAC,OAAO,WAAW,SAAS,KAAK,GAAG;AAC/D,WAAO;AAAA,EACT;AAGA,+DAAU,UAAS;AACrB;;"}