v2.7.0
Release Date: February 2026
This release introduces the new Text template management package, enhanced utilities for password validation and enum handling, improved component replacement and route name constants across all packages, and converts several enums to const objects for better tree-shaking.
Highlights
- New Package: @abpjs/text-template-management - Complete text template management UI for ABP Commercial
- Password Validation Utilities - New utilities for validating passwords against ABP Identity settings
- Enum Utility Functions -
mapEnumToOptions()andisNumber()for common operations - Component Replacement Keys - All packages now export
eComponentsconstants for component replacement - Route Name Constants - All packages now export
eRouteNamesconstants for localization - Enum to Const Conversions - Several enums converted to const objects for tree-shaking
New Package
@abpjs/text-template-management
A new package for managing text templates in ABP Commercial applications:
import {
TextTemplatesComponent,
TemplateContentsComponent,
useTextTemplates,
eTextTemplateManagementComponents,
eTextTemplateManagementRouteNames,
} from '@abpjs/text-template-management';
function TextTemplatesPage() {
const {
templateDefinitions,
fetchTemplateDefinitions,
getTemplateContent,
updateTemplateContent,
restoreToDefault,
} = useTextTemplates();
return <TextTemplatesComponent />;
}
Features:
- Template definition listing with pagination and search
- Multi-culture template content editing
- Restore to default functionality
- Full TypeScript support with
TextTemplateManagementnamespace
See the Text template management documentation for details.
New Features
@abpjs/core
Utility Functions
mapEnumToOptions() - Convert enums to select options:
import { mapEnumToOptions } from '@abpjs/core';
enum Status { Active = 0, Inactive = 1 }
const options = mapEnumToOptions(Status);
// [{ key: 'Active', value: 0 }, { key: 'Inactive', value: 1 }]
isNumber() - Validate numeric values:
import { isNumber } from '@abpjs/core';
isNumber(42); // true
isNumber('42'); // true
isNumber('abc'); // false
generatePassword() - Generate secure random passwords:
import { generatePassword } from '@abpjs/core';
const password = generatePassword(); // 16 characters
const short = generatePassword(8); // 8 characters
Application Configuration Types
New interfaces for culture and date/time formatting:
import { ApplicationConfiguration } from '@abpjs/core';
const culture: ApplicationConfiguration.CurrentCulture;
const dateFormat: ApplicationConfiguration.DateTimeFormat;
DomInsertionService Updates
insertContent()now returns the inserted element- New
removeContent(element)method has()method (replaces deprecatedhasInserted())
@abpjs/theme-shared
Password Validation Utilities
import { getPasswordValidators, getPasswordValidationRules } from '@abpjs/theme-shared';
// Get validators array
const validators = getPasswordValidators({ getSetting });
// Get react-hook-form compatible rules
const passwordRules = getPasswordValidationRules({ getSetting });
ModalService
New service for programmatic modal rendering:
import { ModalProvider, ModalContainer, useModal } from '@abpjs/theme-shared';
function App() {
return (
<ModalProvider>
<MainContent />
<ModalContainer />
</ModalProvider>
);
}
function MyComponent() {
const modal = useModal();
modal.renderTemplate((context) => <MyModal {...context} />);
}
HTTP Error Configuration
import { HttpErrorConfigContext, useHttpErrorConfig } from '@abpjs/theme-shared';
@abpjs/theme-basic
Component Replacement Keys
import { eThemeBasicComponents } from '@abpjs/theme-basic';
// eThemeBasicComponents.ApplicationLayout = 'Theme.ApplicationLayoutComponent'
// eThemeBasicComponents.Logo = 'Theme.LogoComponent'
// eThemeBasicComponents.Routes = 'Theme.RoutesComponent'
// eThemeBasicComponents.NavItems = 'Theme.NavItemsComponent'
Navigation Element Names
import { eNavigationElementNames } from '@abpjs/theme-basic';
// eNavigationElementNames.Language = 'LanguageRef'
// eNavigationElementNames.User = 'CurrentUserRef'
LayoutStateService
import { useLayoutStateService } from '@abpjs/theme-basic';
const layoutStateService = useLayoutStateService();
layoutStateService.dispatchAddNavigationElement({ name: 'MyElement', element: <MyNav /> });
Public API Components
LogoComponent- Displays the application logoRoutesComponent- Renders navigation routesNavItemsComponent- Renders navigation items
@abpjs/audit-logging
EntityChangeService
New service for entity change operations:
import { EntityChangeService, useEntityChanges } from '@abpjs/audit-logging';
const { entityChanges, fetchEntityChanges, getEntityChangeDetails } = useEntityChanges();
EntityChange Namespace
import { EntityChange, eEntityChangeType } from '@abpjs/audit-logging';
const change: EntityChange.EntityChangeDto;
const type = eEntityChangeType.Created; // 0
@abpjs/identity-pro
changePassword Method
import { useIdentityService } from '@abpjs/identity-pro';
const identityService = useIdentityService();
await identityService.changePassword(userId, {
currentPassword: 'old',
newPassword: 'new',
});
Component and Route Name Constants
All packages now export constants for component replacement and route localization:
| Package | Components | Route Names |
|---|---|---|
| @abpjs/account | eAccountComponents | eAccountRouteNames |
| @abpjs/feature-management | eFeatureManagementComponents | - |
| @abpjs/identity | eIdentityComponents | eIdentityRouteNames |
| @abpjs/permission-management | ePermissionManagementComponents | - |
| @abpjs/setting-management | eSettingManagementComponents | eSettingManagementRouteNames |
| @abpjs/tenant-management | eTenantManagementComponents | eTenantManagementRouteNames |
| @abpjs/account-pro | eAccountComponents | eAccountRouteNames |
| @abpjs/audit-logging | eAuditLoggingComponents | eAuditLoggingRouteNames |
| @abpjs/identity-pro | eIdentityComponents | eIdentityRouteNames |
| @abpjs/language-management | eLanguageManagementComponents | eLanguageManagementRouteNames |
| @abpjs/saas | eSaasComponents | eSaasRouteNames |
| @abpjs/text-template-management | eTextTemplateManagementComponents | eTextTemplateManagementRouteNames |
Enum to Const Object Conversions
Several packages converted their enums to const objects for better tree-shaking:
@abpjs/identity-pro
// Before (enum)
enum eIdentityComponents { Users = 'Identity.UsersComponent' }
// After (const object)
const eIdentityComponents = { Users: 'Identity.UsersComponent' } as const;
@abpjs/language-management
// Before (enum)
enum eLanguageManagementComponents { Languages = 'LanguageManagement.LanguagesComponent' }
// After (const object)
const eLanguageManagementComponents = { Languages: 'LanguageManagement.LanguagesComponent' } as const;
@abpjs/saas
// Before (enum)
enum eSaasComponents { Tenants = 'Saas.TenantsComponent' }
// After (const object)
const eSaasComponents = { Tenants: 'Saas.TenantsComponent' } as const;
Deprecations
@abpjs/core
DomInsertionService.hasInserted()- Usehas()instead
Packages
| Package | Version | Changes |
|---|---|---|
| @abpjs/core | 2.7.0 | mapEnumToOptions, isNumber, generatePassword, CurrentCulture, DateTimeFormat types |
| @abpjs/theme-shared | 2.7.0 | Password validation utilities, ModalService, HttpErrorConfigContext |
| @abpjs/theme-basic | 2.7.0 | eThemeBasicComponents, eNavigationElementNames, LayoutStateService, public components |
| @abpjs/account | 2.7.0 | eAccountComponents, eAccountRouteNames, TenantIdResponse.name |
| @abpjs/feature-management | 2.7.0 | eFeatureManagementComponents |
| @abpjs/identity | 2.7.0 | eIdentityComponents, eIdentityRouteNames |
| @abpjs/permission-management | 2.7.0 | ePermissionManagementComponents |
| @abpjs/setting-management | 2.7.0 | eSettingManagementComponents, eSettingManagementRouteNames |
| @abpjs/tenant-management | 2.7.0 | eTenantManagementComponents, eTenantManagementRouteNames |
| @abpjs/account-pro | 2.7.0 | eAccountComponents, eAccountRouteNames |
| @abpjs/audit-logging | 2.7.0 | EntityChangeService, EntityChange namespace, eAuditLoggingRouteNames |
| @abpjs/identity-pro | 2.7.0 | changePassword() method, eIdentityRouteNames, enum-to-const |
| @abpjs/language-management | 2.7.0 | eLanguageManagementRouteNames, enum-to-const |
| @abpjs/saas | 2.7.0 | eSaasRouteNames, enum-to-const |
| @abpjs/text-template-management | 2.7.0 | New package - Text template management UI |
Upgrade
npm install @abpjs/core@2.7.0 @abpjs/theme-shared@2.7.0 @abpjs/theme-basic@2.7.0 @abpjs/account@2.7.0 @abpjs/identity@2.7.0 @abpjs/feature-management@2.7.0 @abpjs/permission-management@2.7.0 @abpjs/setting-management@2.7.0 @abpjs/tenant-management@2.7.0
For Pro packages:
npm install @abpjs/account-pro@2.7.0 @abpjs/audit-logging@2.7.0 @abpjs/identity-pro@2.7.0 @abpjs/language-management@2.7.0 @abpjs/saas@2.7.0 @abpjs/text-template-management@2.7.0