UNPKG

25.1 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common'), require('@angular/forms'), require('rxjs')) :
3 typeof define === 'function' && define.amd ? define('ngx-bootstrap/sortable', ['exports', '@angular/core', '@angular/common', '@angular/forms', 'rxjs'], factory) :
4 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global['ngx-bootstrap'] = global['ngx-bootstrap'] || {}, global['ngx-bootstrap'].sortable = {}), global.ng.core, global.ng.common, global.ng.forms, global.rxjs));
5}(this, (function (exports, core, common, forms, rxjs) { 'use strict';
6
7 /*! *****************************************************************************
8 Copyright (c) Microsoft Corporation.
9
10 Permission to use, copy, modify, and/or distribute this software for any
11 purpose with or without fee is hereby granted.
12
13 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14 REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15 AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16 INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17 LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 PERFORMANCE OF THIS SOFTWARE.
20 ***************************************************************************** */
21 /* global Reflect, Promise */
22 var extendStatics = function (d, b) {
23 extendStatics = Object.setPrototypeOf ||
24 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
25 function (d, b) { for (var p in b)
26 if (Object.prototype.hasOwnProperty.call(b, p))
27 d[p] = b[p]; };
28 return extendStatics(d, b);
29 };
30 function __extends(d, b) {
31 if (typeof b !== "function" && b !== null)
32 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
33 extendStatics(d, b);
34 function __() { this.constructor = d; }
35 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
36 }
37 var __assign = function () {
38 __assign = Object.assign || function __assign(t) {
39 for (var s, i = 1, n = arguments.length; i < n; i++) {
40 s = arguments[i];
41 for (var p in s)
42 if (Object.prototype.hasOwnProperty.call(s, p))
43 t[p] = s[p];
44 }
45 return t;
46 };
47 return __assign.apply(this, arguments);
48 };
49 function __rest(s, e) {
50 var t = {};
51 for (var p in s)
52 if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
53 t[p] = s[p];
54 if (s != null && typeof Object.getOwnPropertySymbols === "function")
55 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
56 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
57 t[p[i]] = s[p[i]];
58 }
59 return t;
60 }
61 function __decorate(decorators, target, key, desc) {
62 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
63 if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
64 r = Reflect.decorate(decorators, target, key, desc);
65 else
66 for (var i = decorators.length - 1; i >= 0; i--)
67 if (d = decorators[i])
68 r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
69 return c > 3 && r && Object.defineProperty(target, key, r), r;
70 }
71 function __param(paramIndex, decorator) {
72 return function (target, key) { decorator(target, key, paramIndex); };
73 }
74 function __metadata(metadataKey, metadataValue) {
75 if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
76 return Reflect.metadata(metadataKey, metadataValue);
77 }
78 function __awaiter(thisArg, _arguments, P, generator) {
79 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
80 return new (P || (P = Promise))(function (resolve, reject) {
81 function fulfilled(value) { try {
82 step(generator.next(value));
83 }
84 catch (e) {
85 reject(e);
86 } }
87 function rejected(value) { try {
88 step(generator["throw"](value));
89 }
90 catch (e) {
91 reject(e);
92 } }
93 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
94 step((generator = generator.apply(thisArg, _arguments || [])).next());
95 });
96 }
97 function __generator(thisArg, body) {
98 var _ = { label: 0, sent: function () { if (t[0] & 1)
99 throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
100 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
101 function verb(n) { return function (v) { return step([n, v]); }; }
102 function step(op) {
103 if (f)
104 throw new TypeError("Generator is already executing.");
105 while (_)
106 try {
107 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
108 return t;
109 if (y = 0, t)
110 op = [op[0] & 2, t.value];
111 switch (op[0]) {
112 case 0:
113 case 1:
114 t = op;
115 break;
116 case 4:
117 _.label++;
118 return { value: op[1], done: false };
119 case 5:
120 _.label++;
121 y = op[1];
122 op = [0];
123 continue;
124 case 7:
125 op = _.ops.pop();
126 _.trys.pop();
127 continue;
128 default:
129 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
130 _ = 0;
131 continue;
132 }
133 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
134 _.label = op[1];
135 break;
136 }
137 if (op[0] === 6 && _.label < t[1]) {
138 _.label = t[1];
139 t = op;
140 break;
141 }
142 if (t && _.label < t[2]) {
143 _.label = t[2];
144 _.ops.push(op);
145 break;
146 }
147 if (t[2])
148 _.ops.pop();
149 _.trys.pop();
150 continue;
151 }
152 op = body.call(thisArg, _);
153 }
154 catch (e) {
155 op = [6, e];
156 y = 0;
157 }
158 finally {
159 f = t = 0;
160 }
161 if (op[0] & 5)
162 throw op[1];
163 return { value: op[0] ? op[1] : void 0, done: true };
164 }
165 }
166 var __createBinding = Object.create ? (function (o, m, k, k2) {
167 if (k2 === undefined)
168 k2 = k;
169 Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } });
170 }) : (function (o, m, k, k2) {
171 if (k2 === undefined)
172 k2 = k;
173 o[k2] = m[k];
174 });
175 function __exportStar(m, o) {
176 for (var p in m)
177 if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
178 __createBinding(o, m, p);
179 }
180 function __values(o) {
181 var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
182 if (m)
183 return m.call(o);
184 if (o && typeof o.length === "number")
185 return {
186 next: function () {
187 if (o && i >= o.length)
188 o = void 0;
189 return { value: o && o[i++], done: !o };
190 }
191 };
192 throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
193 }
194 function __read(o, n) {
195 var m = typeof Symbol === "function" && o[Symbol.iterator];
196 if (!m)
197 return o;
198 var i = m.call(o), r, ar = [], e;
199 try {
200 while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
201 ar.push(r.value);
202 }
203 catch (error) {
204 e = { error: error };
205 }
206 finally {
207 try {
208 if (r && !r.done && (m = i["return"]))
209 m.call(i);
210 }
211 finally {
212 if (e)
213 throw e.error;
214 }
215 }
216 return ar;
217 }
218 /** @deprecated */
219 function __spread() {
220 for (var ar = [], i = 0; i < arguments.length; i++)
221 ar = ar.concat(__read(arguments[i]));
222 return ar;
223 }
224 /** @deprecated */
225 function __spreadArrays() {
226 for (var s = 0, i = 0, il = arguments.length; i < il; i++)
227 s += arguments[i].length;
228 for (var r = Array(s), k = 0, i = 0; i < il; i++)
229 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
230 r[k] = a[j];
231 return r;
232 }
233 function __spreadArray(to, from) {
234 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
235 to[j] = from[i];
236 return to;
237 }
238 function __await(v) {
239 return this instanceof __await ? (this.v = v, this) : new __await(v);
240 }
241 function __asyncGenerator(thisArg, _arguments, generator) {
242 if (!Symbol.asyncIterator)
243 throw new TypeError("Symbol.asyncIterator is not defined.");
244 var g = generator.apply(thisArg, _arguments || []), i, q = [];
245 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
246 function verb(n) { if (g[n])
247 i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
248 function resume(n, v) { try {
249 step(g[n](v));
250 }
251 catch (e) {
252 settle(q[0][3], e);
253 } }
254 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
255 function fulfill(value) { resume("next", value); }
256 function reject(value) { resume("throw", value); }
257 function settle(f, v) { if (f(v), q.shift(), q.length)
258 resume(q[0][0], q[0][1]); }
259 }
260 function __asyncDelegator(o) {
261 var i, p;
262 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
263 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
264 }
265 function __asyncValues(o) {
266 if (!Symbol.asyncIterator)
267 throw new TypeError("Symbol.asyncIterator is not defined.");
268 var m = o[Symbol.asyncIterator], i;
269 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
270 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
271 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
272 }
273 function __makeTemplateObject(cooked, raw) {
274 if (Object.defineProperty) {
275 Object.defineProperty(cooked, "raw", { value: raw });
276 }
277 else {
278 cooked.raw = raw;
279 }
280 return cooked;
281 }
282 ;
283 var __setModuleDefault = Object.create ? (function (o, v) {
284 Object.defineProperty(o, "default", { enumerable: true, value: v });
285 }) : function (o, v) {
286 o["default"] = v;
287 };
288 function __importStar(mod) {
289 if (mod && mod.__esModule)
290 return mod;
291 var result = {};
292 if (mod != null)
293 for (var k in mod)
294 if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
295 __createBinding(result, mod, k);
296 __setModuleDefault(result, mod);
297 return result;
298 }
299 function __importDefault(mod) {
300 return (mod && mod.__esModule) ? mod : { default: mod };
301 }
302 function __classPrivateFieldGet(receiver, privateMap) {
303 if (!privateMap.has(receiver)) {
304 throw new TypeError("attempted to get private field on non-instance");
305 }
306 return privateMap.get(receiver);
307 }
308 function __classPrivateFieldSet(receiver, privateMap, value) {
309 if (!privateMap.has(receiver)) {
310 throw new TypeError("attempted to set private field on non-instance");
311 }
312 privateMap.set(receiver, value);
313 return value;
314 }
315
316 var DraggableItemService = /** @class */ (function () {
317 function DraggableItemService() {
318 this.onCapture = new rxjs.Subject();
319 }
320 DraggableItemService.prototype.dragStart = function (item) {
321 this.draggableItem = item;
322 };
323 DraggableItemService.prototype.getItem = function () {
324 return this.draggableItem;
325 };
326 DraggableItemService.prototype.captureItem = function (overZoneIndex, newIndex) {
327 if (this.draggableItem && this.draggableItem.overZoneIndex !== overZoneIndex) {
328 this.draggableItem.lastZoneIndex = this.draggableItem.overZoneIndex;
329 this.draggableItem.overZoneIndex = overZoneIndex;
330 this.onCapture.next(this.draggableItem);
331 this.draggableItem = Object.assign({}, this.draggableItem, {
332 overZoneIndex: overZoneIndex,
333 i: newIndex
334 });
335 }
336 return this.draggableItem;
337 };
338 DraggableItemService.prototype.onCaptureItem = function () {
339 return this.onCapture;
340 };
341 return DraggableItemService;
342 }());
343 DraggableItemService.decorators = [
344 { type: core.Injectable }
345 ];
346
347 var SortableComponent = /** @class */ (function () {
348 function SortableComponent(transfer) {
349 var _this = this;
350 /** class name for items wrapper */
351 this.wrapperClass = '';
352 /** style object for items wrapper */
353 this.wrapperStyle = {};
354 /** class name for item */
355 this.itemClass = '';
356 /** style object for item */
357 this.itemStyle = {};
358 /** class name for active item */
359 this.itemActiveClass = '';
360 /** style object for active item */
361 this.itemActiveStyle = {};
362 /** class name for placeholder */
363 this.placeholderClass = '';
364 /** style object for placeholder */
365 this.placeholderStyle = {};
366 /** placeholder item which will be shown if collection is empty */
367 this.placeholderItem = '';
368 /** fired on array change (reordering, insert, remove), same as <code>ngModelChange</code>.
369 * Returns new items collection as a payload.
370 */
371 this.onChange = new core.EventEmitter();
372 this.showPlaceholder = false;
373 this.activeItem = -1;
374 // eslint-disable-next-line @typescript-eslint/no-explicit-any
375 this.onTouched = Function.prototype;
376 // eslint-disable-next-line @typescript-eslint/no-explicit-any
377 this.onChanged = Function.prototype;
378 this._items = [];
379 this.transfer = transfer;
380 this.currentZoneIndex = SortableComponent.globalZoneIndex++;
381 this.transfer
382 .onCaptureItem()
383 .subscribe(function (item) { return _this.onDrop(item); });
384 }
385 Object.defineProperty(SortableComponent.prototype, "items", {
386 get: function () {
387 return this._items;
388 },
389 set: function (value) {
390 this._items = value;
391 var out = this.items.map(function (x) { return x.initData; });
392 this.onChanged(out);
393 this.onChange.emit(out);
394 },
395 enumerable: false,
396 configurable: true
397 });
398 SortableComponent.prototype.onItemDragstart = function (event, item, i) {
399 this.initDragstartEvent(event);
400 this.onTouched();
401 this.transfer.dragStart({
402 event: event,
403 item: item,
404 i: i,
405 initialIndex: i,
406 lastZoneIndex: this.currentZoneIndex,
407 overZoneIndex: this.currentZoneIndex
408 });
409 };
410 SortableComponent.prototype.onItemDragover = function (event, i) {
411 if (!this.transfer.getItem()) {
412 return;
413 }
414 event.preventDefault();
415 var dragItem = this.transfer.captureItem(this.currentZoneIndex, this.items.length);
416 // eslint-disable-next-line @typescript-eslint/no-explicit-any
417 var newArray = [];
418 if (!dragItem) {
419 return;
420 }
421 if (!this.items.length) {
422 newArray = [dragItem.item];
423 }
424 else if (dragItem.i > i) {
425 newArray = __spread(this.items.slice(0, i), [
426 dragItem.item
427 ], this.items.slice(i, dragItem.i), this.items.slice(dragItem.i + 1));
428 }
429 else {
430 // this.draggedItem.i < i
431 newArray = __spread(this.items.slice(0, dragItem.i), this.items.slice(dragItem.i + 1, i + 1), [
432 dragItem.item
433 ], this.items.slice(i + 1));
434 }
435 this.items = newArray;
436 dragItem.i = i;
437 this.activeItem = i;
438 this.updatePlaceholderState();
439 };
440 SortableComponent.prototype.cancelEvent = function (event) {
441 if (!this.transfer.getItem() || !event) {
442 return;
443 }
444 event.preventDefault();
445 };
446 SortableComponent.prototype.onDrop = function (item) {
447 if (item &&
448 item.overZoneIndex !== this.currentZoneIndex &&
449 item.lastZoneIndex === this.currentZoneIndex) {
450 this.items = this.items.filter(function (x, i) { return i !== item.i; });
451 this.updatePlaceholderState();
452 }
453 this.resetActiveItem();
454 };
455 SortableComponent.prototype.resetActiveItem = function (event) {
456 this.cancelEvent(event);
457 this.activeItem = -1;
458 };
459 SortableComponent.prototype.registerOnChange = function (callback) {
460 this.onChanged = callback;
461 };
462 SortableComponent.prototype.registerOnTouched = function (callback) {
463 this.onTouched = callback;
464 };
465 // eslint-disable-next-line @typescript-eslint/no-explicit-any
466 SortableComponent.prototype.writeValue = function (value) {
467 var _this = this;
468 if (value) {
469 // eslint-disable-next-line @typescript-eslint/no-explicit-any
470 this.items = value.map(function (x, i) { return ({
471 id: i,
472 initData: x,
473 value: _this.fieldName ? x[_this.fieldName] : x
474 }); });
475 }
476 else {
477 this.items = [];
478 }
479 this.updatePlaceholderState();
480 };
481 SortableComponent.prototype.updatePlaceholderState = function () {
482 this.showPlaceholder = !this._items.length;
483 };
484 SortableComponent.prototype.getItemStyle = function (isActive) {
485 return isActive
486 ? Object.assign({}, this.itemStyle, this.itemActiveStyle)
487 : this.itemStyle;
488 };
489 SortableComponent.prototype.initDragstartEvent = function (event) {
490 var _a;
491 // it is necessary for mozilla
492 // data type should be 'Text' instead of 'text/plain' to keep compatibility
493 // with IE
494 (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.setData('Text', 'placeholder');
495 };
496 return SortableComponent;
497 }());
498 SortableComponent.globalZoneIndex = 0;
499 SortableComponent.decorators = [
500 { type: core.Component, args: [{
501 selector: 'bs-sortable',
502 exportAs: 'bs-sortable',
503 template: "\n<div\n [ngClass]=\"wrapperClass\"\n [ngStyle]=\"wrapperStyle\"\n (dragover)=\"cancelEvent($event)\"\n (dragenter)=\"cancelEvent($event)\"\n (drop)=\"resetActiveItem($event)\"\n (mouseleave)=\"resetActiveItem($event)\">\n <div\n *ngIf=\"showPlaceholder\"\n [ngClass]=\"placeholderClass\"\n [ngStyle]=\"placeholderStyle\"\n (dragover)=\"onItemDragover($event, 0)\"\n (dragenter)=\"cancelEvent($event)\"\n >{{placeholderItem}}</div>\n <div\n *ngFor=\"let item of items; let i=index;\"\n [ngClass]=\"[ itemClass, i === activeItem ? itemActiveClass : '' ]\"\n [ngStyle]=\"getItemStyle(i === activeItem)\"\n draggable=\"true\"\n (dragstart)=\"onItemDragstart($event, item, i)\"\n (dragend)=\"resetActiveItem($event)\"\n (dragover)=\"onItemDragover($event, i)\"\n (dragenter)=\"cancelEvent($event)\"\n aria-dropeffect=\"move\"\n [attr.aria-grabbed]=\"i === activeItem\"\n ><ng-template [ngTemplateOutlet]=\"itemTemplate || defItemTemplate\"\n [ngTemplateOutletContext]=\"{item:item, index: i}\"></ng-template></div>\n</div>\n\n<ng-template #defItemTemplate let-item=\"item\">{{item.value}}</ng-template>\n",
504 providers: [
505 {
506 provide: forms.NG_VALUE_ACCESSOR,
507 useExisting: core.forwardRef(function () { return SortableComponent; }),
508 multi: true
509 }
510 ]
511 },] }
512 ];
513 SortableComponent.ctorParameters = function () { return [
514 { type: DraggableItemService }
515 ]; };
516 SortableComponent.propDecorators = {
517 fieldName: [{ type: core.Input }],
518 wrapperClass: [{ type: core.Input }],
519 wrapperStyle: [{ type: core.Input }],
520 itemClass: [{ type: core.Input }],
521 itemStyle: [{ type: core.Input }],
522 itemActiveClass: [{ type: core.Input }],
523 itemActiveStyle: [{ type: core.Input }],
524 placeholderClass: [{ type: core.Input }],
525 placeholderStyle: [{ type: core.Input }],
526 placeholderItem: [{ type: core.Input }],
527 itemTemplate: [{ type: core.Input }],
528 onChange: [{ type: core.Output }]
529 };
530
531 var SortableModule = /** @class */ (function () {
532 function SortableModule() {
533 }
534 SortableModule.forRoot = function () {
535 return { ngModule: SortableModule, providers: [DraggableItemService] };
536 };
537 return SortableModule;
538 }());
539 SortableModule.decorators = [
540 { type: core.NgModule, args: [{
541 declarations: [SortableComponent],
542 imports: [common.CommonModule],
543 exports: [SortableComponent]
544 },] }
545 ];
546
547 /**
548 * Generated bundle index. Do not edit.
549 */
550
551 exports.DraggableItemService = DraggableItemService;
552 exports.SortableComponent = SortableComponent;
553 exports.SortableModule = SortableModule;
554
555 Object.defineProperty(exports, '__esModule', { value: true });
556
557})));
558//# sourceMappingURL=ngx-bootstrap-sortable.umd.js.map