diff --git a/npm/ng-packs/nx/ng-packs/libs/core/README.md b/npm/ng-packs/nx/ng-packs/libs/core/README.md index c68e5a2c21..9c1a869583 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/README.md +++ b/npm/ng-packs/nx/ng-packs/libs/core/README.md @@ -1,7 +1,3 @@ -# core +

@abp/ng.core

-This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test core` to execute the unit tests. +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/libs/core/package.json b/npm/ng-packs/nx/ng-packs/libs/core/package.json index 954d6b61f6..3d115bc8e1 100644 --- a/npm/ng-packs/nx/ng-packs/libs/core/package.json +++ b/npm/ng-packs/nx/ng-packs/libs/core/package.json @@ -7,7 +7,7 @@ "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "^4.4.0-rc.2", + "@abp/utils": "^4.4.0", "@angular/localize": "~10.0.10", "@ngxs/store": "^3.7.0", "angular-oauth2-oidc": "^10.0.0", diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json new file mode 100644 index 0000000000..9c51584494 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/.eslintrc.json @@ -0,0 +1,36 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts"], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "abp", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "abp", + "style": "kebab-case" + } + ] + } + }, + { + "files": ["*.html"], + "extends": ["plugin:@nrwl/nx/angular-template"], + "rules": {} + } + ] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md b/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md new file mode 100644 index 0000000000..0dce3c6526 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/README.md @@ -0,0 +1,3 @@ +

@abp/ng.theme.basic

+ +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js b/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js new file mode 100644 index 0000000000..469366871b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'theme-basic', + preset: '../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + }, + }, + coverageDirectory: '../../coverage/libs/theme-basic', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular', + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ], +}; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json new file mode 100644 index 0000000000..9f131981ff --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/ng-package.json @@ -0,0 +1,8 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/libs/theme-basic", + "lib": { + "entryFile": "src/public-api.ts" + }, + "allowedNonPeerDependencies": ["@abp/ng.theme.shared", "@abp/ng.account.core"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json new file mode 100644 index 0000000000..2f149834fe --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/package.json @@ -0,0 +1,17 @@ +{ + "name": "@abp/ng.theme.basic", + "version": "4.4.0", + "homepage": "https://abp.io", + "repository": { + "type": "git", + "url": "https://github.com/abpframework/abp.git" + }, + "dependencies": { + "@abp/ng.account.core": "~4.4.0", + "@abp/ng.theme.shared": "~4.4.0", + "tslib": "^2.0.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html new file mode 100644 index 0000000000..076cf83c7f --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.html @@ -0,0 +1,62 @@ + + + +
+ + + + +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts new file mode 100644 index 0000000000..510e2a8f72 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/account-layout.component.ts @@ -0,0 +1,21 @@ +import { AfterViewInit, Component } from '@angular/core'; +import { eLayoutType, SubscriptionService } from '@abp/ng.core'; +import { LayoutService } from '../../services/layout.service'; + +@Component({ + selector: 'abp-layout-account', + templateUrl: './account-layout.component.html', + providers: [LayoutService, SubscriptionService], +}) +export class AccountLayoutComponent implements AfterViewInit { + // required for dynamic component + static type = eLayoutType.account; + + authWrapperKey = 'Account.AuthWrapperComponent'; + + constructor(public service: LayoutService) {} + + ngAfterViewInit() { + this.service.subscribeWindowSize(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html new file mode 100644 index 0000000000..5a4e2e6039 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.html @@ -0,0 +1,27 @@ +
+
+ + + + + +
+
+ + +
+ {{ 'AbpAccount::InvalidLoginRequest' | abpLocalization }} + {{ 'AbpAccount::ThereAreNoLoginSchemesConfiguredForThisClient' | abpLocalization }} +
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts new file mode 100644 index 0000000000..a5c69d2301 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AuthWrapperComponent } from './auth-wrapper.component'; + +describe('AuthWrapperComponent', () => { + let component: AuthWrapperComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AuthWrapperComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AuthWrapperComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts new file mode 100644 index 0000000000..0023c74e78 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/auth-wrapper/auth-wrapper.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthWrapperService } from '@abp/ng.account.core'; + +@Component({ + selector: 'abp-auth-wrapper', + templateUrl: './auth-wrapper.component.html', + providers: [AuthWrapperService], +}) +export class AuthWrapperComponent implements OnInit { + constructor(public service: AuthWrapperService) {} + + ngOnInit(): void {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html new file mode 100644 index 0000000000..e4381b7b05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.html @@ -0,0 +1,63 @@ + +
+
+
+
+ {{ + 'AbpUiMultiTenancy::Tenant' | abpLocalization + }}
+
+ {{ currentTenant.name || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }} +
+
+ +
+
+
+ + + +
Switch Tenant
+
+ +
+
+
+ + +
+

{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}

+
+
+
+ + + + {{ 'AbpTenantManagement::Save' | abpLocalization }} + + +
+
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts new file mode 100644 index 0000000000..86dd8a0cf5 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenantBoxComponent } from './tenant-box.component'; + +describe('TenantBoxComponent', () => { + let component: TenantBoxComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenantBoxComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TenantBoxComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts new file mode 100644 index 0000000000..1aba2fbc6c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/account-layout/tenant-box/tenant-box.component.ts @@ -0,0 +1,13 @@ +import { Component, OnInit } from '@angular/core'; +import { TenantBoxService } from '@abp/ng.account.core'; + +@Component({ + selector: 'abp-tenant-box', + templateUrl: './tenant-box.component.html', + providers: [TenantBoxService], +}) +export class TenantBoxComponent implements OnInit { + constructor(public service: TenantBoxService) {} + + ngOnInit(): void {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html new file mode 100644 index 0000000000..c41cfb3d31 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.html @@ -0,0 +1,50 @@ + + + +
+ + + +
diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts new file mode 100644 index 0000000000..42da273fbb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/application-layout/application-layout.component.ts @@ -0,0 +1,21 @@ +import { eLayoutType, SubscriptionService } from '@abp/ng.core'; +import { collapseWithMargin, slideFromBottom } from '@abp/ng.theme.shared'; +import { AfterViewInit, Component } from '@angular/core'; +import { LayoutService } from '../../services/layout.service'; + +@Component({ + selector: 'abp-layout-application', + templateUrl: './application-layout.component.html', + animations: [slideFromBottom, collapseWithMargin], + providers: [LayoutService, SubscriptionService], +}) +export class ApplicationLayoutComponent implements AfterViewInit { + // required for dynamic component + static type = eLayoutType.application; + + constructor(public service: LayoutService) {} + + ngAfterViewInit() { + this.service.subscribeWindowSize(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts new file mode 100644 index 0000000000..f961ecc321 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/empty-layout/empty-layout.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { eLayoutType } from '@abp/ng.core'; + +@Component({ + selector: 'abp-layout-empty', + template: ` + + + `, +}) +export class EmptyLayoutComponent { + static type = eLayoutType.empty; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts new file mode 100644 index 0000000000..7daf7f2c1a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/index.ts @@ -0,0 +1,12 @@ +export * from './account-layout/account-layout.component'; +export * from './account-layout/auth-wrapper/auth-wrapper.component'; +export * from './account-layout/tenant-box/tenant-box.component'; +export * from './application-layout/application-layout.component'; +export * from './empty-layout/empty-layout.component'; +export * from './logo/logo.component'; +export * from './nav-items/current-user.component'; +export * from './nav-items/languages.component'; +export * from './nav-items/nav-items.component'; +export * from './routes/routes.component'; +export * from './validation-error/validation-error.component'; +export * from './page-alert-container/page-alert-container.component'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts new file mode 100644 index 0000000000..95a532435b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/logo/logo.component.ts @@ -0,0 +1,28 @@ +import { ApplicationInfo, EnvironmentService } from '@abp/ng.core'; +import { Component } from '@angular/core'; + +@Component({ + selector: 'abp-logo', + template: ` + + + + + + {{ appInfo.name }} + + `, +}) +export class LogoComponent { + get appInfo(): ApplicationInfo { + return this.environment.getEnvironment().application; + } + + constructor(private environment: EnvironmentService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html new file mode 100644 index 0000000000..307bc961c1 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.html @@ -0,0 +1,41 @@ + + {{ + 'AbpAccount::Login' | abpLocalization + }} + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts new file mode 100644 index 0000000000..aa2a144be6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/current-user.component.ts @@ -0,0 +1,37 @@ +import { + AuthService, + ConfigStateService, + CurrentUserDto, + NAVIGATE_TO_MANAGE_PROFILE, + SessionStateService, +} from '@abp/ng.core'; +import { Component, Inject } from '@angular/core'; +import { Observable } from 'rxjs'; + +@Component({ + selector: 'abp-current-user', + templateUrl: './current-user.component.html', +}) +export class CurrentUserComponent { + currentUser$: Observable = this.configState.getOne$('currentUser'); + selectedTenant$ = this.sessionState.getTenant$(); + + get smallScreen(): boolean { + return window.innerWidth < 992; + } + + constructor( + @Inject(NAVIGATE_TO_MANAGE_PROFILE) public navigateToManageProfile, + private authService: AuthService, + private configState: ConfigStateService, + private sessionState: SessionStateService, + ) {} + + navigateToLogin() { + this.authService.navigateToLogin(); + } + + logout() { + this.authService.logout().subscribe(); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts new file mode 100644 index 0000000000..7f73e312cf --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/languages.component.ts @@ -0,0 +1,84 @@ +import { ConfigStateService, LanguageInfo, SessionStateService } from '@abp/ng.core'; +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import snq from 'snq'; + +@Component({ + selector: 'abp-languages', + // tslint:disable-next-line: component-max-inline-declarations + template: ` + + `, +}) +export class LanguagesComponent { + get smallScreen(): boolean { + return window.innerWidth < 992; + } + + languages$: Observable = this.configState.getDeep$('localization.languages'); + + get defaultLanguage$(): Observable { + return this.languages$.pipe( + map( + languages => + snq( + () => languages.find(lang => lang.cultureName === this.selectedLangCulture).displayName, + ), + '', + ), + ); + } + + get dropdownLanguages$(): Observable { + return this.languages$.pipe( + map( + languages => + snq(() => languages.filter(lang => lang.cultureName !== this.selectedLangCulture)), + [], + ), + ); + } + + get selectedLangCulture(): string { + return this.sessionState.getLanguage(); + } + + constructor(private sessionState: SessionStateService, private configState: ConfigStateService) {} + + onChangeLang(cultureName: string) { + this.sessionState.setLanguage(cultureName); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html new file mode 100644 index 0000000000..d781ad90b2 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.html @@ -0,0 +1,16 @@ + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts new file mode 100644 index 0000000000..7a5ee9b37a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/nav-items/nav-items.component.ts @@ -0,0 +1,12 @@ +import { NavItem, NavItemsService } from '@abp/ng.theme.shared'; +import { Component, Input, TrackByFunction } from '@angular/core'; + +@Component({ + selector: 'abp-nav-items', + templateUrl: 'nav-items.component.html', +}) +export class NavItemsComponent { + trackByFn: TrackByFunction = (_, element) => element.id; + + constructor(public readonly navItems: NavItemsService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html new file mode 100644 index 0000000000..6f2c62bf11 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.html @@ -0,0 +1,22 @@ + + + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts new file mode 100644 index 0000000000..9dc1966337 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/page-alert-container/page-alert-container.component.ts @@ -0,0 +1,11 @@ +import { Component, ViewEncapsulation } from '@angular/core'; +import { PageAlertService } from '@abp/ng.theme.shared'; + +@Component({ + selector: 'abp-page-alert-container', + templateUrl: './page-alert-container.component.html', + encapsulation: ViewEncapsulation.None, +}) +export class PageAlertContainerComponent { + constructor(public service: PageAlertService) {} +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html new file mode 100644 index 0000000000..aae02df783 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.html @@ -0,0 +1,104 @@ + diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts new file mode 100644 index 0000000000..273d9c71fb --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/routes/routes.component.ts @@ -0,0 +1,35 @@ +import { ABP, RoutesService, TreeNode } from '@abp/ng.core'; +import { + Component, + ElementRef, + Input, + QueryList, + Renderer2, + TrackByFunction, + ViewChildren, +} from '@angular/core'; + +@Component({ + selector: 'abp-routes', + templateUrl: 'routes.component.html', +}) +export class RoutesComponent { + @Input() smallScreen: boolean; + + @ViewChildren('childrenContainer') childrenContainers: QueryList>; + + trackByFn: TrackByFunction> = (_, item) => item.name; + + constructor(public readonly routesService: RoutesService, protected renderer: Renderer2) {} + + isDropdown(node: TreeNode) { + return !node?.isLeaf || this.routesService.hasChildren(node.name); + } + + closeDropdown() { + this.childrenContainers.forEach(({ nativeElement }) => { + this.renderer.addClass(nativeElement, 'd-none'); + setTimeout(() => this.renderer.removeClass(nativeElement, 'd-none'), 0); + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts new file mode 100644 index 0000000000..97724c0786 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/components/validation-error/validation-error.component.ts @@ -0,0 +1,34 @@ +import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; +import { Validation, ValidationErrorComponent as ErrorComponent } from '@ngx-validate/core'; + +@Component({ + selector: 'abp-validation-error', + template: ` +
+ {{ error.message | abpLocalization: error.interpoliteParams }} +
+ `, + changeDetection: ChangeDetectionStrategy.OnPush, + encapsulation: ViewEncapsulation.None, +}) +export class ValidationErrorComponent extends ErrorComponent { + get abpErrors(): Validation.Error[] & { interpoliteParams?: string[] } { + if (!this.errors || !this.errors.length) return []; + + return this.errors.map(error => { + if (!error.message) return error; + + const index = error.message.indexOf('['); + + if (index > -1) { + return { + ...error, + message: error.message.slice(0, index), + interpoliteParams: error.message.slice(index + 1, error.message.length - 1).split(','), + }; + } + + return error; + }); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts new file mode 100644 index 0000000000..5b82f0ba85 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/constants/styles.ts @@ -0,0 +1,145 @@ +export default ` +.content-header-title { + font-size: 24px; +} +.entry-row { + margin-bottom: 15px; +} +#main-navbar-tools a.dropdown-toggle { + text-decoration: none; + color: #fff; +} +.navbar .dropdown-submenu { + position: relative; +} +.navbar .dropdown-menu { + margin: 0; + padding: 0; +} +.navbar .dropdown-menu a { + font-size: .9em; + padding: 10px 15px; + display: block; + min-width: 210px; + text-align: left; + border-radius: 0.25rem; + min-height: 44px; +} +[dir=rtl] .navbar .dropdown-menu a { + text-align: right!important; +} +.navbar .dropdown-submenu a::after { + transform: rotate(-90deg); + position: absolute; + right: 16px; + top: 18px; +} +[dir=rtl] .navbar .dropdown-submenu a::after { + transform: rotate(90deg); + left: 16px; + right: auto; + top: 20px; +} +.navbar .dropdown-submenu .dropdown-menu { + top: 0; + left: 100%; +} +.card-header .btn { + padding: 2px 6px; +} +.card-header h5 { + margin: 0; +} +.container > .card { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} +@media screen and (min-width: 992px) { + .navbar .dropdown:hover > .dropdown-menu { + display: block; + } + + .navbar .dropdown-submenu:hover > .dropdown-menu { + display: block; + } +} +.input-validation-error { + border-color: #dc3545; +} +.field-validation-error { + font-size: 0.8em; +} +.ui-table .ui-table-tbody > tr.empty-row > div.empty-row-content { + border: 1px solid #c8c8c8; + } +.abp-loading { + background: rgba(0, 0, 0, 0.05); +} +.modal-backdrop { +background-color: rgba(0, 0, 0, 0.6); +} + +.confirmation .confirmation-backdrop { + background: rgba(0, 0, 0, 0.7) !important; +} + .confirmation .confirmation-dialog { + border: none; + border-radius: 10px; + background-color: #fff; + box-shadow: 0 0 10px -5px rgba(0, 0, 0, 0.5); +} + .confirmation .confirmation-dialog .icon-container .icon { + stroke: #fff; + color: #fff; +} + .confirmation .confirmation-dialog .icon-container.info .icon { + stroke: #2f96b4; + color: #2f96b4; +} + .confirmation .confirmation-dialog .icon-container.success .icon { + stroke: #51a351; + color: #51a351; +} + .confirmation .confirmation-dialog .icon-container.warning .icon { + stroke: #f89406; + color: #f89406; +} + .confirmation .confirmation-dialog .icon-container.error .icon { + stroke: #bd362f; + color: #bd362f; +} + .confirmation .confirmation-dialog .content .title { + color: #222; +} + .confirmation .confirmation-dialog .content .message { + color: #777; +} + .confirmation .confirmation-dialog .footer { + background: transparent; +} + .confirmation .confirmation-dialog .footer .confirmation-button { + background-color: #eee; + color: #777; +} + .confirmation .confirmation-dialog .footer .confirmation-button:hover, .confirmation .confirmation-dialog .footer .confirmation-button:focus, .confirmation .confirmation-dialog .footer .confirmation-button:active { + background-color: #bbb; +} + .confirmation .confirmation-dialog .footer .confirmation-button--confirm { + background-color: #2f96b4; + color: #fff; +} + .confirmation .confirmation-dialog .footer .confirmation-button--confirm:hover { + background-color: #2e819b; +} +.ui-table .pagination-wrapper { + background-color: #f4f4f4; + border: 1px solid #c8c8c8; +} +.bordered .datatable-body-row { + border-top: 1px solid #eee; + margin-top: -1px; +} +.breadcrumb { + background-color: transparent; + padding: 0.27rem; +} +`; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts new file mode 100644 index 0000000000..e62f551851 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/components.ts @@ -0,0 +1,10 @@ +export const enum eThemeBasicComponents { + ApplicationLayout = 'Theme.ApplicationLayoutComponent', + AccountLayout = 'Theme.AccountLayoutComponent', + EmptyLayout = 'Theme.EmptyLayoutComponent', + Logo = 'Theme.LogoComponent', + Routes = 'Theme.RoutesComponent', + NavItems = 'Theme.NavItemsComponent', + CurrentUser = 'Theme.CurrentUserComponent', + Languages = 'Theme.LanguagesComponent', +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts new file mode 100644 index 0000000000..07635cbbc8 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/enums/index.ts @@ -0,0 +1 @@ +export * from './components'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts new file mode 100644 index 0000000000..5d15fe1b3c --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/index.ts @@ -0,0 +1 @@ +export * from './layout'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts new file mode 100644 index 0000000000..e2636e4f53 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/models/layout.ts @@ -0,0 +1,13 @@ +import { TemplateRef } from '@angular/core'; + +export namespace Layout { + export interface State { + navigationElements: NavigationElement[]; + } + + export interface NavigationElement { + name: string; + element: TemplateRef; + order?: number; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts new file mode 100644 index 0000000000..8102d94f62 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/index.ts @@ -0,0 +1,2 @@ +export * from './nav-item.provider'; +export * from './styles.provider'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts new file mode 100644 index 0000000000..7ade066f47 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/nav-item.provider.ts @@ -0,0 +1,31 @@ +import { NavItemsService } from '@abp/ng.theme.shared'; +import { APP_INITIALIZER } from '@angular/core'; +import { CurrentUserComponent } from '../components/nav-items/current-user.component'; +import { LanguagesComponent } from '../components/nav-items/languages.component'; +import { eThemeBasicComponents } from '../enums/components'; + +export const BASIC_THEME_NAV_ITEM_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureNavItems, + deps: [NavItemsService], + multi: true, + }, +]; + +export function configureNavItems(navItems: NavItemsService) { + return () => { + navItems.addItems([ + { + id: eThemeBasicComponents.Languages, + order: 100, + component: LanguagesComponent, + }, + { + id: eThemeBasicComponents.CurrentUser, + order: 100, + component: CurrentUserComponent, + }, + ]); + }; +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts new file mode 100644 index 0000000000..b823503912 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/providers/styles.provider.ts @@ -0,0 +1,43 @@ +import { ReplaceableComponentsService, CONTENT_STRATEGY, DomInsertionService } from '@abp/ng.core'; +import { APP_INITIALIZER } from '@angular/core'; +import { Store } from '@ngxs/store'; +import { AccountLayoutComponent } from '../components/account-layout/account-layout.component'; +import { ApplicationLayoutComponent } from '../components/application-layout/application-layout.component'; +import { EmptyLayoutComponent } from '../components/empty-layout/empty-layout.component'; +import styles from '../constants/styles'; +import { eThemeBasicComponents } from '../enums/components'; + +export const BASIC_THEME_STYLES_PROVIDERS = [ + { + provide: APP_INITIALIZER, + useFactory: configureStyles, + deps: [DomInsertionService, ReplaceableComponentsService], + multi: true, + }, +]; + +export function configureStyles( + domInsertion: DomInsertionService, + replaceableComponents: ReplaceableComponentsService, +) { + return () => { + domInsertion.insertContent(CONTENT_STRATEGY.AppendStyleToHead(styles)); + + initLayouts(replaceableComponents); + }; +} + +function initLayouts(replaceableComponents: ReplaceableComponentsService) { + replaceableComponents.add({ + key: eThemeBasicComponents.ApplicationLayout, + component: ApplicationLayoutComponent, + }); + replaceableComponents.add({ + key: eThemeBasicComponents.AccountLayout, + component: AccountLayoutComponent, + }); + replaceableComponents.add({ + key: eThemeBasicComponents.EmptyLayout, + component: EmptyLayoutComponent, + }); +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts new file mode 100644 index 0000000000..aaf1fcf036 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/services/layout.service.ts @@ -0,0 +1,39 @@ +import { ChangeDetectorRef, Injectable } from '@angular/core'; +import { eThemeBasicComponents } from '../enums'; +import { SubscriptionService } from '@abp/ng.core'; +import { fromEvent } from 'rxjs'; +import { debounceTime } from 'rxjs/operators'; + +@Injectable() +export class LayoutService { + isCollapsed = true; + + smallScreen: boolean; // do not set true or false + + logoComponentKey = eThemeBasicComponents.Logo; + + routesComponentKey = eThemeBasicComponents.Routes; + + navItemsComponentKey = eThemeBasicComponents.NavItems; + + constructor(private subscription: SubscriptionService, private cdRef: ChangeDetectorRef) {} + + private checkWindowWidth() { + const isSmallScreen = window.innerWidth < 992; + if (isSmallScreen && this.smallScreen === false) { + this.isCollapsed = false; + setTimeout(() => { + this.isCollapsed = true; + }, 100); + } + this.smallScreen = isSmallScreen; + this.cdRef.detectChanges(); + } + + subscribeWindowSize() { + this.checkWindowWidth(); + + const resize$ = fromEvent(window, 'resize').pipe(debounceTime(150)); + this.subscription.addOne(resize$, () => this.checkWindowWidth()); + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts new file mode 100644 index 0000000000..99a493c85a --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/lib/theme-basic.module.ts @@ -0,0 +1,88 @@ +import { CoreModule } from '@abp/ng.core'; +import { ThemeSharedModule } from '@abp/ng.theme.shared'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { NgbCollapseModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; +import { + NgxValidateCoreModule, + VALIDATION_ERROR_TEMPLATE, + VALIDATION_INVALID_CLASSES, + VALIDATION_TARGET_SELECTOR, +} from '@ngx-validate/core'; +import { AccountLayoutComponent } from './components/account-layout/account-layout.component'; +import { ApplicationLayoutComponent } from './components/application-layout/application-layout.component'; +import { EmptyLayoutComponent } from './components/empty-layout/empty-layout.component'; +import { LogoComponent } from './components/logo/logo.component'; +import { CurrentUserComponent } from './components/nav-items/current-user.component'; +import { LanguagesComponent } from './components/nav-items/languages.component'; +import { NavItemsComponent } from './components/nav-items/nav-items.component'; +import { RoutesComponent } from './components/routes/routes.component'; +import { ValidationErrorComponent } from './components/validation-error/validation-error.component'; +import { BASIC_THEME_NAV_ITEM_PROVIDERS } from './providers/nav-item.provider'; +import { BASIC_THEME_STYLES_PROVIDERS } from './providers/styles.provider'; +import { PageAlertContainerComponent } from './components/page-alert-container/page-alert-container.component'; +import { TenantBoxComponent } from './components/account-layout/tenant-box/tenant-box.component'; +import { AuthWrapperComponent } from './components/account-layout/auth-wrapper/auth-wrapper.component'; + +export const LAYOUTS = [ApplicationLayoutComponent, AccountLayoutComponent, EmptyLayoutComponent]; + +@NgModule({ + declarations: [ + ...LAYOUTS, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + RoutesComponent, + CurrentUserComponent, + LanguagesComponent, + PageAlertContainerComponent, + TenantBoxComponent, + AuthWrapperComponent, + ], + exports: [ + ...LAYOUTS, + ValidationErrorComponent, + LogoComponent, + NavItemsComponent, + RoutesComponent, + CurrentUserComponent, + LanguagesComponent, + PageAlertContainerComponent, + ], + imports: [ + CoreModule, + ThemeSharedModule, + NgbCollapseModule, + NgbDropdownModule, + NgxValidateCoreModule, + ], + entryComponents: [...LAYOUTS, ValidationErrorComponent, CurrentUserComponent, LanguagesComponent], +}) +export class BaseThemeBasicModule {} + +@NgModule({ + exports: [BaseThemeBasicModule], + imports: [BaseThemeBasicModule], +}) +export class ThemeBasicModule { + static forRoot(): ModuleWithProviders { + return { + ngModule: ThemeBasicModule, + providers: [ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts new file mode 100644 index 0000000000..9b5870914b --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/public-api.ts @@ -0,0 +1,9 @@ +/* + * Public API Surface of theme-basic + */ + +export * from './lib/components'; +export * from './lib/enums'; +export * from './lib/models'; +export * from './lib/providers'; +export * from './lib/theme-basic.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts new file mode 100644 index 0000000000..1100b3e8a6 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json new file mode 100644 index 0000000000..466bcc3756 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/libs/theme-basic/testing", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts new file mode 100644 index 0000000000..282e5a2da7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/lib/theme-basic-testing.module.ts @@ -0,0 +1,40 @@ +import { + BaseThemeBasicModule, + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + ValidationErrorComponent, +} from '@abp/ng.theme.basic'; +import { ModuleWithProviders, NgModule } from '@angular/core'; +import { + VALIDATION_ERROR_TEMPLATE, + VALIDATION_INVALID_CLASSES, + VALIDATION_TARGET_SELECTOR, +} from '@ngx-validate/core'; + +@NgModule({ + exports: [BaseThemeBasicModule], + imports: [BaseThemeBasicModule], +}) +export class ThemeBasicTestingModule { + static withConfig(): ModuleWithProviders { + return { + ngModule: ThemeBasicTestingModule, + providers: [ + BASIC_THEME_NAV_ITEM_PROVIDERS, + BASIC_THEME_STYLES_PROVIDERS, + { + provide: VALIDATION_ERROR_TEMPLATE, + useValue: ValidationErrorComponent, + }, + { + provide: VALIDATION_TARGET_SELECTOR, + useValue: '.form-group', + }, + { + provide: VALIDATION_INVALID_CLASSES, + useValue: 'is-invalid', + }, + ], + }; + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts new file mode 100644 index 0000000000..24a3ac7586 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/testing/src/public-api.ts @@ -0,0 +1 @@ +export * from './lib/theme-basic-testing.module'; diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json new file mode 100644 index 0000000000..692cc17b32 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "allowSyntheticDefaultImports": true, + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json new file mode 100644 index 0000000000..bbcc12b1c7 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "exclude": ["src/test-setup.ts", "**/*.spec.ts"], + "include": ["**/*.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json new file mode 100644 index 0000000000..331d0ecb05 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.lib.prod.json @@ -0,0 +1,11 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial", + "enableIvy": false + } +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json new file mode 100644 index 0000000000..cfff29a544 --- /dev/null +++ b/npm/ng-packs/nx/ng-packs/libs/theme-basic/tsconfig.spec.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": ["**/*.spec.ts", "**/*.d.ts"] +} diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md b/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md index 0578cf669d..e1b21f241d 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/README.md @@ -1,7 +1,3 @@ -# theme-shared +

