npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@abpjs/account

v3.2.0

Published

ABP Framework Account module for React - Translation of @abp/ng.account

Downloads

2,379

Readme

@abpjs/account

Authentication UI components for ABP Framework in React

npm version License: LGPL-3.0

Overview

@abpjs/account provides ready-to-use authentication components for ABP-based React applications. It includes login forms, registration pages, and multi-tenant switching functionality - all styled with Chakra UI and fully customizable.

This package is a React translation of the original @abp/ng.account Angular package, bringing the same reliable account management to React developers.

Features

  • Login Form - Complete login form with validation and error handling
  • Registration Form - User registration with configurable fields
  • Tenant Switching - Multi-tenant support with tenant selection UI
  • Password Flow - OAuth2 resource owner password flow support
  • Form Validation - Built-in validation using Zod schemas
  • Chakra UI - Beautiful, accessible components out of the box
  • Fully Customizable - Override styles and extend components easily
  • TypeScript - Full type safety

Installation

# Using npm
npm install @abpjs/account

# Using yarn
yarn add @abpjs/account

# Using pnpm
pnpm add @abpjs/account

Required Dependencies

This package requires the following peer dependencies:

npm install @abpjs/core @abpjs/theme-shared @chakra-ui/react @emotion/react @emotion/styled framer-motion react-hook-form zod

Quick Start

1. Add Account Routes

The simplest way to use this package is to add the pre-configured routes:

import { accountRoutes } from '@abpjs/account';
import { createBrowserRouter, RouterProvider } from 'react-router-dom';

const router = createBrowserRouter([
  ...accountRoutes,
  // Your other routes
]);

function App() {
  return <RouterProvider router={router} />;
}

2. Using Individual Components

Login Form

import { LoginForm } from '@abpjs/account';

function LoginPage() {
  const handleSuccess = () => {
    // Redirect after successful login
    navigate('/dashboard');
  };

  return (
    <div>
      <h1>Welcome Back</h1>
      <LoginForm onSuccess={handleSuccess} />
    </div>
  );
}

Registration Form

import { RegisterForm } from '@abpjs/account';

function RegisterPage() {
  const handleSuccess = () => {
    // Redirect after successful registration
    navigate('/login');
  };

  return (
    <div>
      <h1>Create Account</h1>
      <RegisterForm onSuccess={handleSuccess} />
    </div>
  );
}

Tenant Box

import { TenantBox } from '@abpjs/account';

function Header() {
  return (
    <header>
      <TenantBox />
      {/* Other header content */}
    </header>
  );
}

3. Using Pre-built Pages

import { LoginPage, RegisterPage } from '@abpjs/account';
import { Routes, Route } from 'react-router-dom';

function App() {
  return (
    <Routes>
      <Route path="/login" element={<LoginPage />} />
      <Route path="/register" element={<RegisterPage />} />
    </Routes>
  );
}

Components

LoginForm

A complete login form with username/email and password fields.

import { LoginForm } from '@abpjs/account';

<LoginForm
  onSuccess={() => navigate('/dashboard')}
  onError={(error) => console.error(error)}
  showRegisterLink={true}
  showForgotPassword={true}
/>

Props:

| Prop | Type | Default | Description | |------|------|---------|-------------| | onSuccess | () => void | - | Callback after successful login | | onError | (error: Error) => void | - | Callback on login error | | showRegisterLink | boolean | true | Show link to registration page | | showForgotPassword | boolean | true | Show forgot password link |

RegisterForm

User registration form with validation.

import { RegisterForm } from '@abpjs/account';

<RegisterForm
  onSuccess={() => navigate('/login')}
  onError={(error) => console.error(error)}
  showLoginLink={true}
/>

Props:

| Prop | Type | Default | Description | |------|------|---------|-------------| | onSuccess | () => void | - | Callback after successful registration | | onError | (error: Error) => void | - | Callback on registration error | | showLoginLink | boolean | true | Show link to login page |

TenantBox

Multi-tenant selection component.

import { TenantBox } from '@abpjs/account';

<TenantBox
  onTenantChange={(tenant) => console.log('Tenant changed:', tenant)}
/>

Hooks

usePasswordFlow

Hook for implementing OAuth2 resource owner password flow.

import { usePasswordFlow } from '@abpjs/account';

function CustomLoginForm() {
  const { login, isLoading, error } = usePasswordFlow();

  const handleSubmit = async (data) => {
    await login({
      username: data.username,
      password: data.password,
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      {/* Your custom form */}
    </form>
  );
}

Customization

Styling with Chakra UI

All components use Chakra UI and can be styled using Chakra's theming system:

import { extendTheme, ChakraProvider } from '@chakra-ui/react';

const theme = extendTheme({
  components: {
    Button: {
      defaultProps: {
        colorScheme: 'blue',
      },
    },
  },
});

function App() {
  return (
    <ChakraProvider theme={theme}>
      <LoginForm />
    </ChakraProvider>
  );
}

Custom Validation

Override validation schemas using Zod:

import { z } from 'zod';

const customLoginSchema = z.object({
  username: z.string().email('Must be a valid email'),
  password: z.string().min(8, 'Password must be at least 8 characters'),
});

Multi-Tenancy

The account module fully supports ABP's multi-tenant architecture:

  1. Tenant Selection - Users can select their tenant before login
  2. Tenant Header - Automatically includes tenant header in API requests
  3. Tenant Persistence - Remembers selected tenant across sessions
import { TenantBox } from '@abpjs/account';

// Show tenant selector in your app header
function AppHeader() {
  return (
    <header>
      <Logo />
      <TenantBox />
      <UserMenu />
    </header>
  );
}

Integration with ABP Backend

This package is designed to work seamlessly with ABP Framework backends:

  • Compatible with ABP's Identity Server integration
  • Supports ABP's account module API endpoints
  • Works with ABP's multi-tenant system

Related Packages

Contributing

This package is part of the ABP React monorepo. Contributions are welcome!

License

LGPL-3.0 - See LICENSE for details.


View Full Documentation | Report Issues | View Source