open-index/open-npm huggingface dataset:
npm package: @smartbit4all/authentication
Description: These packages must be updated in case of a new version:
Latest version: 4.0.9

# Smart Authentication

## References

These packages must be updated in case of a new version:

- There are no references yet

---

## How to use

### Installation

**First you must install the [_@smartbit4all/session_](https://www.npmjs.com/package/@smartbit4all/session) in order to use this package.**

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/authentication

Provide the `SmartAuthenticationService` as a **global service** in the app.module:

`app.module.ts:`

    @NgModule({
        declarations: [...],
        imports: [
            SmartAuthenticationModule,
            ...
        ],
        providers: [
            SmartAuthenticationService,
            ...
        ],
        ...
    })

### Prerequisites

**If you have installed and done the required steps to use the SmartSessionService**, please complete the generated AuthenticationService with these new features belove.

**However, if you have not**, please follow the guide of the [_@smartbit4all/session_](https://www.npmjs.com/package/@smartbit4all/session).

### Usage

The **AuthenticationService** must be prepared to use the **SmartAuthenticationService**. The ">>>" marks the snippets you have to add.

`authentication.service.ts:`

    @Injectable({
        providedIn: 'root'
    })
    export class AuthenticationService {
        ...

        constructor(..., private auth: SmartAuthenticationService) {
            // set up SmartSessionService
            this.url = 'http://localhost:9171/api';
            ...
        >>> this.auth.setUrl(this.url);
            ...
        }

        ...

    >>> async login(request: LocalAuthenticationLoginRequest): Promise<boolean> {
            await this.auth.login(request);
            let isAuth = await this.session.getIsAuthenticated();
            if (isAuth) {
                // the authentication was successful,
                // redirect the user to the home page
                this.router.navigate(['']);
            }
            return isAuth;
        }

    >>> async logout() {
            this.auth.logout();
            this.router.navigate(['login']);
        }

    }

---

## Version logs

## @smartbit4all/form v1.0.4

**Type: Update**

This version contains a login function change. Login function throw error if the login attempt failed.

## @smartbit4all/form v1.0.1

**Type: Update**

The package has been published.

## @smartbit4all/authentication v0.1.0

**Type: Feature**

The SmartAuthentication has been created.
npm package: @smartbit4all/component-factory-service
Description: ## References
Latest version: 1.0.2

# Smart Component Factory Service

## References

These packages must be updated in case of a new version:

-   [_@smartbit4all/expandable-section_](https://www.npmjs.com/package/@smartbit4all/expandable-section)

---

## How to use

### Installation

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/component-factory-service

### Usage

In this example there are two components, which are called `Example1Component` and `Example2Component`, these will be presented with the `ComponentFactoryService` in the `ParentComponent`.

`parent.component.html:`

    <button (click)="show(1)">Show 1</button>
    <button (click)="show(2)">Show 2</button>

    <ng-template #exampleRef></ng-template>

`parent.component.ts:`

    export class ParentComponent implements AfterViewInit {

        @ViewChild('exampleRef', { read: ViewContainerRef }) vcRefExample?: ViewContainerRef;

        componentRef?: ComponentRef<any>;

        constructor(private cfService: ComponentFactoryService) { ... }

        ngAfterViewInit(): void {
            this.createExampleOne();
        }

        show(componentNumber: number): void {
            if (componentNumber === 1)
                this.createExampleOne();
            else if (componentNumber === 2)
                this.createExampleTwo();
        }

        createExampleOne(): void {
            this.vcRefExample?.clear();

            this.cfService.createComponent(
                this.vcRefExample!,
                Example1Component
            );
        }

        createExampleTwo(): void {
            if (this.componentRef) {
                this.cfService.destroyComponent(this.componentRef);
            }

            let exampleInput: any = { ... }

            this.componentRef = this.cfService.createComponent(
                this.vcRefExample!,
                Example2Component,
                new Map<string, any>([['exampleInput', exampleInput]])
            );
        }
    }

`example2.component.ts:`

    export class Example2Component {
        @Input() exampleInput: any;

        ...
    }

---

## Version logs

## @smartbit4all/form v1.0.1

**Type: Update**

The package has been published.

## @smartbit4all/component-factory-service v0.0.1

**Type: Feature**

The npm package has been created.

The `ComponentFactoryService` helps to use **ng-template** in your code.
npm package: @smartbit4all/component-layout
Description: ---
Latest version: 1.0.5

# Smart Component Layout

---

## How to use

### Installation

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/component-layout

Import the `SmartComponentLayoutComponent` in the app.module:

`app.module.ts:`

    @NgModule({
        declarations: [...],
        imports: [
            SmartComponentLayoutComponent,
            ...
        ],
        providers: [
            SmartSessionService,
    	    SmartViewContextService,
            ...
        ],
        ...
    })

### Usage
npm package: @smartbit4all/document-explorer
Description: 1.  Create a project-specific subclass from the `DocuStoreExplorerPageApi` interface and its implementation.
Latest version: 5.0.13

# SmartDocuStoreExplorer

# How to setup

1.  Create a project-specific subclass from the `DocuStoreExplorerPageApi` interface and its implementation.

```
public interface YourDocuExplorerPageApi extends DocuStoreExplorerPageApi {}

public class YourDocuExplorerPageApiImpl extends DocuStoreExplorerPageApiImpl
    implements YourDocuExplorerPageApi{}
```

2.  Create a project-specific subclass from the `DocuStoreFolderPageApi` interface and its implementation.

```
public interface YourDocuFolderPageApi extends DocuStoreFolderPageApi {}

public class YourDocuFolderPageApiImpl extends DocuStoreFolderPageApiImpl
    implements YourDocuFolderPageApi {
```

3.  Create project-specific view names that you provide in the `@ViewApi` annotations.

```
@ViewApi(value = YourViewNames.YOUR_DOCU_EXPLORER,
    parent = YourViewNames.SOME_PARENT)
public interface MebitDocuExplorerPageApi extends DocuStoreExplorerPageApi {}

@ViewApi(value = YourViewNames.YOUR_DOCU_FOLDER,
    parent = YourViewNames.YOUR_DOCU_EXPLORER)
public interface YourDocuFolderPageApi extends DocuStoreFolderPageApi {}
```

4.  In your project's UI configuration, use the `@Bean` annotation to define your derived interfaces and implementations.

```
  @Bean
  public DocuStoreFolderPageApi folderPageApi() {
    return new YourDocuFolderPageApiImpl();
  }

  @Override
  @Bean
  public DocuStoreExplorerPageApi docuStoreExplorerPageApi() {
    return new YourDocuExplorerPageApiImpl();
  }
```

5.  Install the `@smartbit4all/document-explorer` npm package into your Angular project.
    [@smartbit4all/document-explorer](https://www.npmjs.com/package/@smartbit4all/document-explorer)
6.  In the `Pages.ts` file, specify the names of the new pages.

```
export enum Pages {
    ...
    YOUR_DOCU_EXPLORER = 'YourDocuExplorer',
    YOUR_DOCU_FOLDER = 'YourDocuFolder',
}
```

7.  In the `viewHandlers.ts` file, assign the URLs corresponding to the view names.

```
export const viewContextHandlers: SmartViewHandlerModel[] = [
    ...
    {
    name: Pages.YOUR_DOCU_EXPLORER,
    route: 'your/route/for the component',
  },
  {
    name: Pages.YOUR_DOCU_FOLDER,
    route: 'your/route/for the component',
  },
```

8.  Configure the Angular routing according to your needs.

9.  In the app.module.ts provide the DocuStoreExplorer viewname and the project AuthenticationService like this:

```
providers: [
    ...
    {
      provide: 'AuthenticationService',
      useClass: AuthenticationService,
    },
    {
      provide: 'pageName',
      useValue: Pages.SUBSTANCE_DOCU_EXPLORER,
    },
  ],
```
npm package: @smartbit4all/filter
Description: Go to your project, open the terminal and use the following command:
Latest version: 1.1.14

# Smart Filter

## How to use

### Installation

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/filter

Then import it in the AppModule:

`app.module.ts:`

    import { SmartFilterModule } from '@smartbit4all/filter';
    ...
    @NgModule({
        declarations: [...]
        imports: [
            ...
            SmartFilterModule,
        ],
        providers: []
        ...
    })

### Prerequisites

Coming soon...

### Usage

Coming soon...

---

## Version logs

## @smartbit4all/filter v1.1.8

**Type: Update**

From now on it is possible to catch onValueChanges.

    filter!: SmartFilter;

    @ViewChild("smartfilter") filterComp!: SmartFilterComponent;

    constructor() {}
    ngAfterViewInit(): void {
        this.filterComp.service.change.pipe.subscribe(() => {
            console.log(this.filterComp.service.filter);
        });
    }

    async submitForm(): Promise<void> {
        let res = await this.filterComp.submit();
        console.log(res);
    }

## @smartbit4all/filter v1.1.4

**Type: Bugfix**

Date between has been fixed.

## @smartbit4all/filter v1.1.1

**Type: Update**

Make possible action selector optional.

To display the possible actions above the filter field set the showPossibleActions property TRUE in the SmartFilter model.

    export interface SmartFilter {
        data: FilterExpressionField[];
        type: SmartFilterType;
        showPossibleActions?: boolean; <<<==== set true to display possible actions
        controlPanelPosition?: SmartFilterPosition;
        queriesPosition?: SmartFilterPosition;
        advancedQueryCustomComponent?: SmartFilterExpressionFieldComponent;
        operationTranslator?: (operation: FilterExpressionOperation) => string;
    }

## @smartbit4all/filter v1.1.0

**Type: Update**

Make filter view layout responsive.
Seperate advanced-filter component to another package.

How to make filter view responsise:

-   add width to the parent div
-   use relative unit (e.g. vw) for width css property

## @smartbit4all/filter v1.0.0

**Type: Feature**

The `@smartbit4all/filter` has been published.
npm package: @smartbit4all/filter-builder
Description: This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
Latest version: 0.0.9

# SmartFilterBuilder

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.

## Code scaffolding

Run `ng generate component component-name --project smart-filter-builder` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project smart-filter-builder`.
> Note: Don't forget to add `--project smart-filter-builder` or else it will be added to the default project in your `angular.json` file. 

## Build

Run `ng build smart-filter-builder` to build the project. The build artifacts will be stored in the `dist/` directory.

## Publishing

After building your library with `ng build smart-filter-builder`, go to the dist folder `cd dist/smart-filter-builder` and run `npm publish`.

## Running unit tests

Run `ng test smart-filter-builder` to execute the unit tests via [Karma](https://karma-runner.github.io).

## Further help

To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
npm package: @smartbit4all/filter-editor
Description: Go to your project, open the terminal and use the following command:
Latest version: 0.0.9

# Smart Table

## How to use

### Installation

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/filter-editor

Then import it in the AppModule:

`app.module.ts:`

    import { SmartFilterEditorModule } from '@smartbit4all/filter-editor';
    ...
    @NgModule({
        declarations: [...]
        imports: [
            ...
            SmartFilterEditorModule,
        ]
        ...
    })

### Usage

TODO

## Version logs

## @smartbit4all/filter-editor v0.0.1

The SmartFilterEditor package has been initialized.
npm package: @smartbit4all/generic-pages
Description: A generic search page with filters and a grid (also a SmartComponent). It's model is SearchPageModel.
Latest version: 4.0.20

# SmartGenericPages

## Usage

### SearchPageComponent

A generic search page with filters and a grid (also a SmartComponent). It's model is SearchPageModel.

For now you should create a subclassed component from it, defining a template/style as usual:

    @Component({
      selector: 'app-my-special',
      templateUrl: './my-special.component.html',
      styleUrls: ['./my-special.component.css'],
    })
    export class MySpecialComponent extends SearchPageComponent {
      constructor(inject: Injector, auth: AuthenticationService) {
        super(inject, auth, Pages.MySpecialPage);
      }
    }

Grid's identifier is RESULT_GRID, if you need to modify it, override getGridIdentifier() method.
npm package: @smartbit4all/grid
Description: This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.
Latest version: 1.1.3

# SmartGrid

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0.

## Code scaffolding

Run `ng generate component component-name --project smart-grid` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project smart-grid`.
> Note: Don't forget to add `--project smart-grid` or else it will be added to the default project in your `angular.json` file. 

## Build

Run `ng build smart-grid` to build the project. The build artifacts will be stored in the `dist/` directory.

## Publishing

After building your library with `ng build smart-grid`, go to the dist folder `cd dist/smart-grid` and run `npm publish`.

## Running unit tests

Run `ng test smart-grid` to execute the unit tests via [Karma](https://karma-runner.github.io).

## Further help

To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
npm package: @smartbit4all/icon
Description: This package use **MatIcon** from Angular Material. To use this package please **install Angular Material** first.
Latest version: 1.0.2

# Smart Icon

## How to use

### Installation

This package use **MatIcon** from Angular Material. To use this package please **install Angular Material** first.

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/icon

Then import it in the AppModule:

`app.module.ts:`

    import { SmartIconModule, SmartIconService } from '@smartbit4all/icon';
    ...
    @NgModule({
        declarations: [...]
        imports: [
            ...
            SmartIconModule,
        ],
        providers: [
            ...
    	    SmartIconService,
        ]
        ...
    })

### Prerequisites

In order to use custom icons with this package you have to do the following steps:

Place the svg icons into a subfolder of the /assets

`assets/customIcons/`

-   customAddIcon.svg
-   customUserIcon.svg

Change the default colours in the svg to 'color'.

`assets/customIcons/customAddIcon.svg`

    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
        <path ... fill="color" stroke="color" />
    </svg>

Create an enum which contains all the icons and their paths.

`src/app/icons/customIcon.ts`

    export type CustomIcon = 'Add' | 'User';

    export const CustomIcon = {
        Add: 'customAddIcon' as CustomIcon,
        User: 'customUserIcon' as CustomIcon
    }

Set up the icon sets in the environment.ts. The **property name of the object** (in this scenario _customIcons_) has to **match** with the name of the **folder that contains the svg files**. The value has to be the enum which contains the name of the svg files.

`src/environments.ts`

    import { CustomIcon } from 'src/app/icons/';

    export const environment = {
        ...
        customIconSets: [{ customIcons: CustomIcon }],
    };

Provide the icon sets for the SmartIconService.

`src/app/app.component.ts`

    export class AppComponent {

        constructor(private smartIconService: SmartIconService) {
            this.smartIconService.iconSets(environment.customIconSets);
        }

    }

### Usage

`example.component.html`

    <smart-icon
        [icon]="'Add'"
        [color]="'primary'"
    ></smart-icon>

Set the material styles for these:

`custom-theme.scss`

    .mat-icon.mat-primary {
        stroke: blue;
        color: blue;
    }
    .mat-icon.mat-accent {
        stroke: red;
        color: red;
    }
    ...

---

## Version logs

## @smartbit4all/icon v1.0.0

**Type: Feature**

The `@smartbit4all/icon` has been published.
npm package: @smartbit4all/navbar
Description: ## References
Latest version: 1.0.14

# Smart Navbar

## References

These packages must be updated in case of a new version:

-   There are no references yet

---

## How to use

### Installation

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/navbar

Then import it in the AppModule:

`app.module.ts:`

    import { SmartNavbarModule } from '@smartbit4all/navbar';
    ...
    @NgModule({
        declarations: [...]
        imports: [
            ...
            SmartNavbarModule,
        ],
        ...
    })

### Usage

`example.component.html:`

    <smart-navbar [smartNavbar]="exampleNavbar"></smart-navbar>

`example.component.css:`

    .navbar {
        height: 250px;
    }

    ::ng-deep .navbarHeight {
        background-color: transparent !important;
    }

`example.component.ts:`

    export class ExampleComponent {
        exampleNavbar: SmartNavbar;
        user: ExampleUser;

        constructor() {
            this.exampleNavbar = {
                icon: 'assets/icon.png',
                searchBar: {
                    placeholder: 'Search',
                    quickFilterLabel: 'Quick filters',
                    quickFilters: ['Quick filter 1'],
                    searchCallback: this.onSearch.bind(this)
                },
                iconCallback: this.onHome.bind(this),
                filterButtonLabel: 'Filters',
                filterButtonCallback: this.onFilter.bind(this),
                userSettings: {
                    label: user.name,
                    settings: [
                        {
                            label: 'Logout',
                            icon: 'logout',
                            position: SmartUserSettinsIconPosition.POST,
                            callback: logout.bind(this)
                        }
                    ]
                }
            };
        }

        logout(): void {
            ...
        }
    }

You can put your custom component before input field. In this way the iconCallback wont be called.:

    <smart-navbar [smartNavbar]="exampleNavbar">
        <div titleComponent> Custom title </div>
    </smart-navbar>

You can put your custom component into the filter button:

    <smart-navbar [smartNavbar]="exampleNavbar">
        <div filterComponent> Custom title </div>
    </smart-navbar>

---

## Version logs

## @smartbit4all/form v1.0.5

**Type: Feature**

From now on the user drop-down menu can be used. The menu items can be parameterized with an icon, its position (FRONT or POST), label and a callback.

## @smartbit4all/form v1.0.1

**Type: Update**

The package has been published.

## @smartbit4all/navbar v0.0.3

**Type: Feature**

The basic smart navbar with its features.
npm package: @smartbit4all/ngx-authentication
Description: These packages must be updated in case of a new version:
Latest version: 0.0.1

# Smart Authentication

## References

These packages must be updated in case of a new version:

- There are no references yet

---

## How to use

### Installation

**First you must install the [_@smartbit4all/session_](https://www.npmjs.com/package/@smartbit4all/session) in order to use this package.**

Go to your project, open the terminal and use the following command:

    npm i @smartbit4all/authentication

Provide the `SmartAuthenticationService` as a **global service** in the app.module:

`app.module.ts:`

    @NgModule({
        declarations: [...],
        imports: [
            SmartAuthenticationModule,
            ...
        ],
        providers: [
            SmartAuthenticationService,
            ...
        ],
        ...
    })

### Prerequisites

**If you have installed and done the required steps to use the SmartSessionService**, please complete the generated AuthenticationService with these new features belove.

**However, if you have not**, please follow the guide of the [_@smartbit4all/session_](https://www.npmjs.com/package/@smartbit4all/session).

### Usage

The **AuthenticationService** must be prepared to use the **SmartAuthenticationService**. The ">>>" marks the snippets you have to add.

`authentication.service.ts:`

    @Injectable({
        providedIn: 'root'
    })
    export class AuthenticationService {
        ...

        constructor(..., private auth: SmartAuthenticationService) {
            // set up SmartSessionService
            this.url = 'http://localhost:9171/api';
            ...
        >>> this.auth.setUrl(this.url);
            ...
        }

        ...

    >>> async login(request: LocalAuthenticationLoginRequest): Promise<boolean> {
            await this.auth.login(request);
            let isAuth = await this.session.getIsAuthenticated();
            if (isAuth) {
                // the authentication was successful,
                // redirect the user to the home page
                this.router.navigate(['']);
            }
            return isAuth;
        }

    >>> async logout() {
            this.auth.logout();
            this.router.navigate(['login']);
        }

    }

---

## Version logs

## @smartbit4all/form v1.0.4

**Type: Update**

This version contains a login function change. Login function throw error if the login attempt failed.

## @smartbit4all/form v1.0.1

**Type: Update**

The package has been published.

## @smartbit4all/authentication v0.1.0

**Type: Feature**

The SmartAuthentication has been created.
npm package: @smartbit4all/ngx-docustore
Description: 1.  Create a project-specific subclass from the `DocuStoreExplorerPageApi` interface and its implementation.
Latest version: 0.0.1

# SmartDocuStoreExplorer

# How to setup

1.  Create a project-specific subclass from the `DocuStoreExplorerPageApi` interface and its implementation.

```
public interface YourDocuExplorerPageApi extends DocuStoreExplorerPageApi {}

public class YourDocuExplorerPageApiImpl extends DocuStoreExplorerPageApiImpl
    implements YourDocuExplorerPageApi{}
```

2.  Create a project-specific subclass from the `DocuStoreFolderPageApi` interface and its implementation.

```
public interface YourDocuFolderPageApi extends DocuStoreFolderPageApi {}

public class YourDocuFolderPageApiImpl extends DocuStoreFolderPageApiImpl
    implements YourDocuFolderPageApi {
```

3.  Create project-specific view names that you provide in the `@ViewApi` annotations.

```
@ViewApi(value = YourViewNames.YOUR_DOCU_EXPLORER,
    parent = YourViewNames.SOME_PARENT)
public interface MebitDocuExplorerPageApi extends DocuStoreExplorerPageApi {}

@ViewApi(value = YourViewNames.YOUR_DOCU_FOLDER,
    parent = YourViewNames.YOUR_DOCU_EXPLORER)
public interface YourDocuFolderPageApi extends DocuStoreFolderPageApi {}
```

4.  In your project's UI configuration, use the `@Bean` annotation to define your derived interfaces and implementations.

```
  @Bean
  public DocuStoreFolderPageApi folderPageApi() {
    return new YourDocuFolderPageApiImpl();
  }

  @Override
  @Bean
  public DocuStoreExplorerPageApi docuStoreExplorerPageApi() {
    return new YourDocuExplorerPageApiImpl();
  }
```

5.  Install the `@smartbit4all/document-explorer` npm package into your Angular project.
    [@smartbit4all/document-explorer](https://www.npmjs.com/package/@smartbit4all/document-explorer)
6.  In the `Pages.ts` file, specify the names of the new pages.

```
export enum Pages {
    ...
    YOUR_DOCU_EXPLORER = 'YourDocuExplorer',
    YOUR_DOCU_FOLDER = 'YourDocuFolder',
}
```

7.  In the `viewHandlers.ts` file, assign the URLs corresponding to the view names.

```
export const viewContextHandlers: SmartViewHandlerModel[] = [
    ...
    {
    name: Pages.YOUR_DOCU_EXPLORER,
    route: 'your/route/for the component',
  },
  {
    name: Pages.YOUR_DOCU_FOLDER,
    route: 'your/route/for the component',
  },
```

8.  Configure the Angular routing according to your needs.

9.  In the app.module.ts provide the DocuStoreExplorer viewname and the project AuthenticationService like this:

```
providers: [
    ...
    {
      provide: 'AuthenticationService',
      useClass: AuthenticationService,
    },
    {
      provide: 'pageName',
      useValue: Pages.SUBSTANCE_DOCU_EXPLORER,
    },
  ],
```
npm package: @smartbit4all/ngx-generic-pages
Description: A generic search page with filters and a grid (also a SmartComponent). It's model is SearchPageModel.
Latest version: 0.0.1

# SmartGenericPages

## Usage

### SearchPageComponent

A generic search page with filters and a grid (also a SmartComponent). It's model is SearchPageModel.

For now you should create a subclassed component from it, defining a template/style as usual:

    @Component({
      selector: 'app-my-special',
      templateUrl: './my-special.component.html',
      styleUrls: ['./my-special.component.css'],
    })
    export class MySpecialComponent extends SearchPageComponent {
      constructor(inject: Injector, auth: AuthenticationService) {
        super(inject, auth, Pages.MySpecialPage);
      }
    }

Grid's identifier is RESULT_GRID, if you need to modify it, override getGridIdentifier() method.
npm package: @smartbit4all/subject
Description: This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.3.0.
Latest version: 0.0.1

# SmartSubject

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.3.0.

## Code scaffolding

Run `ng generate component component-name --project smart-subject` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project smart-subject`.
> Note: Don't forget to add `--project smart-subject` or else it will be added to the default project in your `angular.json` file. 

## Build

Run `ng build smart-subject` to build the project. The build artifacts will be stored in the `dist/` directory.

## Publishing

After building your library with `ng build smart-subject`, go to the dist folder `cd dist/smart-subject` and run `npm publish`.

## Running unit tests

Run `ng test smart-subject` to execute the unit tests via [Karma](https://karma-runner.github.io).

## Further help

To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.