open-index/open-npm huggingface dataset:
npm package: @nsilly/notification-nexmo-channel
Description: - [Nsilly Nexmo Notification Channel](#nsilly-nexmo-notification-channel)   - [Installation](#installation)     - [Register nexmo channel](#register-nexmo-channel)   - [How to use](#how-to-use)
Author: Hieupv
Latest version: 1.0.5

# Nsilly Nexmo Notification Channel

- [Nsilly Nexmo Notification Channel](#nsilly-nexmo-notification-channel)
  - [Installation](#installation)
    - [Register nexmo channel](#register-nexmo-channel)
  - [How to use](#how-to-use)


## Installation

Install package from NPM


```
npm install @nsilly/notification-nexmo-channel
```

or

```
yarn add @nsilly/notification-nexmo-channel
```


### Register nexmo channel

Register nexmo channel in `app/Providers/AppServiceProviders.js`

```javascript
import { NotificationService } from '@nsilly/notification';
import { NexmoChannel } from '@nsilly/notification-nexmo-channel';

export default class AppServiceProvider extends ServiceProvider {
  // ...
  boot() {
    // ...
    NotificationService.register([
      new NexmoChannel({
        apiKey: NEXMO_API_KEY,
        apiSecret: NEXMO_API_SECRET,
        applicationId: NEXMO_APP_ID,
        privateKey: NEXMO_PRIVATE_KEY_PATH,
        signatureSecret: NEXMO_SIGNATURE_SECRET,
        signatureMethod: NEXMO_SIGNATURE_METHOD,
        defaultSenderNumber: NEXMO_SENDER_NUMBER,
      }, options)

      // all options available https://github.com/Nexmo/nexmo-node
    ]);
  }
}

```

> By default Nexmo Channel looking for `NEXMO_API_KEY`, `NEXMO_API_SECRET` and `NEXMO_SENDER_NUMBER` environment variable

## How to use

Create your notification that use channel `NEXMO_SMS`

```javascript
import { Notification } from '@nsilly/notification';
import { NexmoClient, NEXMO_SMS } from '@nsilly/notification-nexmo-channel';

export class TestNotification extends Notification {
  via() {
    return [NEXMO_SMS];
  }

  toNexmo(notifiable) {
    const msg = new NexmoClient().to(notifiable.getPhoneNumber()).content('Good morning'));
    // You also can override `NEXMO_SENDER_NUMBER` 
    // const msg = new NexmoClient().from(YOUR_NUMBER).to(notifiable.getPhoneNumber()).content('Good morning'));

    return msg;
  }
}
```
npm package: @nsinformatika/nsdesign
Description: **NSDesign** is a reusable Angular UI component library built using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0. It provides simple and responsive components, including an accessible and flexible `<ns-button>` with built-in loadin
Latest version: 0.0.6

# NSDesign UI Library

**NSDesign** is a reusable Angular UI component library built using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0. It provides simple and responsive components, including an accessible and flexible `<ns-button>` with built-in loading state animation.

---

## ✨ Features

- ⚡ Lightweight and tree-shakable Angular components
- 🎨 Responsive button with `small`, `default`, and `large` sizes
- 🔄 Animated SVG loading spinner (orbit-style)
- 🎛️ Customizable via `class`, `variant`, `disabled`, `loading`, etc.
- 🌗 Auto theming ready for dark/light UI

---

## 📦 Installation

```bash
npm install @nsinformatika/nsdesign
```

---

## 🧩 Usage

Import the module in your Angular app:

```ts
import { NsButtonModule } from '@nsinformatika/nsdesign';

@NgModule({
  imports: [NsButtonModule],
})
export class AppModule {}
```

---

### 🧪 Basic Example

```html
<ns-button (clicked)="submit()">Submit</ns-button>
```

### 🌀 Loading State

```html
<ns-button [loading]="isSubmitting" [disabled]="true">Submit</ns-button>
```

### 🔠 Sizes

```html
<ns-button class="ns-button-small">Small</ns-button>
<ns-button>Default</ns-button>
<ns-button class="ns-button-large">Large</ns-button>
```


## 📚 Component: `<ns-button>`

| Input      | Type      | Description                       |
|------------|-----------|-----------------------------------|
| `disabled` | `boolean` | Disables the button               |
| `loading`  | `boolean` | Shows loading spinner (SVG)       |
| `class`    | `string`  | Allows styling via global class   |

| Output   | Type                 | Description                   |
|----------|----------------------|-------------------------------|
| `clicked`| `EventEmitter<boolean>` | Emits when button is clicked |

> ⚠️ If `loading` or `disabled` is true, click will be ignored.

---

## 🧠 Advanced Notes

- Uses `ViewEncapsulation.None` so host class styling works globally
- Loading spinner is a lightweight rotating SVG circle (not GIF)
- Button height and padding auto-adjusts across breakpoints

---

More info: [Angular CLI Docs](https://angular.dev/tools/cli)

---

## 🧾 License

MIT © 2025 Sandika Gusti Prakasa