Skip to main content
Version: 2.7.0

Release Notes

v2.7.0​

February 2026

New Features​

Password Validation Utilities​

New utilities for validating passwords against ABP Identity settings:

import { useAbpConfig } from '@abpjs/core';
import { getPasswordValidators, getPasswordValidationRules } from '@abpjs/theme-shared';
import { useForm } from 'react-hook-form';

function PasswordForm() {
const { getSetting } = useAbpConfig();
const { register, formState: { errors } } = useForm();

// Option 1: Get validators array
const validators = getPasswordValidators({ getSetting });

// Option 2: Get react-hook-form compatible rules
const passwordRules = getPasswordValidationRules({ getSetting });

return (
<form>
<input
type="password"
{...register('password', passwordRules)}
/>
{errors.password && <span>{errors.password.message}</span>}
</form>
);
}

The validators read settings from ABP's Abp.Identity.Password.* configuration:

  • RequiredLength - Minimum password length
  • MaxLength - Maximum password length
  • RequireDigit - Requires at least one digit
  • RequireLowercase - Requires at least one lowercase letter
  • RequireUppercase - Requires at least one uppercase letter
  • RequireNonAlphanumeric - Requires at least one special character
  • RequiredUniqueChars - Minimum unique characters

ModalService​

New service for programmatic modal rendering:

import { ModalProvider, ModalContainer, useModal } from '@abpjs/theme-shared';

// Wrap your app with ModalProvider
function App() {
return (
<ModalProvider>
<MainContent />
<ModalContainer />
</ModalProvider>
);
}

// Use the modal service in components
function MyComponent() {
const modal = useModal();

const openModal = () => {
modal.renderTemplate(
(context) => (
<Dialog open onClose={() => modal.clearModal()}>
<DialogContent>Hello {context?.name}</DialogContent>
</Dialog>
),
{ name: 'World' }
);
};

return <button onClick={openModal}>Open Modal</button>;
}

ModalService methods:

  • renderTemplate(render, context?) - Render a template in the modal container
  • clearModal() - Clear the current modal
  • getContainer() - Get the container ref for the modal
  • detectChanges() - Force a re-render of the modal content

HTTP Error Configuration​

New context and hook for HTTP error configuration:

import { HttpErrorConfigContext, useHttpErrorConfig, httpErrorConfigFactory } from '@abpjs/theme-shared';

function App() {
const httpErrorConfig = {
skipHandledErrorCodes: [404], // Let 404s pass through
errorScreen: {
component: MyCustomErrorComponent,
forWhichErrors: [401, 403, 500],
},
};

return (
<HttpErrorConfigContext.Provider value={httpErrorConfig}>
<YourApp />
</HttpErrorConfigContext.Provider>
);
}

// Access config in components
function MyComponent() {
const config = useHttpErrorConfig();

if (config.skipHandledErrorCodes?.includes(404)) {
// Skip handling 404 errors
}
}

API Changes​

HttpErrorConfig​

  • skipHandledErrorCodes - New property to specify error codes that should pass through without being handled
  • errorScreen.forWhichErrors - Simplified from a tuple type to ErrorScreenErrorCodes[] array
// Before (v2.4.0)
interface HttpErrorConfig {
errorScreen?: {
forWhichErrors?: [401] | [401, 403] | [401, 403, 404] | [401, 403, 404, 500];
};
}

// After (v2.7.0)
interface HttpErrorConfig {
skipHandledErrorCodes?: ErrorScreenErrorCodes[] | number[];
errorScreen?: {
forWhichErrors?: ErrorScreenErrorCodes[]; // Simple array
};
}

New Exports​

  • getPasswordValidators(store) - Get password validators from ABP settings
  • getPasswordValidationRules(store) - Get react-hook-form compatible validation rules
  • getPasswordSettings(store) - Get password settings from store
  • PasswordSettings - Interface for password settings
  • PasswordValidator - Type for password validator functions
  • PASSWORD_SETTING_KEYS - Constants for ABP Identity password setting keys
  • ModalProvider - Provider component for modal service
  • ModalContainer - Component to render modal content
  • useModal() - Hook to access modal service
  • useModalState() - Hook to access current modal state
  • useModalContext() - Hook to access full modal context
  • ModalService - Interface for modal service
  • ModalState - Interface for modal state
  • ModalTemplateRender - Type for modal render functions
  • HttpErrorConfigContext - Context for HTTP error configuration
  • useHttpErrorConfig() - Hook to access HTTP error configuration
  • httpErrorConfigFactory() - Factory function for default HTTP error config
  • HTTP_ERROR_CONFIG - Token name constant

v2.4.0​

February 2026

New Features​

  • ThemeSharedAppendContentContext - New React context for appending scripts or stylesheets to the document. This is the React equivalent of Angular's THEME_SHARED_APPEND_CONTENT injection token:

    import { ThemeSharedAppendContentContext } from '@abpjs/theme-shared';

    function App() {
    const appendContent = async () => {
    // Custom logic to append scripts/styles to the document
    };

    return (
    <ThemeSharedAppendContentContext.Provider value={appendContent}>
    <YourApp />
    </ThemeSharedAppendContentContext.Provider>
    );
    }
  • THEME_SHARED_APPEND_CONTENT constant - Token name constant matching Angular's InjectionToken name