@abp/ng.theme.shared

-This library was generated with [Nx](https://nx.dev). - -## Running unit tests - -Run `nx test theme-shared` to execute the unit tests. +[docs.abp.io](https://docs.abp.io) diff --git a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json b/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json index 69a7ee91b9..ca09e6b35d 100644 --- a/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json +++ b/npm/ng-packs/nx/ng-packs/libs/theme-shared/ng-package.json @@ -1,6 +1,7 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../dist/libs/theme-shared", + "assets": ["./styles/**/*"], "lib": { "entryFile": "src/public-api.ts" }, diff --git a/npm/ng-packs/nx/ng-packs/tsconfig.base.json b/npm/ng-packs/nx/ng-packs/tsconfig.base.json index ebd57b3a50..eab015bf6d 100644 --- a/npm/ng-packs/nx/ng-packs/tsconfig.base.json +++ b/npm/ng-packs/nx/ng-packs/tsconfig.base.json @@ -18,7 +18,8 @@ // "@abp/ng.core": ["libs/core/src/public-api.ts"], // "@abp/ng.theme.shared": ["libs/theme-shared/src/public-api.ts"] "@abp/ng.core": ["dist/libs/core"], - "@abp/ng.theme.shared": ["dist/libs/theme-shared"] + "@abp/ng.theme.shared": ["dist/libs/theme-shared"], + "@abp/ng.theme.basic": ["dist/libs/theme-basic"] } }, "exclude": ["node_modules", "tmp"]