UNPKG

@swimlane/ngx-dnd

Version:

Drag and Drop for Angular2 and beyond!

143 lines 16.8 kB
import { Component, Input, Output, ViewEncapsulation, ContentChild, TemplateRef, ViewChild, EventEmitter } from '@angular/core'; import { DroppableDirective } from '../../directives/ngx-droppable.directive'; import * as i0 from "@angular/core"; const _c0 = ["*"]; const _c1 = a0 => ({ "gu-empty": a0 }); function ContainerComponent_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵelement(1, "ngx-dnd-item", 3); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const item_r1 = ctx.$implicit; const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵproperty("model", item_r1)("dropZone", ctx_r1.dropZone)("dropZones", ctx_r1.dropZones)("copy", ctx_r1.copy)("moves", ctx_r1.moves)("removeOnSpill", ctx_r1.removeOnSpill)("droppableItemClass", ctx_r1.droppableItemClass); } } function ContainerComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementContainerStart(0); i0.ɵɵtemplate(1, ContainerComponent_ng_container_1_ng_container_1_Template, 2, 7, "ng-container", 2); i0.ɵɵelementContainerEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", ctx_r1.model); } } function ContainerComponent_ng_content_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojection(0, 0, ["*ngIf", "!model"]); } } let i = 0; function getNextId() { return i++; } /** * Component that allows nested ngxDroppable and ngxDraggables * * @export */ export class ContainerComponent { model; copy = false; removeOnSpill = false; droppableItemClass; dropZone = `@@DefaultDropZone-${getNextId()}@@`; get dropZones() { return this._dropZones || this._defaultZones; } set dropZones(val) { this._dropZones = val; } moves; // @Input() classes: any = {}; // @Input() dragulaOptions: any; set templateInput(template) { this.template = template; } set templateChild(template) { this.template = template; } template; droppable; drop = new EventEmitter(); drag = new EventEmitter(); over = new EventEmitter(); out = new EventEmitter(); remove = new EventEmitter(); cancel = new EventEmitter(); _dropZones; _defaultZones; ngOnInit() { this._defaultZones = [this.dropZone]; } ngAfterViewInit() { this.droppable.drag.subscribe((v) => this.drag.emit(v)); this.droppable.drop.subscribe((v) => this.drop.emit(v)); this.droppable.over.subscribe((v) => this.over.emit(v)); this.droppable.out.subscribe((v) => this.out.emit(v)); this.droppable.remove.subscribe((v) => this.remove.emit(v)); this.droppable.cancel.subscribe((v) => this.cancel.emit(v)); } static ɵfac = function ContainerComponent_Factory(t) { return new (t || ContainerComponent)(); }; static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContainerComponent, selectors: [["ngx-dnd-container"]], contentQueries: function ContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, TemplateRef, 7); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateChild = _t.first); } }, viewQuery: function ContainerComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(DroppableDirective, 7); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.droppable = _t.first); } }, inputs: { model: "model", copy: "copy", removeOnSpill: "removeOnSpill", droppableItemClass: "droppableItemClass", dropZone: "dropZone", dropZones: "dropZones", moves: "moves", templateInput: [0, "template", "templateInput"] }, outputs: { drop: "drop", drag: "drag", over: "over", out: "out", remove: "remove", cancel: "cancel" }, ngContentSelectors: _c0, decls: 3, vars: 9, consts: [["ngxDroppable", "", 1, "ngx-dnd-container", 3, "dropZone", "model", "copy", "ngClass", "removeOnSpill"], [4, "ngIf"], [4, "ngFor", "ngForOf"], ["ngxDraggable", "", 3, "model", "dropZone", "dropZones", "copy", "moves", "removeOnSpill", "droppableItemClass"]], template: function ContainerComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵelementStart(0, "div", 0); i0.ɵɵtemplate(1, ContainerComponent_ng_container_1_Template, 2, 1, "ng-container", 1)(2, ContainerComponent_ng_content_2_Template, 1, 0, "ng-content", 1); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵproperty("dropZone", ctx.dropZone)("model", ctx.model)("copy", ctx.copy)("ngClass", i0.ɵɵpureFunction1(7, _c1, !(ctx.model == null ? null : ctx.model.length)))("removeOnSpill", ctx.removeOnSpill); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.model); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", !ctx.model); } }, styles: [".ngx-dnd-container{background-color:#fff3;border:2px solid red;margin:10px;padding:10px}.ngx-dnd-container.gu-empty{border:2px dotted red}.ngx-dnd-container:nth-child(odd){background-color:#0003}.ngx-dnd-container .ex-moved{background-color:#e74c3c}.ngx-dnd-container .ex-over{background-color:#ffffff4d}.ngx-dnd-container .handle{padding:0 5px;margin-right:5px;background-color:#0006;cursor:move}.no-select{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.clearfix:after{content:\" \";display:block;height:0;clear:both}\n"], encapsulation: 2 }); } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContainerComponent, [{ type: Component, args: [{ selector: 'ngx-dnd-container', encapsulation: ViewEncapsulation.None, template: "<div\n ngxDroppable\n [dropZone]=\"dropZone\"\n [model]=\"model\"\n [copy]=\"copy\"\n [ngClass]=\"{ 'gu-empty': !model?.length }\"\n [removeOnSpill]=\"removeOnSpill\"\n class=\"ngx-dnd-container\"\n>\n <ng-container *ngIf=\"model\">\n <ng-container *ngFor=\"let item of model\">\n <ngx-dnd-item\n ngxDraggable\n [model]=\"item\"\n [dropZone]=\"dropZone\"\n [dropZones]=\"dropZones\"\n [copy]=\"copy\"\n [moves]=\"moves\"\n [removeOnSpill]=\"removeOnSpill\"\n [droppableItemClass]=\"droppableItemClass\"\n >\n </ngx-dnd-item>\n </ng-container>\n </ng-container>\n <ng-content *ngIf=\"!model\"></ng-content>\n</div>\n", styles: [".ngx-dnd-container{background-color:#fff3;border:2px solid red;margin:10px;padding:10px}.ngx-dnd-container.gu-empty{border:2px dotted red}.ngx-dnd-container:nth-child(odd){background-color:#0003}.ngx-dnd-container .ex-moved{background-color:#e74c3c}.ngx-dnd-container .ex-over{background-color:#ffffff4d}.ngx-dnd-container .handle{padding:0 5px;margin-right:5px;background-color:#0006;cursor:move}.no-select{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.clearfix:after{content:\" \";display:block;height:0;clear:both}\n"] }] }], null, { model: [{ type: Input }], copy: [{ type: Input }], removeOnSpill: [{ type: Input }], droppableItemClass: [{ type: Input }], dropZone: [{ type: Input }], dropZones: [{ type: Input }], moves: [{ type: Input }], templateInput: [{ type: Input, args: ['template'] }], templateChild: [{ type: ContentChild, args: [TemplateRef, { static: true }] }], droppable: [{ type: ViewChild, args: [DroppableDirective, { static: true }] }], drop: [{ type: Output }], drag: [{ type: Output }], over: [{ type: Output }], out: [{ type: Output }], remove: [{ type: Output }], cancel: [{ type: Output }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ContainerComponent, { className: "ContainerComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kbmQvc3JjL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lci9jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRuZC9zcmMvbGliL2NvbXBvbmVudHMvY29udGFpbmVyL2NvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFlBQVksRUFDWixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7SUNIMUUsNkJBQXlDO0lBQ3ZDLGtDQVVlOzs7OztJQVJiLGNBQWM7SUFNZCxBQURBLEFBREEsQUFEQSxBQURBLEFBREEsQUFEQSwrQkFBYyw2QkFDTywrQkFDRSxxQkFDVix1QkFDRSx1Q0FDZ0IsaURBQ1U7OztJQVYvQyw2QkFBNEI7SUFDMUIsb0dBQXlDOzs7O0lBQVYsY0FBUTtJQUFSLHNDQUFROzs7SUFjekMsMENBQXdDOztBRFQxQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixTQUFTLFNBQVM7SUFDaEIsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNiLENBQUM7QUFFRDs7OztHQUlHO0FBT0gsTUFBTSxPQUFPLGtCQUFrQjtJQUNwQixLQUFLLENBQU07SUFDWCxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ2IsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixrQkFBa0IsQ0FBNkI7SUFFL0MsUUFBUSxHQUFHLHFCQUFxQixTQUFTLEVBQUUsSUFBSSxDQUFDO0lBRXpELElB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SztZQUVHLFFBQVE7a0JBQWhCLEtBQUs7WUFHRixTQUFTO2tCQURaLEtBQUs7WUFRRyxLQUFLO2tCQUFiLEtBQUs7WUFNRixhQUFhO2tCQURoQixLQUFLO21CQUFDLFVBQVU7WUFNYixhQUFhO2tCQURoQixZQUFZO21CQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFRM0MsU0FBUztrQkFEUixTQUFTO21CQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUdyQyxJQUFJO2tCQUFiLE1BQU07WUFFRyxJQUFJO2tCQUFiLE1BQU07WUFFRyxJQUFJO2tCQUFiLE1BQU07WUFFRyxHQUFHO2tCQUFaLE1BQU07WUFFRyxNQUFNO2tCQUFmLE1BQU07WUFFRyxNQUFNO2tCQUFmLE1BQU07O2tGQTlDSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIENvbnRlbnRDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEcm9wcGFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25neC1kcm9wcGFibGUuZGlyZWN0aXZlJztcblxubGV0IGkgPSAwO1xuZnVuY3Rpb24gZ2V0TmV4dElkKCkge1xuICByZXR1cm4gaSsrO1xufVxuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IGFsbG93cyBuZXN0ZWQgbmd4RHJvcHBhYmxlIGFuZCBuZ3hEcmFnZ2FibGVzXG4gKlxuICogQGV4cG9ydFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtZG5kLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250YWluZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBtb2RlbDogYW55O1xuICBASW5wdXQoKSBjb3B5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlbW92ZU9uU3BpbGwgPSBmYWxzZTtcbiAgQElucHV0KCkgZHJvcHBhYmxlSXRlbUNsYXNzOiBzdHJpbmcgfCAoKG86IGFueSkgPT4gYW55KTtcblxuICBASW5wdXQoKSBkcm9wWm9uZSA9IGBAQERlZmF1bHREcm9wWm9uZS0ke2dldE5leHRJZCgpfUBAYDtcblxuICBASW5wdXQoKVxuICBnZXQgZHJvcFpvbmVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kcm9wWm9uZXMgfHwgdGhpcy5fZGVmYXVsdFpvbmVzO1xuICB9XG4gIHNldCBkcm9wWm9uZXModmFsKSB7XG4gICAgdGhpcy5fZHJvcFpvbmVzID0gdmFsO1xuICB9XG5cbiAgQElucHV0KCkgbW92ZXM6IChtb2RlbDogYW55LCBzb3VyY2U6IGFueSwgaGFuZGxlOiBhbnksIHNpYmxpbmc6IGFueSkgPT4gYm9vbGVhbjtcblxuICAvLyBASW5wdXQoKSBjbGFzc2VzOiBhbnkgPSB7fTtcbiAgLy8gQElucHV0KCkgZHJhZ3VsYU9wdGlvbnM6IGFueTtcblxuICBASW5wdXQoJ3RlbXBsYXRlJylcbiAgc2V0IHRlbXBsYXRlSW5wdXQodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIH1cblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBzZXQgdGVtcGxhdGVDaGlsZCh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoRHJvcHBhYmxlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkcm9wcGFibGU6IGFueTtcblxuICBAT3V0cHV0KCkgZHJvcDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgZHJhZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb3ZlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgb3V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSByZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIGNhbmNlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBfZHJvcFpvbmVzOiBzdHJpbmdbXTtcbiAgX2RlZmF1bHRab25lczogc3RyaW5nW107XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fZGVmYXVsdFpvbmVzID0gW3RoaXMuZHJvcFpvbmVdO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuZHJvcHBhYmxlLmRyYWcuc3Vic2NyaWJlKCh2OiBhbnkpID0+IHRoaXMuZHJhZy5lbWl0KHYpKTtcbiAgICB0aGlzLmRyb3BwYWJsZS5kcm9wLnN1YnNjcmliZSgodjogYW55KSA9PiB0aGlzLmRyb3AuZW1pdCh2KSk7XG4gICAgdGhpcy5kcm9wcGFibGUub3Zlci5zdWJzY3JpYmUoKHY6IGFueSkgPT4gdGhpcy5vdmVyLmVtaXQodikpO1xuICAgIHRoaXMuZHJvcHBhYmxlLm91dC5zdWJzY3JpYmUoKHY6IGFueSkgPT4gdGhpcy5vdXQuZW1pdCh2KSk7XG4gICAgdGhpcy5kcm9wcGFibGUucmVtb3ZlLnN1YnNjcmliZSgodjogYW55KSA9PiB0aGlzLnJlbW92ZS5lbWl0KHYpKTtcbiAgICB0aGlzLmRyb3BwYWJsZS5jYW5jZWwuc3Vic2NyaWJlKCh2OiBhbnkpID0+IHRoaXMuY2FuY2VsLmVtaXQodikpO1xuICB9XG59XG4iLCI8ZGl2XG4gIG5neERyb3BwYWJsZVxuICBbZHJvcFpvbmVdPVwiZHJvcFpvbmVcIlxuICBbbW9kZWxdPVwibW9kZWxcIlxuICBbY29weV09XCJjb3B5XCJcbiAgW25nQ2xhc3NdPVwieyAnZ3UtZW1wdHknOiAhbW9kZWw/Lmxlbmd0aCB9XCJcbiAgW3JlbW92ZU9uU3BpbGxdPVwicmVtb3ZlT25TcGlsbFwiXG4gIGNsYXNzPVwibmd4LWRuZC1jb250YWluZXJcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1vZGVsXCI+XG4gICAgICA8bmd4LWRuZC1pdGVtXG4gICAgICAgIG5neERyYWdnYWJsZVxuICAgICAgICBbbW9kZWxdPVwiaXRlbVwiXG4gICAgICAgIFtkcm9wWm9uZV09XCJkcm9wWm9uZVwiXG4gICAgICAgIFtkcm9wWm9uZXNdPVwiZHJvcFpvbmVzXCJcbiAgICAgICAgW2NvcHldPVwiY29weVwiXG4gICAgICAgIFttb3Zlc109XCJtb3Zlc1wiXG4gICAgICAgIFtyZW1vdmVPblNwaWxsXT1cInJlbW92ZU9uU3BpbGxcIlxuICAgICAgICBbZHJvcHBhYmxlSXRlbUNsYXNzXT1cImRyb3BwYWJsZUl0ZW1DbGFzc1wiXG4gICAgICA+XG4gICAgICA8L25neC1kbmQtaXRlbT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250ZW50ICpuZ0lmPVwiIW1vZGVsXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=