Deprecation Updates​

  • Toaster.Status removal postponed - Now scheduled for removal in v3.0 (previously v2.2). Continue using Confirmation.Status for new code.
  • appendScript function deprecated - Will be removed in v2.6. Use ThemeSharedAppendContentContext instead.

v2.2.0​

February 2026

  • Version alignment with @abpjs/core

v2.1.0​

February 2026

New Types​

  • Confirmation.Status enum - New confirmation-specific status enum, replacing usage of Toaster.Status for confirmation dialogs:
    import { Confirmation } from '@abpjs/theme-shared';

    const status = await confirmation.info('Are you sure?');

    if (status === Confirmation.Status.confirm) {
    // User confirmed
    } else if (status === Confirmation.Status.reject) {
    // User rejected
    } else if (status === Confirmation.Status.dismiss) {
    // User dismissed (escape key, click outside)
    }

API Changes​

  • Confirmation service return type - All confirmation methods (info, success, warn, error, show) now return Promise<Confirmation.Status> instead of Promise<Toaster.Status>
  • confirmation.clear(status?) parameter - Now accepts Confirmation.Status instead of Toaster.Status
  • useConfirmationState().respond() - Now accepts Confirmation.Status instead of Toaster.Status

Deprecations​

  • Toaster.Status deprecated - Use Confirmation.Status for confirmation dialogs. Toaster.Status will be removed in v2.2.0.

Migration​

// Before (v2.0.0)
import { Toaster } from '@abpjs/theme-shared';

const status = await confirmation.info('Are you sure?');
if (status === Toaster.Status.confirm) { /* ... */ }

// After (v2.1.0)
import { Confirmation } from '@abpjs/theme-shared';

const status = await confirmation.info('Are you sure?');
if (status === Confirmation.Status.confirm) { /* ... */ }

v2.0.0​

January 2026

Breaking Changes​

  • ToasterService return type - Methods (info, success, warn, error) now return number (toast ID) instead of Promise<Toaster.Status>
  • toaster.remove(id) - Now takes number instead of string
  • toaster.addAll() removed - Use show() method instead
  • Toaster.Options renamed - Use Toaster.ToastOptions (old interface kept for compatibility, deprecated)
  • Toaster.Severity changed - 'warn' renamed to 'warning', added 'neutral'
  • Confirmation.Options - Removed yesCopy and cancelCopy (use yesText and cancelText)
  • Confirmation.Options - No longer extends Toaster.Options

New Features​

  • toaster.show(message, title?, severity?, options) - Create toast with specified severity
  • toaster.subscribe(callback) - Subscribe to toast state changes (observable pattern)
  • toaster.clear(containerKey?) - Clear toasts by container key
  • ToastContainer containerKey prop - Filter toasts to specific containers
  • Toast positions - New 'top', 'top-left', 'bottom', 'bottom-left' positions
  • confirmation.show(message, title?, severity?, options) - Create with specified severity
  • confirmation.listenToEscape() - Enable escape key dismissal
  • confirmation.subscribe(callback) - Subscribe to confirmation changes
  • Confirmation.Options.closable - Control dismiss behavior
  • Confirmation.Severity type - Separate from Toaster, includes 'neutral'
  • Sorting icon CSS classes - .sorting, .sorting_asc, .sorting_desc

Style Updates​

  • Updated animation timing (0.4s → 0.2s for fade effects)
  • Added table scrollbar styling
  • Added collapse/expand height transition classes

v1.1.0​

January 2026

New Features​

  • ToasterService localization support - info(), success(), warn(), error() now accept Config.LocalizationParam for message and title
  • LoaderBar customization - New intervalPeriod and stopDelay props for animation control
  • HttpErrorConfig - New types for custom error screen configuration (RootParams, HttpErrorConfig, ErrorScreenErrorCodes)

Deprecations​

  • Confirmation.Options - cancelCopy and yesCopy deprecated in favor of cancelText and yesText (which accept Config.LocalizationParam)

v1.0.0​

January 2026

Version alignment with ABP Framework v1.0.0. No new features or breaking changes.


v0.9.0​

January 2026

New Features​

  • Modal enhancements - New busy, height, minHeight, and onInit props
  • Profile component - Moved from @abpjs/theme-basic (see Profile docs)
  • ChangePassword component - Moved from @abpjs/theme-basic (see Profile docs)
  • SettingTab model - Interface for settings management tabs
  • Statistics models - Statistics.Response, Statistics.Data, Statistics.Filter

v0.8.0​

January 2026

New Features​

  • LoaderBar - Progress bar that shows during HTTP requests
  • ErrorComponent - Full-page error display (404, 500, etc.)
  • DEFAULT_STYLES - Global CSS styles constant
  • useErrorHandler enhancements - createErrorComponent, clearErrorComponent methods

v0.7.6​

January 2026 - Initial Release

  • Toaster service (success, error, warning, info)
  • Confirmation service with promise-based dialogs
  • Global error handler for ABP errors
  • Light and dark mode support