# @sergioblanco86/ngx-nestable

> Nestable list with drag and drop for Angular

Latest version **0.9.4** (published 2018-11-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install @sergioblanco86/ngx-nestable
pnpm add @sergioblanco86/ngx-nestable
yarn add @sergioblanco86/ngx-nestable
bun add @sergioblanco86/ngx-nestable
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.9.4 |
| Published | 2018-11-23 |
| First published | 2018-11-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 351.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | sergioblanco86 |
| Keywords | angular, nestable |

## Links

- npm: https://www.npmjs.com/package/@sergioblanco86/ngx-nestable
- Homepage: https://github.com/sergioblanco86/ngx-nestable
- npm.io page: https://npm.io/package/@sergioblanco86/ngx-nestable

## Dependencies (2)

- [tslib](https://npm.io/package/tslib.md) ^1.9.0
- [@angular/cdk](https://npm.io/package/@angular/cdk.md) ^7.0.0

## Alternatives

- [@lexical/table](https://npm.io/package/@lexical/table.md) — 3.0M weekly downloads
- [mantine-datatable](https://npm.io/package/mantine-datatable.md) — 98.2K weekly downloads
- [react-native-collapsible-tab-view](https://npm.io/package/react-native-collapsible-tab-view.md) — 70.6K weekly downloads
- [@handsontable/vue3](https://npm.io/package/@handsontable/vue3.md) — 16.1K weekly downloads
- [vuewordcloud](https://npm.io/package/vuewordcloud.md) — 7.2K weekly downloads

## Recent versions

- 0.9.4 (latest) — 2018-11-23
- 0.9.3 — 2018-11-20
- 0.9.2 — 2018-11-20
- 0.9.1 — 2018-11-20

## README

<p align="center">
  <img height="200px" width="200px" style="text-align: center;" src="https://cybercomet.github.io/ngx-nestable/assets/ngx_nestable.svg">
  <h1 align="center">Angular Nestable List</h1>
</p>

# ngx-nestable modified
Nestable list for Angular4 and beyond. This is a Angular adaptation of Jquery [Nestable](https://dbushell.com/Nestable/) library.
[Demo](https://cybercomet.github.io/ngx-nestable)
This version has been modified to fit special necesities. The nested property 'children' has been chaged for  'properties'.
Once you run NPM INSTALL then go to node_modules/ng-packagr, delete de node_modules folder, open package.json and remove all the ^ and ~ and then run NPM INSTALL here. There's an issue with this package.

## Features
* Drag and Drop
* Sorting
* Events (drag, drop, over, out) // TODO
* Nesting
* Touch support // TODO

## Instalation
```
npm i ngx-nestable --save
```

## Implementation

app.module.ts

```ts
import { NestableModule } from 'ngx-nestable';

@NgModule({
  imports: [NestableModule],
  bootstrap: [AppComponent]
})
export class AppModule {}
```

app.component.ts
```ts
  public options = {
    fixedDepth: true
  } as NestableSettings;
  public list = [
    { 'id': 1 },
    {
      'expanded': true,
      'id': 2, 'properties': [
        { 'id': 3 },
        { 'id': 4 },
        {
          'expanded': false,
          'id': 5, 'properties': [
            { 'id': 6 },
            { 'id': 7 },
            { 'id': 8 }
          ]
        },
        { 'id': 9 },
        { 'id': 10 }
      ]
    },
    { 'id': 11 }
  ];
```

app.html
```html
  <ngx-nestable [(list)]="list" [options]="options" [template]="itemTemplate">
  </ngx-nestable>
  
  <ng-template #itemTemplate let-row>
    <button mat-icon-button [ngxNestableDragHandle]="row">
      <mat-icon>drag_handle</mat-icon>
    </button>
    
    <button mat-icon-button *ngIf="row.item.properties && row.item.properties.length; else empty_item" [ngxNestableExpandCollapse]="row">
      <mat-icon>{{row.item.$$expanded ? 'keyboard_arrow_down' : 'keyboard_arrow_right'}}
      </mat-icon>
    </button>
    
    <div>Item: {{row.item.id}}</div>
  </ng-template>

  <ng-template #empty_item>
    <span style="width: 40px"></span>
  </ng-template>
```

## API

  ### Inputs

  | Name| Type| Default|Descirption|
  | :-------------: |:-------------:| :-----:|:--------------|
  | list| Array|   | Items which will be displayed in tree
  | template| TemplateRef|    | HTML template for tree item. Inside this template you can place directives (ngxNestableDragHandle and ngxNestableExpandCollapse). That will describe the custom look and position of these elements. Otherwise, the default functions are applied.

  #### options

  | Name| Type| Default|Descirption|
  | :-------------: |:-------------:| :-----:|:--------------|
  | fixedDepth      | boolean |false | Constaint items to keep their initial depth
  | maxDepth      | number|   5 | Maximum nested depth
  | threshold | number     |    20 | Distance in px after which horizontal movement (nesting) is applied. Also gives padding to the tree. 
  | disableDrag| boolean|    false| Disable/enable drag event
  | template| TemplateRef|    | HTML template for tree item. Inside this template you can place directives (ngxNestableDragHandle and ngxNestableExpandCollapse). That will describe the custom look and position of these elements, otherwise the default functions are applied.

  ### Outputs

  | Name| Type |Descirption|
  | :-------------: |:-------------:| :-----|
  | drag| void| Emits event when item drag is started  
  | drop| void| Emits event when item is dropped
  |disclosure|void| Emits event when item expand/collapse state is changed

## Authors

* **Petar Markov** - *Initial work* - [Speculees](https://github.com/speculees)
* **Mihajlo Grubjesic** - *Initial work* - [Comi89](https://github.com/comi89)
* **Zlatomir Darabuc** - *Initial work* - [zlaayaa](https://github.com/zlaayaa)

## License

This project is licensed under the MIT License - see the [LICENSE.md](https://opensource.org/licenses/MIT) file for details

## Acknowledgments

* [Nestable](https://github.com/dbushell/Nestable)

---
_Source: https://npm.io/package/@sergioblanco86/ngx-nestable · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
