Advanced & blazing-fast Angular Drag & Drop Toolkit β Grid, Sort, Resize, Nesting, and more!
- π±οΈ Advanced Drag & Drop with multi-list and cross-list support
- π§© Configurable & Responsive Grid Layout
- π Resizable: Resize items with mouse
- π Sortable List: Reorder items via Drag & Drop
- β‘οΈ Horizontal List: Horizontal drag & drop
- π³ Nested Tree Sort: Tree structure sorting
- ποΈ Copy to Zone: Copy items to another zone
- π§² Snap to Grid
- π‘οΈ Boundary: Set boundaries for drag/resize
- πΌοΈ Custom Placeholder
- β‘ Performance Optimized and Ultra lightweight
- π§βπ» Fully modular, Angular 18+ ready
- π§© Modular: Drag & Drop, Grid, Sortable, Resizable
- β‘οΈ AutoDirection: Auto detect horizontal or vertical or mixed direction
npm install ngx-drag-drop-kitOr:
yarn add ngx-drag-drop-kitimport { NgxDragDropKitModule } from 'ngx-drag-drop-kit';
@NgModule({
imports: [NgxDragDropKitModule],
})
export class AppModule {}add ngx-drag-drop-kit style to your style.scss files
@use '@node_modules/ngx-drag-drop-kit/assets/styles.css';
- or add to styles section in angular.json
<div ngxDropList [data]="list" (drop)="drop($event)">
<div ngxDraggable *ngFor="let item of list">{{ item }}</div>
</div>import { IDropEvent, moveItemInArray, transferArrayItem } from 'ngx-drag-drop-kit';
drop(event: IDropEvent) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
} else {
transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
}
}import { NgxGridLayoutModule } from 'ngx-drag-drop-kit';
@NgModule({
imports: [NgxGridLayoutModule],
})
export class AppModule {}<grid-layout [options]="options">
<grid-item *ngFor="let item of layouts" [config]="item.config">{{ item.title }}</grid-item>
</grid-layout>import { IGridLayoutOptions, GridItemConfig } from 'ngx-drag-drop-kit';
options: IGridLayoutOptions = { cols: 12, gap: 10 };
layouts = [
{ config: new GridItemConfig(0, 0, 2, 2), title: 'Item 1' },
...
];<div ngxResizable [minWidth]="50" [minHeight]="50" (resize)="onResize($event)">Resizable!</div>Supports multi-level tree-like structures with drag & drop:
<ng-template #tree let-items>
<div ngxDropList [data]="items" (drop)="drop($event)">
<div ngxDraggable *ngFor="let item of items">
{{ item.name }}
<ng-container *ngIf="item.children">
<ng-container [ngTemplateOutlet]="tree" [ngTemplateOutletContext]="{ $implicit: item.children }"></ng-container>
</ng-container>
</div>
</div>
</ng-template>| Directive/Component | Input/Output | Description |
|---|---|---|
ngxDraggable |
Input | Makes element draggable |
dragStart, dragEnd |
Drag events | |
ngxDropList |
Input: [data] |
Drop zone array |
Output: (drop) |
Drop event | |
ngxResizable |
[minWidth], [minHeight] |
Resizing constraints |
Output: (resize) |
Emits size changes | |
GridLayoutComponent |
options |
Grid options |
GridItemComponent |
config |
Grid item configuration |
See working examples in the projects/demo folder.
Maintaining open-source libraries takes time and energy. If you find this project useful, please consider supporting me:
You can also support via Tether (USDT) or Bitcoin (BTC):
BTC: bc1qnhnpn9dtk3det08hkpduv8x9u8rnesujplg0p2Ethereum: 0x3891395BB3f6c4642f6C7001FDD9113F22065680TRON: TRJ7a8npXFzkfDLfwsRz2CCH1GWHuuthaJTON: UQAejnuN0MUM8zxsbUsLYtCB79gl88NDSGbv6OYzly4h4yfT
Message me or create an issue if you want to be listed as a sponsor.
Pull requests welcome π
git clone https://github.com/mr-samani/ngx-drag-drop-kit.git
cd ngx-drag-drop-kit
npm install
npm run startMIT β feel free to use & modify.
Built with β€οΈ in Iran β by @mr-samani