@dnd-kit/dom 0.0.6-beta-20240920190026 → 0.0.6-beta-20240921020002
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/sortable.cjs +174 -41
- package/sortable.cjs.map +1 -1
- package/sortable.d.cts +1 -0
- package/sortable.d.ts +1 -0
- package/sortable.js +174 -41
- package/sortable.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dnd-kit/dom",
|
|
3
|
-
"version": "0.0.6-beta-
|
|
3
|
+
"version": "0.0.6-beta-20240921020002",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -74,10 +74,10 @@
|
|
|
74
74
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@dnd-kit/abstract": "0.0.6-beta-
|
|
78
|
-
"@dnd-kit/collision": "0.0.6-beta-
|
|
79
|
-
"@dnd-kit/geometry": "0.0.6-beta-
|
|
80
|
-
"@dnd-kit/state": "0.0.6-beta-
|
|
77
|
+
"@dnd-kit/abstract": "0.0.6-beta-20240921020002",
|
|
78
|
+
"@dnd-kit/collision": "0.0.6-beta-20240921020002",
|
|
79
|
+
"@dnd-kit/geometry": "0.0.6-beta-20240921020002",
|
|
80
|
+
"@dnd-kit/state": "0.0.6-beta-20240921020002",
|
|
81
81
|
"tslib": "^2.6.2"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
package/sortable.cjs
CHANGED
|
@@ -221,6 +221,25 @@ function getDirection(delta) {
|
|
|
221
221
|
}
|
|
222
222
|
|
|
223
223
|
// ../helpers/dist/index.js
|
|
224
|
+
var __defProp2 = Object.defineProperty;
|
|
225
|
+
var __defProps2 = Object.defineProperties;
|
|
226
|
+
var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
|
|
227
|
+
var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
|
|
228
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
229
|
+
var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
|
|
230
|
+
var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
231
|
+
var __spreadValues2 = (a, b) => {
|
|
232
|
+
for (var prop in b || (b = {}))
|
|
233
|
+
if (__hasOwnProp2.call(b, prop))
|
|
234
|
+
__defNormalProp2(a, prop, b[prop]);
|
|
235
|
+
if (__getOwnPropSymbols2)
|
|
236
|
+
for (var prop of __getOwnPropSymbols2(b)) {
|
|
237
|
+
if (__propIsEnum2.call(b, prop))
|
|
238
|
+
__defNormalProp2(a, prop, b[prop]);
|
|
239
|
+
}
|
|
240
|
+
return a;
|
|
241
|
+
};
|
|
242
|
+
var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b));
|
|
224
243
|
function arrayMove(array, from, to) {
|
|
225
244
|
if (from === to) {
|
|
226
245
|
return array;
|
|
@@ -229,26 +248,110 @@ function arrayMove(array, from, to) {
|
|
|
229
248
|
newArray.splice(to, 0, newArray.splice(from, 1)[0]);
|
|
230
249
|
return newArray;
|
|
231
250
|
}
|
|
251
|
+
function mutate(items, source, target, mutation) {
|
|
252
|
+
if (!source || !target) {
|
|
253
|
+
return items;
|
|
254
|
+
}
|
|
255
|
+
const findIndex = (item, id) => item === id || typeof item === "object" && "id" in item && item.id === id;
|
|
256
|
+
if (Array.isArray(items)) {
|
|
257
|
+
const sourceIndex2 = items.findIndex((item) => findIndex(item, source.id));
|
|
258
|
+
const targetIndex2 = items.findIndex((item) => findIndex(item, target.id));
|
|
259
|
+
if (sourceIndex2 === -1 || targetIndex2 === -1) {
|
|
260
|
+
return items;
|
|
261
|
+
}
|
|
262
|
+
if (source.manager) {
|
|
263
|
+
const { dragOperation: dragOperation2 } = source.manager;
|
|
264
|
+
if (!dragOperation2.canceled && "index" in source && typeof source.index === "number") {
|
|
265
|
+
const projectedSourceIndex = source.index;
|
|
266
|
+
if (projectedSourceIndex !== sourceIndex2) {
|
|
267
|
+
return mutation(items, sourceIndex2, projectedSourceIndex);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return mutation(items, sourceIndex2, targetIndex2);
|
|
272
|
+
}
|
|
273
|
+
if (source.id === target.id) {
|
|
274
|
+
return items;
|
|
275
|
+
}
|
|
276
|
+
const entries = Object.entries(items);
|
|
277
|
+
let sourceIndex = -1;
|
|
278
|
+
let sourceParent;
|
|
279
|
+
let targetIndex = -1;
|
|
280
|
+
let targetParent;
|
|
281
|
+
for (const [id, children] of entries) {
|
|
282
|
+
if (sourceIndex === -1) {
|
|
283
|
+
sourceIndex = children.findIndex((item) => findIndex(item, source.id));
|
|
284
|
+
if (sourceIndex !== -1) {
|
|
285
|
+
sourceParent = id;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (targetIndex === -1) {
|
|
289
|
+
targetIndex = children.findIndex((item) => findIndex(item, target.id));
|
|
290
|
+
if (targetIndex !== -1) {
|
|
291
|
+
targetParent = id;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
if (sourceIndex !== -1 && targetIndex !== -1) {
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (!source.manager) return items;
|
|
299
|
+
const { dragOperation } = source.manager;
|
|
300
|
+
const position = dragOperation.position.current;
|
|
301
|
+
if (targetParent == null) {
|
|
302
|
+
if (target.id in items) {
|
|
303
|
+
const insertionIndex = target.shape && position.y > target.shape.center.y ? items[target.id].length : 0;
|
|
304
|
+
targetParent = target.id;
|
|
305
|
+
targetIndex = insertionIndex;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (sourceParent == null || targetParent == null) {
|
|
309
|
+
return items;
|
|
310
|
+
}
|
|
311
|
+
if (sourceParent === targetParent) {
|
|
312
|
+
return __spreadProps2(__spreadValues2({}, items), {
|
|
313
|
+
[sourceParent]: mutation(items[sourceParent], sourceIndex, targetIndex)
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
const isBelowTarget = target.shape && position.y > target.shape.boundingRectangle.bottom;
|
|
317
|
+
const modifier = isBelowTarget ? 1 : 0;
|
|
318
|
+
const sourceItem = items[sourceParent][sourceIndex];
|
|
319
|
+
return __spreadProps2(__spreadValues2({}, items), {
|
|
320
|
+
[sourceParent]: [
|
|
321
|
+
...items[sourceParent].slice(0, sourceIndex),
|
|
322
|
+
...items[sourceParent].slice(sourceIndex + 1)
|
|
323
|
+
],
|
|
324
|
+
[targetParent]: [
|
|
325
|
+
...items[targetParent].slice(0, targetIndex + modifier),
|
|
326
|
+
sourceItem,
|
|
327
|
+
...items[targetParent].slice(targetIndex + modifier)
|
|
328
|
+
]
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
function move(items, source, target) {
|
|
332
|
+
return mutate(items, source, target, arrayMove);
|
|
333
|
+
}
|
|
334
|
+
var defaultGroup = "__default__";
|
|
232
335
|
var OptimisticSortingPlugin = class extends abstract.Plugin {
|
|
233
336
|
constructor(manager) {
|
|
234
337
|
super(manager);
|
|
235
|
-
const getSortableInstances = (
|
|
236
|
-
var _a;
|
|
338
|
+
const getSortableInstances = () => {
|
|
237
339
|
const sortableInstances = /* @__PURE__ */ new Map();
|
|
238
340
|
for (const droppable of manager.registry.droppables) {
|
|
239
341
|
if (droppable instanceof SortableDroppable) {
|
|
240
342
|
const { sortable } = droppable;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
`Duplicate sortable index found for same sortable group: ${sortable.droppable.id} and ${(_a = sortableInstances.get(sortable.index)) == null ? void 0 : _a.droppable.id} have the same index (${sortable.index}). Make sure each sortable item has a unique index. Use the \`group\` attribute to separate sortables into different groups.`
|
|
247
|
-
);
|
|
343
|
+
const { group } = sortable;
|
|
344
|
+
let instances = sortableInstances.get(group);
|
|
345
|
+
if (!instances) {
|
|
346
|
+
instances = /* @__PURE__ */ new Set();
|
|
347
|
+
sortableInstances.set(group, instances);
|
|
248
348
|
}
|
|
249
|
-
|
|
349
|
+
instances.add(sortable);
|
|
250
350
|
}
|
|
251
351
|
}
|
|
352
|
+
for (const [group, instances] of sortableInstances) {
|
|
353
|
+
sortableInstances.set(group, new Set(sort(instances)));
|
|
354
|
+
}
|
|
252
355
|
return sortableInstances;
|
|
253
356
|
};
|
|
254
357
|
const unsubscribe = [
|
|
@@ -265,37 +368,51 @@ var OptimisticSortingPlugin = class extends abstract.Plugin {
|
|
|
265
368
|
if (source.sortable === target.sortable) {
|
|
266
369
|
return;
|
|
267
370
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const
|
|
371
|
+
const instances = getSortableInstances();
|
|
372
|
+
const sameGroup = source.sortable.group === target.sortable.group;
|
|
373
|
+
const sourceInstances = instances.get(source.sortable.group);
|
|
374
|
+
const targetInstances = sameGroup ? sourceInstances : instances.get(target.sortable.group);
|
|
375
|
+
if (!sourceInstances || !targetInstances) return;
|
|
272
376
|
manager2.renderer.rendering.then(() => {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
377
|
+
var _a, _b;
|
|
378
|
+
for (const [group, sortableInstances] of instances.entries()) {
|
|
379
|
+
const entries = Array.from(sortableInstances).entries();
|
|
380
|
+
for (const [index, sortable] of entries) {
|
|
381
|
+
if (sortable.index !== index || sortable.group !== group) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
276
384
|
}
|
|
277
385
|
}
|
|
278
|
-
const orderedSortables = Array.from(
|
|
279
|
-
sortableInstances.values()
|
|
280
|
-
).sort((a, b) => a.index - b.index);
|
|
281
|
-
const sourceIndex = orderedSortables.indexOf(source.sortable);
|
|
282
|
-
const targetIndex = orderedSortables.indexOf(target.sortable);
|
|
283
|
-
const newOrder = arrayMove(
|
|
284
|
-
orderedSortables,
|
|
285
|
-
sourceIndex,
|
|
286
|
-
targetIndex
|
|
287
|
-
);
|
|
288
386
|
const sourceElement = source.sortable.element;
|
|
289
387
|
const targetElement = target.sortable.element;
|
|
290
388
|
if (!targetElement || !sourceElement) {
|
|
291
389
|
return;
|
|
292
390
|
}
|
|
391
|
+
const orderedSourceSortables = sort(sourceInstances);
|
|
392
|
+
const orderedTargetSortables = sameGroup ? orderedSourceSortables : sort(targetInstances);
|
|
393
|
+
const sourceGroup = (_a = source.sortable.group) != null ? _a : defaultGroup;
|
|
394
|
+
const targetGroup = (_b = target.sortable.group) != null ? _b : defaultGroup;
|
|
395
|
+
const state$1 = {
|
|
396
|
+
[sourceGroup]: orderedSourceSortables,
|
|
397
|
+
[targetGroup]: orderedTargetSortables
|
|
398
|
+
};
|
|
399
|
+
const newState = move(state$1, source, target);
|
|
400
|
+
const sourceIndex = newState[targetGroup].indexOf(source.sortable);
|
|
401
|
+
const targetIndex = newState[targetGroup].indexOf(target.sortable);
|
|
293
402
|
reorder(sourceElement, sourceIndex, targetElement, targetIndex);
|
|
403
|
+
manager2.collisionObserver.disable();
|
|
294
404
|
state.batch(() => {
|
|
295
|
-
for (const [index, sortable] of
|
|
405
|
+
for (const [index, sortable] of newState[sourceGroup].entries()) {
|
|
296
406
|
sortable.index = index;
|
|
297
407
|
}
|
|
408
|
+
if (!sameGroup) {
|
|
409
|
+
for (const [index, sortable] of newState[targetGroup].entries()) {
|
|
410
|
+
sortable.group = target.sortable.group;
|
|
411
|
+
sortable.index = index;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
298
414
|
});
|
|
415
|
+
manager2.actions.setDropTarget(source.id).then(() => manager2.collisionObserver.enable());
|
|
299
416
|
});
|
|
300
417
|
});
|
|
301
418
|
}),
|
|
@@ -308,35 +425,44 @@ var OptimisticSortingPlugin = class extends abstract.Plugin {
|
|
|
308
425
|
if (!isSortable(source)) {
|
|
309
426
|
return;
|
|
310
427
|
}
|
|
311
|
-
if (source.sortable.initialIndex === source.sortable.index) {
|
|
428
|
+
if (source.sortable.initialIndex === source.sortable.index && source.sortable.initialGroup === source.sortable.group) {
|
|
312
429
|
return;
|
|
313
430
|
}
|
|
314
431
|
queueMicrotask(() => {
|
|
315
|
-
const
|
|
432
|
+
const instances = getSortableInstances();
|
|
433
|
+
const initialGroupInstances = instances.get(
|
|
434
|
+
source.sortable.initialGroup
|
|
435
|
+
);
|
|
436
|
+
if (!initialGroupInstances) return;
|
|
316
437
|
manager2.renderer.rendering.then(() => {
|
|
317
438
|
var _a;
|
|
318
|
-
for (const [
|
|
319
|
-
|
|
320
|
-
|
|
439
|
+
for (const [group, sortableInstances] of instances.entries()) {
|
|
440
|
+
const entries = Array.from(sortableInstances).entries();
|
|
441
|
+
for (const [index, sortable] of entries) {
|
|
442
|
+
if (sortable.index !== index || sortable.group !== group) {
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
321
445
|
}
|
|
322
446
|
}
|
|
323
|
-
const
|
|
324
|
-
sortableInstances.values()
|
|
325
|
-
).sort((a, b) => a.index - b.index);
|
|
447
|
+
const initialGroup = sort(initialGroupInstances);
|
|
326
448
|
const sourceElement = source.sortable.element;
|
|
327
|
-
const targetElement = (_a =
|
|
449
|
+
const targetElement = (_a = initialGroup[source.sortable.initialIndex]) == null ? void 0 : _a.element;
|
|
328
450
|
if (!targetElement || !sourceElement) {
|
|
329
451
|
return;
|
|
330
452
|
}
|
|
331
453
|
reorder(
|
|
332
454
|
sourceElement,
|
|
333
|
-
source.sortable.
|
|
455
|
+
source.sortable.initialIndex,
|
|
334
456
|
targetElement,
|
|
335
457
|
source.sortable.initialIndex
|
|
336
458
|
);
|
|
337
459
|
state.batch(() => {
|
|
338
|
-
for (const
|
|
339
|
-
|
|
460
|
+
for (const [_, sortableInstances] of instances.entries()) {
|
|
461
|
+
const entries = Array.from(sortableInstances).values();
|
|
462
|
+
for (const sortable of entries) {
|
|
463
|
+
sortable.index = sortable.initialIndex;
|
|
464
|
+
sortable.group = sortable.initialGroup;
|
|
465
|
+
}
|
|
340
466
|
}
|
|
341
467
|
});
|
|
342
468
|
});
|
|
@@ -351,9 +477,15 @@ var OptimisticSortingPlugin = class extends abstract.Plugin {
|
|
|
351
477
|
}
|
|
352
478
|
};
|
|
353
479
|
function reorder(sourceElement, sourceIndex, targetElement, targetIndex) {
|
|
354
|
-
const position = targetIndex < sourceIndex ? "
|
|
480
|
+
const position = targetIndex < sourceIndex ? "afterend" : "beforebegin";
|
|
355
481
|
targetElement.insertAdjacentElement(position, sourceElement);
|
|
356
482
|
}
|
|
483
|
+
function sortByIndex(a, b) {
|
|
484
|
+
return a.index - b.index;
|
|
485
|
+
}
|
|
486
|
+
function sort(instances) {
|
|
487
|
+
return Array.from(instances).sort(sortByIndex);
|
|
488
|
+
}
|
|
357
489
|
|
|
358
490
|
// src/sortable/sortable.ts
|
|
359
491
|
var defaultPlugins = [
|
|
@@ -398,6 +530,7 @@ var Sortable2 = class {
|
|
|
398
530
|
var _a2;
|
|
399
531
|
return (_a2 = this.manager) == null ? void 0 : _a2.monitor.addEventListener("dragstart", () => {
|
|
400
532
|
this.initialIndex = this.index;
|
|
533
|
+
this.initialGroup = this.group;
|
|
401
534
|
this.previousIndex = this.index;
|
|
402
535
|
});
|
|
403
536
|
},
|
package/sortable.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/sortable/sortable.ts","src/sortable/SortableKeyboardPlugin.ts","src/sortable/utilities.ts","src/sortable/OptimisticSortingPlugin.ts","../helpers/dist/index.js"],"names":["batch","manager","id","source","target","Plugin","Sortable","_a","index","group"],"mappings":"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","sourcesContent":["import {batch, reactive, untracked} from '@dnd-kit/state';\nimport type {CollisionPriority} from '@dnd-kit/abstract';\nimport type {\n Data,\n PluginConstructor,\n Type,\n UniqueIdentifier,\n} from '@dnd-kit/abstract';\nimport {\n defaultCollisionDetection,\n type CollisionDetector,\n} from '@dnd-kit/collision';\nimport {Draggable, Droppable} from '@dnd-kit/dom';\nimport type {\n DraggableInput,\n FeedbackType,\n DroppableInput,\n Sensors,\n DragDropManager,\n} from '@dnd-kit/dom';\nimport {\n animateTransform,\n getComputedStyles,\n computeTranslate,\n ProxiedElements,\n} from '@dnd-kit/dom/utilities';\n\nimport {SortableKeyboardPlugin} from './SortableKeyboardPlugin.ts';\nimport {OptimisticSortingPlugin} from './OptimisticSortingPlugin.ts';\n\nexport interface SortableTransition {\n /**\n * The duration of the transition in milliseconds.\n * @default 300\n */\n duration?: number;\n /**\n * The easing function to use for the transition.\n * @default 'cubic-bezier(0.25, 1, 0.5, 1)'\n */\n easing?: string;\n /**\n * Whether the sortable item should transition when its index changes,\n * but there is no drag operation in progress.\n * @default false\n **/\n idle?: boolean;\n}\n\nconst defaultPlugins: PluginConstructor[] = [\n SortableKeyboardPlugin,\n OptimisticSortingPlugin,\n];\n\nexport interface SortableInput<T extends Data>\n extends DraggableInput<T>,\n DroppableInput<T> {\n /**\n * The index of the sortable item within its group.\n */\n index: number;\n\n /**\n * The element that should be used as the droppable target for this sortable item.\n */\n target?: Element;\n\n /**\n * The optional unique identifier of the group that the sortable item belongs to.\n */\n group?: UniqueIdentifier;\n /**\n * The transition configuration to use when the index of the sortable item changes.\n */\n transition?: SortableTransition | null;\n /**\n * Plugins to register when sortable item is instantiated.\n * @default [SortableKeyboardPlugin, OptimisticSortingPlugin]\n */\n plugins?: PluginConstructor[];\n}\n\nexport const defaultSortableTransition: SortableTransition = {\n duration: 250,\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n idle: false,\n};\n\nexport class Sortable<T extends Data = Data> {\n public draggable: Draggable<T>;\n public droppable: Droppable<T>;\n\n @reactive\n public accessor index: number;\n\n previousIndex: number;\n\n initialIndex: number;\n\n @reactive\n public accessor group: UniqueIdentifier | undefined;\n\n transition: SortableTransition | null;\n\n constructor(\n {\n effects: inputEffects = () => [],\n group,\n index,\n sensors,\n type,\n transition = defaultSortableTransition,\n plugins = defaultPlugins,\n ...input\n }: SortableInput<T>,\n manager: DragDropManager<any, any> | undefined\n ) {\n let previousGroup = group;\n\n this.droppable = new SortableDroppable<T>(input, manager, this);\n this.draggable = new SortableDraggable<T>(\n {\n ...input,\n effects: () => [\n () =>\n this.manager?.monitor.addEventListener('dragstart', () => {\n this.initialIndex = this.index;\n this.previousIndex = this.index;\n }),\n () => {\n const {index, group, previousIndex, manager: _} = this;\n\n if (group !== previousGroup) {\n previousGroup = group;\n this.previousIndex = index;\n return;\n }\n\n // Re-run this effect whenever the index changes\n if (index === previousIndex) {\n return;\n }\n\n this.previousIndex = index;\n\n this.animate();\n },\n () => {\n const {target} = this;\n const {feedback, isDragSource} = this.draggable;\n\n if (feedback == 'move' && isDragSource) {\n this.droppable.disabled = !target;\n }\n },\n () => {\n const {manager} = this;\n\n for (const plugin of plugins) {\n manager?.registry.register(plugin);\n }\n },\n ...inputEffects(),\n ],\n type,\n sensors,\n },\n manager,\n this\n );\n\n this.manager = manager;\n this.index = index;\n this.previousIndex = index;\n this.initialIndex = index;\n this.group = group;\n this.type = type;\n this.transition = transition;\n }\n\n protected animate() {\n untracked(() => {\n const {manager, transition} = this;\n const {shape} = this.droppable;\n\n if (!manager) return;\n\n const {idle} = manager.dragOperation.status;\n\n if (!shape || !transition || (idle && !transition.idle)) {\n return;\n }\n\n manager.renderer.rendering.then(() => {\n const {element} = this;\n\n if (!element) {\n return;\n }\n\n const updatedShape = this.refreshShape();\n\n if (!updatedShape) {\n return;\n }\n\n queueMicrotask(() => {\n const delta = {\n x:\n shape.boundingRectangle.left -\n updatedShape.boundingRectangle.left,\n y: shape.boundingRectangle.top - updatedShape.boundingRectangle.top,\n };\n\n const {translate} = getComputedStyles(element);\n const currentTranslate = computeTranslate(element, translate, false);\n const finalTranslate = computeTranslate(element, translate);\n\n if (delta.x || delta.y) {\n animateTransform({\n element,\n keyframes: {\n translate: [\n `${currentTranslate.x + delta.x}px ${currentTranslate.y + delta.y}px ${currentTranslate.z}`,\n `${finalTranslate.x}px ${finalTranslate.y}px ${finalTranslate.z}`,\n ],\n },\n options: transition,\n onFinish: () => {\n if (!manager.dragOperation.status.dragging) {\n this.droppable.shape = undefined;\n }\n },\n });\n }\n });\n });\n });\n }\n\n public get manager(): DragDropManager<any, any> | undefined {\n return this.draggable.manager as any;\n }\n\n public set manager(manager: DragDropManager<any, any> | undefined) {\n batch(() => {\n this.draggable.manager = manager as any;\n this.droppable.manager = manager as any;\n });\n }\n\n #element: Element | undefined;\n\n public set element(element: Element | undefined) {\n batch(() => {\n const previousElement = this.#element;\n const droppableElement = this.droppable.element;\n const draggableElement = this.draggable.element;\n\n if (!droppableElement || droppableElement === previousElement) {\n this.droppable.element = element;\n }\n\n if (!draggableElement || draggableElement === previousElement) {\n this.draggable.element = element;\n }\n\n this.#element = element;\n });\n }\n\n public get element() {\n const element = this.#element;\n\n if (!element) return;\n\n return ProxiedElements.get(element) ?? element ?? this.droppable.element;\n }\n\n public set target(target: Element | undefined) {\n this.droppable.element = target;\n }\n\n public get target() {\n return this.droppable.element;\n }\n\n public set source(source: Element | undefined) {\n this.draggable.element = source;\n }\n\n public get source() {\n return this.draggable.element;\n }\n\n public get disabled() {\n return this.draggable.disabled && this.droppable.disabled;\n }\n\n public set feedback(value: FeedbackType) {\n this.draggable.feedback = value;\n }\n\n public set disabled(value: boolean) {\n batch(() => {\n this.droppable.disabled = value;\n this.draggable.disabled = value;\n });\n }\n\n public set data(data: T) {\n batch(() => {\n this.droppable.data = data;\n this.draggable.data = data;\n });\n }\n\n public set handle(handle: Element | undefined) {\n this.draggable.handle = handle;\n }\n\n public set id(id: UniqueIdentifier) {\n batch(() => {\n this.droppable.id = id;\n this.draggable.id = id;\n });\n }\n\n public get id() {\n return this.droppable.id;\n }\n\n public set sensors(value: Sensors | undefined) {\n this.draggable.sensors = value;\n }\n\n public set collisionPriority(value: CollisionPriority | number | undefined) {\n this.droppable.collisionPriority = value;\n }\n\n public set collisionDetector(value: CollisionDetector | undefined) {\n this.droppable.collisionDetector = value ?? defaultCollisionDetection;\n }\n\n public set type(type: Type | undefined) {\n batch(() => {\n this.droppable.type = type;\n this.draggable.type = type;\n });\n }\n\n public get type() {\n return this.draggable.type;\n }\n\n public set accept(value: Droppable['accept']) {\n this.droppable.accept = value;\n }\n\n public get accept() {\n return this.droppable.accept;\n }\n\n public get isDropTarget() {\n return this.droppable.isDropTarget;\n }\n\n /**\n * A boolean indicating whether the sortable item is the source of a drag operation.\n */\n public get isDragSource() {\n return this.draggable.isDragSource;\n }\n\n public get status() {\n return this.draggable.status;\n }\n\n public refreshShape() {\n return this.droppable.refreshShape();\n }\n\n public accepts(draggable: Draggable): boolean {\n return this.droppable.accepts(draggable);\n }\n\n public register() {\n batch(() => {\n this.manager?.registry.register(this.droppable);\n this.manager?.registry.register(this.draggable);\n });\n\n return () => this.unregister();\n }\n\n public unregister() {\n batch(() => {\n this.manager?.registry.unregister(this.droppable);\n this.manager?.registry.unregister(this.draggable);\n });\n }\n\n public destroy() {\n batch(() => {\n this.droppable.destroy();\n this.draggable.destroy();\n });\n }\n}\n\nexport class SortableDraggable<T extends Data> extends Draggable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n\nexport class SortableDroppable<T extends Data> extends Droppable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n","import {batch, CleanupFunction, effect} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {closestCorners} from '@dnd-kit/collision';\nimport {\n DOMRectangle,\n getVisibleBoundingRectangle,\n isKeyboardEvent,\n scheduler,\n scrollIntoViewIfNeeded,\n} from '@dnd-kit/dom/utilities';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport {Scroller} from '@dnd-kit/dom';\nimport type {DragDropManager, Droppable} from '@dnd-kit/dom';\n\nimport {isSortable} from './utilities.ts';\n\nconst TOLERANCE = 10;\n\nexport class SortableKeyboardPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const cleanupEffect = effect(() => {\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (dragOperation.status.initialized) {\n const scroller = manager.registry.plugins.get(Scroller);\n\n if (scroller) {\n scroller.disable();\n\n return () => scroller.enable();\n }\n }\n });\n\n const unsubscribe = manager.monitor.addEventListener(\n 'dragmove',\n (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (!dragOperation.shape) {\n return;\n }\n\n const {actions, collisionObserver, registry} = manager;\n const {by} = event;\n\n if (!by) {\n return;\n }\n\n const direction = getDirection(by);\n const {source, target} = dragOperation;\n const {center} = dragOperation.shape.current;\n const potentialTargets: Droppable[] = [];\n const cleanup: CleanupFunction[] = [];\n\n batch(() => {\n for (const droppable of registry.droppables) {\n const {id} = droppable;\n\n if (\n !droppable.accepts(source) ||\n (id === target?.id && isSortable(droppable)) ||\n !droppable.element\n ) {\n continue;\n }\n\n let previousShape = droppable.shape;\n const shape = new DOMRectangle(droppable.element, {\n getBoundingClientRect: (element) =>\n getVisibleBoundingRectangle(element, undefined, 0.2),\n });\n\n if (!shape.height || !shape.width) continue;\n\n if (\n (direction == 'down' &&\n center.y + TOLERANCE < shape.center.y) ||\n (direction == 'up' && center.y - TOLERANCE > shape.center.y) ||\n (direction == 'left' &&\n center.x - TOLERANCE > shape.center.x) ||\n (direction == 'right' && center.x + TOLERANCE < shape.center.x)\n ) {\n potentialTargets.push(droppable);\n droppable.shape = shape;\n cleanup.push(() => (droppable.shape = previousShape));\n }\n }\n });\n\n event.preventDefault();\n collisionObserver.disable();\n\n const collisions = collisionObserver.computeCollisions(\n potentialTargets,\n closestCorners\n );\n batch(() => cleanup.forEach((clean) => clean()));\n\n const [firstCollision] = collisions;\n\n if (!firstCollision) {\n return;\n }\n\n const {id} = firstCollision;\n const {index, group} = source.sortable;\n\n actions.setDropTarget(id).then((defaultPrevented) => {\n if (defaultPrevented) return;\n\n // Wait until optimistic sorting has a chance to update the DOM\n const {source, target} = dragOperation;\n\n if (!source || !isSortable(source)) {\n return;\n }\n\n const {\n index: newIndex,\n group: newGroup,\n target: targetElement,\n } = source.sortable;\n const updated = index !== newIndex || group !== newGroup;\n const element = updated ? targetElement : target?.element;\n\n if (!element) return;\n\n scrollIntoViewIfNeeded(element);\n const shape = new DOMRectangle(element);\n\n if (!shape) {\n return;\n }\n\n actions.move({\n to: {\n x: shape.center.x,\n y: shape.center.y,\n },\n });\n\n if (updated) {\n actions\n .setDropTarget(source.id)\n .then(() => collisionObserver.enable());\n } else {\n collisionObserver.enable();\n }\n });\n });\n }\n );\n\n this.destroy = () => {\n unsubscribe();\n cleanupEffect();\n };\n }\n}\n\nfunction getDirection(delta: Coordinates) {\n const {x, y} = delta;\n\n if (x > 0) {\n return 'right';\n } else if (x < 0) {\n return 'left';\n } else if (y > 0) {\n return 'down';\n } else if (y < 0) {\n return 'up';\n }\n}\n","import type {Droppable, Draggable} from '@dnd-kit/dom';\n\nimport {SortableDroppable, SortableDraggable} from './sortable.ts';\n\nexport function isSortable(\n element: Draggable | Droppable | null\n): element is SortableDroppable<any> | SortableDraggable<any> {\n return (\n element instanceof SortableDroppable || element instanceof SortableDraggable\n );\n}\n","import {Plugin, UniqueIdentifier} from '@dnd-kit/abstract';\nimport type {DragDropManager} from '@dnd-kit/dom';\nimport {arrayMove} from '@dnd-kit/helpers';\n\nimport {isSortable} from './utilities.ts';\nimport {Sortable, SortableDroppable} from './sortable.ts';\nimport {batch} from '@dnd-kit/state';\n\nexport class OptimisticSortingPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const getSortableInstances = (group: UniqueIdentifier | undefined) => {\n const sortableInstances = new Map<number, Sortable>();\n\n for (const droppable of manager.registry.droppables) {\n if (droppable instanceof SortableDroppable) {\n const {sortable} = droppable;\n\n if (sortable.group !== group) {\n continue;\n }\n\n if (sortableInstances.has(sortable.index)) {\n throw new Error(\n `Duplicate sortable index found for same sortable group: ${sortable.droppable.id} and ${sortableInstances.get(sortable.index)?.droppable.id} have the same index (${sortable.index}). Make sure each sortable item has a unique index. Use the \\`group\\` attribute to separate sortables into different groups.`\n );\n }\n\n sortableInstances.set(sortable.index, sortable);\n }\n }\n\n return sortableInstances;\n };\n\n const unsubscribe = [\n manager.monitor.addEventListener('dragover', (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source, target} = dragOperation;\n\n if (!isSortable(source) || !isSortable(target)) {\n return;\n }\n\n if (source.sortable === target.sortable) {\n return;\n }\n\n if (source.sortable.group !== target.sortable.group) {\n return;\n }\n\n const sortableInstances = getSortableInstances(source.sortable.group);\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [index, sortable] of sortableInstances.entries()) {\n if (sortable.index !== index) {\n // At least one index was changed so we should abort optimistic updates\n return;\n }\n }\n\n const orderedSortables = Array.from(\n sortableInstances.values()\n ).sort((a, b) => a.index - b.index);\n\n const sourceIndex = orderedSortables.indexOf(source.sortable);\n const targetIndex = orderedSortables.indexOf(target.sortable);\n\n const newOrder = arrayMove(\n orderedSortables,\n sourceIndex,\n targetIndex\n );\n\n const sourceElement = source.sortable.element;\n const targetElement = target.sortable.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n reorder(sourceElement, sourceIndex, targetElement, targetIndex);\n\n batch(() => {\n for (const [index, sortable] of newOrder.entries()) {\n sortable.index = index;\n }\n });\n });\n });\n }),\n manager.monitor.addEventListener('dragend', (event, manager) => {\n if (!event.canceled) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source} = dragOperation;\n\n if (!isSortable(source)) {\n return;\n }\n\n if (source.sortable.initialIndex === source.sortable.index) {\n return;\n }\n\n queueMicrotask(() => {\n const sortableInstances = getSortableInstances(source.sortable.group);\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [index, sortable] of sortableInstances.entries()) {\n if (sortable.index !== index) {\n // At least one index was changed so we should abort optimistic updates\n return;\n }\n }\n\n const orderedSortables = Array.from(\n sortableInstances.values()\n ).sort((a, b) => a.index - b.index);\n\n const sourceElement = source.sortable.element;\n const targetElement =\n orderedSortables[source.sortable.initialIndex]?.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n reorder(\n sourceElement,\n source.sortable.index,\n targetElement,\n source.sortable.initialIndex\n );\n\n batch(() => {\n for (const sortable of orderedSortables.values()) {\n sortable.index = sortable.initialIndex;\n }\n });\n });\n });\n }),\n ];\n\n this.destroy = () => {\n for (const unsubscribeListener of unsubscribe) {\n unsubscribeListener();\n }\n };\n }\n}\n\nfunction reorder(\n sourceElement: Element,\n sourceIndex: number,\n targetElement: Element,\n targetIndex: number\n) {\n const position = targetIndex < sourceIndex ? 'beforebegin' : 'afterend';\n\n targetElement.insertAdjacentElement(position, sourceElement);\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/move.ts\nfunction arrayMove(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n newArray.splice(to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\nfunction arraySwap(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n const item = newArray[from];\n newArray[from] = newArray[to];\n newArray[to] = item;\n return newArray;\n}\nfunction mutate(items, source, target, mutation) {\n if (!source || !target) {\n return items;\n }\n const findIndex = (item, id) => item === id || typeof item === \"object\" && \"id\" in item && item.id === id;\n if (Array.isArray(items)) {\n const sourceIndex2 = items.findIndex((item) => findIndex(item, source.id));\n const targetIndex2 = items.findIndex((item) => findIndex(item, target.id));\n if (sourceIndex2 === -1 || targetIndex2 === -1) {\n return items;\n }\n if (source.manager) {\n const { dragOperation: dragOperation2 } = source.manager;\n if (!dragOperation2.canceled && \"index\" in source && typeof source.index === \"number\") {\n const projectedSourceIndex = source.index;\n if (projectedSourceIndex !== sourceIndex2) {\n return mutation(items, sourceIndex2, projectedSourceIndex);\n }\n }\n }\n return mutation(items, sourceIndex2, targetIndex2);\n }\n if (source.id === target.id) {\n return items;\n }\n const entries = Object.entries(items);\n let sourceIndex = -1;\n let sourceParent;\n let targetIndex = -1;\n let targetParent;\n for (const [id, children] of entries) {\n if (sourceIndex === -1) {\n sourceIndex = children.findIndex((item) => findIndex(item, source.id));\n if (sourceIndex !== -1) {\n sourceParent = id;\n }\n }\n if (targetIndex === -1) {\n targetIndex = children.findIndex((item) => findIndex(item, target.id));\n if (targetIndex !== -1) {\n targetParent = id;\n }\n }\n if (sourceIndex !== -1 && targetIndex !== -1) {\n break;\n }\n }\n if (!source.manager) return items;\n const { dragOperation } = source.manager;\n const position = dragOperation.position.current;\n if (targetParent == null) {\n if (target.id in items) {\n const insertionIndex = target.shape && position.y > target.shape.center.y ? items[target.id].length : 0;\n targetParent = target.id;\n targetIndex = insertionIndex;\n }\n }\n if (sourceParent == null || targetParent == null) {\n return items;\n }\n if (sourceParent === targetParent) {\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: mutation(items[sourceParent], sourceIndex, targetIndex)\n });\n }\n const isBelowTarget = target.shape && position.y > target.shape.boundingRectangle.bottom;\n const modifier = isBelowTarget ? 1 : 0;\n const sourceItem = items[sourceParent][sourceIndex];\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: [\n ...items[sourceParent].slice(0, sourceIndex),\n ...items[sourceParent].slice(sourceIndex + 1)\n ],\n [targetParent]: [\n ...items[targetParent].slice(0, targetIndex + modifier),\n sourceItem,\n ...items[targetParent].slice(targetIndex + modifier)\n ]\n });\n}\nfunction move(items, source, target) {\n return mutate(items, source, target, arrayMove);\n}\nfunction swap(items, source, target) {\n return mutate(items, source, target, arraySwap);\n}\nexport {\n arrayMove,\n arraySwap,\n move,\n swap\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["src/sortable/sortable.ts","src/sortable/SortableKeyboardPlugin.ts","src/sortable/utilities.ts","src/sortable/OptimisticSortingPlugin.ts","../helpers/dist/index.js"],"names":["batch","manager","id","source","target","Plugin","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","Sortable","_a","index","group"],"mappings":"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","sourcesContent":["import {batch, reactive, untracked} from '@dnd-kit/state';\nimport type {CollisionPriority} from '@dnd-kit/abstract';\nimport type {\n Data,\n PluginConstructor,\n Type,\n UniqueIdentifier,\n} from '@dnd-kit/abstract';\nimport {\n defaultCollisionDetection,\n type CollisionDetector,\n} from '@dnd-kit/collision';\nimport {Draggable, Droppable} from '@dnd-kit/dom';\nimport type {\n DraggableInput,\n FeedbackType,\n DroppableInput,\n Sensors,\n DragDropManager,\n} from '@dnd-kit/dom';\nimport {\n animateTransform,\n getComputedStyles,\n computeTranslate,\n ProxiedElements,\n} from '@dnd-kit/dom/utilities';\n\nimport {SortableKeyboardPlugin} from './SortableKeyboardPlugin.ts';\nimport {OptimisticSortingPlugin} from './OptimisticSortingPlugin.ts';\n\nexport interface SortableTransition {\n /**\n * The duration of the transition in milliseconds.\n * @default 300\n */\n duration?: number;\n /**\n * The easing function to use for the transition.\n * @default 'cubic-bezier(0.25, 1, 0.5, 1)'\n */\n easing?: string;\n /**\n * Whether the sortable item should transition when its index changes,\n * but there is no drag operation in progress.\n * @default false\n **/\n idle?: boolean;\n}\n\nconst defaultPlugins: PluginConstructor[] = [\n SortableKeyboardPlugin,\n OptimisticSortingPlugin,\n];\n\nexport interface SortableInput<T extends Data>\n extends DraggableInput<T>,\n DroppableInput<T> {\n /**\n * The index of the sortable item within its group.\n */\n index: number;\n\n /**\n * The element that should be used as the droppable target for this sortable item.\n */\n target?: Element;\n\n /**\n * The optional unique identifier of the group that the sortable item belongs to.\n */\n group?: UniqueIdentifier;\n /**\n * The transition configuration to use when the index of the sortable item changes.\n */\n transition?: SortableTransition | null;\n /**\n * Plugins to register when sortable item is instantiated.\n * @default [SortableKeyboardPlugin, OptimisticSortingPlugin]\n */\n plugins?: PluginConstructor[];\n}\n\nexport const defaultSortableTransition: SortableTransition = {\n duration: 250,\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n idle: false,\n};\n\nexport class Sortable<T extends Data = Data> {\n public draggable: Draggable<T>;\n public droppable: Droppable<T>;\n\n @reactive\n public accessor index: number;\n\n previousIndex: number;\n initialIndex: number;\n initialGroup: UniqueIdentifier | undefined;\n\n @reactive\n public accessor group: UniqueIdentifier | undefined;\n\n transition: SortableTransition | null;\n\n constructor(\n {\n effects: inputEffects = () => [],\n group,\n index,\n sensors,\n type,\n transition = defaultSortableTransition,\n plugins = defaultPlugins,\n ...input\n }: SortableInput<T>,\n manager: DragDropManager<any, any> | undefined\n ) {\n let previousGroup = group;\n\n this.droppable = new SortableDroppable<T>(input, manager, this);\n this.draggable = new SortableDraggable<T>(\n {\n ...input,\n effects: () => [\n () =>\n this.manager?.monitor.addEventListener('dragstart', () => {\n this.initialIndex = this.index;\n this.initialGroup = this.group;\n this.previousIndex = this.index;\n }),\n () => {\n const {index, group, previousIndex, manager: _} = this;\n\n if (group !== previousGroup) {\n previousGroup = group;\n this.previousIndex = index;\n return;\n }\n\n // Re-run this effect whenever the index changes\n if (index === previousIndex) {\n return;\n }\n\n this.previousIndex = index;\n\n this.animate();\n },\n () => {\n const {target} = this;\n const {feedback, isDragSource} = this.draggable;\n\n if (feedback == 'move' && isDragSource) {\n this.droppable.disabled = !target;\n }\n },\n () => {\n const {manager} = this;\n\n for (const plugin of plugins) {\n manager?.registry.register(plugin);\n }\n },\n ...inputEffects(),\n ],\n type,\n sensors,\n },\n manager,\n this\n );\n\n this.manager = manager;\n this.index = index;\n this.previousIndex = index;\n this.initialIndex = index;\n this.group = group;\n this.type = type;\n this.transition = transition;\n }\n\n protected animate() {\n untracked(() => {\n const {manager, transition} = this;\n const {shape} = this.droppable;\n\n if (!manager) return;\n\n const {idle} = manager.dragOperation.status;\n\n if (!shape || !transition || (idle && !transition.idle)) {\n return;\n }\n\n manager.renderer.rendering.then(() => {\n const {element} = this;\n\n if (!element) {\n return;\n }\n\n const updatedShape = this.refreshShape();\n\n if (!updatedShape) {\n return;\n }\n\n queueMicrotask(() => {\n const delta = {\n x:\n shape.boundingRectangle.left -\n updatedShape.boundingRectangle.left,\n y: shape.boundingRectangle.top - updatedShape.boundingRectangle.top,\n };\n\n const {translate} = getComputedStyles(element);\n const currentTranslate = computeTranslate(element, translate, false);\n const finalTranslate = computeTranslate(element, translate);\n\n if (delta.x || delta.y) {\n animateTransform({\n element,\n keyframes: {\n translate: [\n `${currentTranslate.x + delta.x}px ${currentTranslate.y + delta.y}px ${currentTranslate.z}`,\n `${finalTranslate.x}px ${finalTranslate.y}px ${finalTranslate.z}`,\n ],\n },\n options: transition,\n onFinish: () => {\n if (!manager.dragOperation.status.dragging) {\n this.droppable.shape = undefined;\n }\n },\n });\n }\n });\n });\n });\n }\n\n public get manager(): DragDropManager<any, any> | undefined {\n return this.draggable.manager as any;\n }\n\n public set manager(manager: DragDropManager<any, any> | undefined) {\n batch(() => {\n this.draggable.manager = manager as any;\n this.droppable.manager = manager as any;\n });\n }\n\n #element: Element | undefined;\n\n public set element(element: Element | undefined) {\n batch(() => {\n const previousElement = this.#element;\n const droppableElement = this.droppable.element;\n const draggableElement = this.draggable.element;\n\n if (!droppableElement || droppableElement === previousElement) {\n this.droppable.element = element;\n }\n\n if (!draggableElement || draggableElement === previousElement) {\n this.draggable.element = element;\n }\n\n this.#element = element;\n });\n }\n\n public get element() {\n const element = this.#element;\n\n if (!element) return;\n\n return ProxiedElements.get(element) ?? element ?? this.droppable.element;\n }\n\n public set target(target: Element | undefined) {\n this.droppable.element = target;\n }\n\n public get target() {\n return this.droppable.element;\n }\n\n public set source(source: Element | undefined) {\n this.draggable.element = source;\n }\n\n public get source() {\n return this.draggable.element;\n }\n\n public get disabled() {\n return this.draggable.disabled && this.droppable.disabled;\n }\n\n public set feedback(value: FeedbackType) {\n this.draggable.feedback = value;\n }\n\n public set disabled(value: boolean) {\n batch(() => {\n this.droppable.disabled = value;\n this.draggable.disabled = value;\n });\n }\n\n public set data(data: T) {\n batch(() => {\n this.droppable.data = data;\n this.draggable.data = data;\n });\n }\n\n public set handle(handle: Element | undefined) {\n this.draggable.handle = handle;\n }\n\n public set id(id: UniqueIdentifier) {\n batch(() => {\n this.droppable.id = id;\n this.draggable.id = id;\n });\n }\n\n public get id() {\n return this.droppable.id;\n }\n\n public set sensors(value: Sensors | undefined) {\n this.draggable.sensors = value;\n }\n\n public set collisionPriority(value: CollisionPriority | number | undefined) {\n this.droppable.collisionPriority = value;\n }\n\n public set collisionDetector(value: CollisionDetector | undefined) {\n this.droppable.collisionDetector = value ?? defaultCollisionDetection;\n }\n\n public set type(type: Type | undefined) {\n batch(() => {\n this.droppable.type = type;\n this.draggable.type = type;\n });\n }\n\n public get type() {\n return this.draggable.type;\n }\n\n public set accept(value: Droppable['accept']) {\n this.droppable.accept = value;\n }\n\n public get accept() {\n return this.droppable.accept;\n }\n\n public get isDropTarget() {\n return this.droppable.isDropTarget;\n }\n\n /**\n * A boolean indicating whether the sortable item is the source of a drag operation.\n */\n public get isDragSource() {\n return this.draggable.isDragSource;\n }\n\n public get status() {\n return this.draggable.status;\n }\n\n public refreshShape() {\n return this.droppable.refreshShape();\n }\n\n public accepts(draggable: Draggable): boolean {\n return this.droppable.accepts(draggable);\n }\n\n public register() {\n batch(() => {\n this.manager?.registry.register(this.droppable);\n this.manager?.registry.register(this.draggable);\n });\n\n return () => this.unregister();\n }\n\n public unregister() {\n batch(() => {\n this.manager?.registry.unregister(this.droppable);\n this.manager?.registry.unregister(this.draggable);\n });\n }\n\n public destroy() {\n batch(() => {\n this.droppable.destroy();\n this.draggable.destroy();\n });\n }\n}\n\nexport class SortableDraggable<T extends Data> extends Draggable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n\nexport class SortableDroppable<T extends Data> extends Droppable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n","import {batch, CleanupFunction, effect} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {closestCorners} from '@dnd-kit/collision';\nimport {\n DOMRectangle,\n getVisibleBoundingRectangle,\n isKeyboardEvent,\n scheduler,\n scrollIntoViewIfNeeded,\n} from '@dnd-kit/dom/utilities';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport {Scroller} from '@dnd-kit/dom';\nimport type {DragDropManager, Droppable} from '@dnd-kit/dom';\n\nimport {isSortable} from './utilities.ts';\n\nconst TOLERANCE = 10;\n\nexport class SortableKeyboardPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const cleanupEffect = effect(() => {\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (dragOperation.status.initialized) {\n const scroller = manager.registry.plugins.get(Scroller);\n\n if (scroller) {\n scroller.disable();\n\n return () => scroller.enable();\n }\n }\n });\n\n const unsubscribe = manager.monitor.addEventListener(\n 'dragmove',\n (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (!dragOperation.shape) {\n return;\n }\n\n const {actions, collisionObserver, registry} = manager;\n const {by} = event;\n\n if (!by) {\n return;\n }\n\n const direction = getDirection(by);\n const {source, target} = dragOperation;\n const {center} = dragOperation.shape.current;\n const potentialTargets: Droppable[] = [];\n const cleanup: CleanupFunction[] = [];\n\n batch(() => {\n for (const droppable of registry.droppables) {\n const {id} = droppable;\n\n if (\n !droppable.accepts(source) ||\n (id === target?.id && isSortable(droppable)) ||\n !droppable.element\n ) {\n continue;\n }\n\n let previousShape = droppable.shape;\n const shape = new DOMRectangle(droppable.element, {\n getBoundingClientRect: (element) =>\n getVisibleBoundingRectangle(element, undefined, 0.2),\n });\n\n if (!shape.height || !shape.width) continue;\n\n if (\n (direction == 'down' &&\n center.y + TOLERANCE < shape.center.y) ||\n (direction == 'up' && center.y - TOLERANCE > shape.center.y) ||\n (direction == 'left' &&\n center.x - TOLERANCE > shape.center.x) ||\n (direction == 'right' && center.x + TOLERANCE < shape.center.x)\n ) {\n potentialTargets.push(droppable);\n droppable.shape = shape;\n cleanup.push(() => (droppable.shape = previousShape));\n }\n }\n });\n\n event.preventDefault();\n collisionObserver.disable();\n\n const collisions = collisionObserver.computeCollisions(\n potentialTargets,\n closestCorners\n );\n batch(() => cleanup.forEach((clean) => clean()));\n\n const [firstCollision] = collisions;\n\n if (!firstCollision) {\n return;\n }\n\n const {id} = firstCollision;\n const {index, group} = source.sortable;\n\n actions.setDropTarget(id).then((defaultPrevented) => {\n if (defaultPrevented) return;\n\n // Wait until optimistic sorting has a chance to update the DOM\n const {source, target} = dragOperation;\n\n if (!source || !isSortable(source)) {\n return;\n }\n\n const {\n index: newIndex,\n group: newGroup,\n target: targetElement,\n } = source.sortable;\n const updated = index !== newIndex || group !== newGroup;\n const element = updated ? targetElement : target?.element;\n\n if (!element) return;\n\n scrollIntoViewIfNeeded(element);\n const shape = new DOMRectangle(element);\n\n if (!shape) {\n return;\n }\n\n actions.move({\n to: {\n x: shape.center.x,\n y: shape.center.y,\n },\n });\n\n if (updated) {\n actions\n .setDropTarget(source.id)\n .then(() => collisionObserver.enable());\n } else {\n collisionObserver.enable();\n }\n });\n });\n }\n );\n\n this.destroy = () => {\n unsubscribe();\n cleanupEffect();\n };\n }\n}\n\nfunction getDirection(delta: Coordinates) {\n const {x, y} = delta;\n\n if (x > 0) {\n return 'right';\n } else if (x < 0) {\n return 'left';\n } else if (y > 0) {\n return 'down';\n } else if (y < 0) {\n return 'up';\n }\n}\n","import type {Droppable, Draggable} from '@dnd-kit/dom';\n\nimport {SortableDroppable, SortableDraggable} from './sortable.ts';\n\nexport function isSortable(\n element: Draggable | Droppable | null\n): element is SortableDroppable<any> | SortableDraggable<any> {\n return (\n element instanceof SortableDroppable || element instanceof SortableDraggable\n );\n}\n","import {Plugin, type UniqueIdentifier} from '@dnd-kit/abstract';\nimport type {DragDropManager} from '@dnd-kit/dom';\nimport {move} from '@dnd-kit/helpers';\n\nimport {isSortable} from './utilities.ts';\nimport {Sortable, SortableDroppable} from './sortable.ts';\nimport {batch} from '@dnd-kit/state';\n\nconst defaultGroup = '__default__';\n\nexport class OptimisticSortingPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const getSortableInstances = () => {\n const sortableInstances = new Map<\n UniqueIdentifier | undefined,\n Set<Sortable>\n >();\n\n for (const droppable of manager.registry.droppables) {\n if (droppable instanceof SortableDroppable) {\n const {sortable} = droppable;\n const {group} = sortable;\n\n let instances = sortableInstances.get(group);\n\n if (!instances) {\n instances = new Set();\n sortableInstances.set(group, instances);\n }\n\n instances.add(sortable);\n }\n }\n\n for (const [group, instances] of sortableInstances) {\n sortableInstances.set(group, new Set(sort(instances)));\n }\n\n return sortableInstances;\n };\n\n const unsubscribe = [\n manager.monitor.addEventListener('dragover', (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source, target} = dragOperation;\n\n if (!isSortable(source) || !isSortable(target)) {\n return;\n }\n\n if (source.sortable === target.sortable) {\n return;\n }\n\n const instances = getSortableInstances();\n const sameGroup = source.sortable.group === target.sortable.group;\n const sourceInstances = instances.get(source.sortable.group);\n const targetInstances = sameGroup\n ? sourceInstances\n : instances.get(target.sortable.group);\n\n if (!sourceInstances || !targetInstances) return;\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [group, sortableInstances] of instances.entries()) {\n const entries = Array.from(sortableInstances).entries();\n\n for (const [index, sortable] of entries) {\n if (sortable.index !== index || sortable.group !== group) {\n // At least one index or group was changed so we should abort optimistic updates\n return;\n }\n }\n }\n\n const sourceElement = source.sortable.element;\n const targetElement = target.sortable.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n const orderedSourceSortables = sort(sourceInstances);\n const orderedTargetSortables = sameGroup\n ? orderedSourceSortables\n : sort(targetInstances);\n const sourceGroup = source.sortable.group ?? defaultGroup;\n const targetGroup = target.sortable.group ?? defaultGroup;\n const state = {\n [sourceGroup]: orderedSourceSortables,\n [targetGroup]: orderedTargetSortables,\n };\n const newState = move(state, source, target);\n const sourceIndex = newState[targetGroup].indexOf(source.sortable);\n const targetIndex = newState[targetGroup].indexOf(target.sortable);\n\n reorder(sourceElement, sourceIndex, targetElement, targetIndex);\n\n manager.collisionObserver.disable();\n\n batch(() => {\n for (const [index, sortable] of newState[sourceGroup].entries()) {\n sortable.index = index;\n }\n\n if (!sameGroup) {\n for (const [index, sortable] of newState[\n targetGroup\n ].entries()) {\n sortable.group = target.sortable.group;\n sortable.index = index;\n }\n }\n });\n\n manager.actions\n .setDropTarget(source.id)\n .then(() => manager.collisionObserver.enable());\n });\n });\n }),\n manager.monitor.addEventListener('dragend', (event, manager) => {\n if (!event.canceled) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source} = dragOperation;\n\n if (!isSortable(source)) {\n return;\n }\n\n if (\n source.sortable.initialIndex === source.sortable.index &&\n source.sortable.initialGroup === source.sortable.group\n ) {\n return;\n }\n\n queueMicrotask(() => {\n const instances = getSortableInstances();\n const initialGroupInstances = instances.get(\n source.sortable.initialGroup\n );\n\n if (!initialGroupInstances) return;\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [group, sortableInstances] of instances.entries()) {\n const entries = Array.from(sortableInstances).entries();\n\n for (const [index, sortable] of entries) {\n if (sortable.index !== index || sortable.group !== group) {\n // At least one index or group was changed so we should abort optimistic updates\n return;\n }\n }\n }\n\n const initialGroup = sort(initialGroupInstances);\n const sourceElement = source.sortable.element;\n const targetElement =\n initialGroup[source.sortable.initialIndex]?.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n reorder(\n sourceElement,\n source.sortable.initialIndex,\n targetElement,\n source.sortable.initialIndex\n );\n\n batch(() => {\n for (const [_, sortableInstances] of instances.entries()) {\n const entries = Array.from(sortableInstances).values();\n\n for (const sortable of entries) {\n sortable.index = sortable.initialIndex;\n sortable.group = sortable.initialGroup;\n }\n }\n });\n });\n });\n }),\n ];\n\n this.destroy = () => {\n for (const unsubscribeListener of unsubscribe) {\n unsubscribeListener();\n }\n };\n }\n}\n\nfunction reorder(\n sourceElement: Element,\n sourceIndex: number,\n targetElement: Element,\n targetIndex: number\n) {\n const position = targetIndex < sourceIndex ? 'afterend' : 'beforebegin';\n\n targetElement.insertAdjacentElement(position, sourceElement);\n}\n\nfunction sortByIndex(a: Sortable, b: Sortable) {\n return a.index - b.index;\n}\n\nfunction sort(instances: Set<Sortable>) {\n return Array.from(instances).sort(sortByIndex);\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/move.ts\nfunction arrayMove(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n newArray.splice(to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\nfunction arraySwap(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n const item = newArray[from];\n newArray[from] = newArray[to];\n newArray[to] = item;\n return newArray;\n}\nfunction mutate(items, source, target, mutation) {\n if (!source || !target) {\n return items;\n }\n const findIndex = (item, id) => item === id || typeof item === \"object\" && \"id\" in item && item.id === id;\n if (Array.isArray(items)) {\n const sourceIndex2 = items.findIndex((item) => findIndex(item, source.id));\n const targetIndex2 = items.findIndex((item) => findIndex(item, target.id));\n if (sourceIndex2 === -1 || targetIndex2 === -1) {\n return items;\n }\n if (source.manager) {\n const { dragOperation: dragOperation2 } = source.manager;\n if (!dragOperation2.canceled && \"index\" in source && typeof source.index === \"number\") {\n const projectedSourceIndex = source.index;\n if (projectedSourceIndex !== sourceIndex2) {\n return mutation(items, sourceIndex2, projectedSourceIndex);\n }\n }\n }\n return mutation(items, sourceIndex2, targetIndex2);\n }\n if (source.id === target.id) {\n return items;\n }\n const entries = Object.entries(items);\n let sourceIndex = -1;\n let sourceParent;\n let targetIndex = -1;\n let targetParent;\n for (const [id, children] of entries) {\n if (sourceIndex === -1) {\n sourceIndex = children.findIndex((item) => findIndex(item, source.id));\n if (sourceIndex !== -1) {\n sourceParent = id;\n }\n }\n if (targetIndex === -1) {\n targetIndex = children.findIndex((item) => findIndex(item, target.id));\n if (targetIndex !== -1) {\n targetParent = id;\n }\n }\n if (sourceIndex !== -1 && targetIndex !== -1) {\n break;\n }\n }\n if (!source.manager) return items;\n const { dragOperation } = source.manager;\n const position = dragOperation.position.current;\n if (targetParent == null) {\n if (target.id in items) {\n const insertionIndex = target.shape && position.y > target.shape.center.y ? items[target.id].length : 0;\n targetParent = target.id;\n targetIndex = insertionIndex;\n }\n }\n if (sourceParent == null || targetParent == null) {\n return items;\n }\n if (sourceParent === targetParent) {\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: mutation(items[sourceParent], sourceIndex, targetIndex)\n });\n }\n const isBelowTarget = target.shape && position.y > target.shape.boundingRectangle.bottom;\n const modifier = isBelowTarget ? 1 : 0;\n const sourceItem = items[sourceParent][sourceIndex];\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: [\n ...items[sourceParent].slice(0, sourceIndex),\n ...items[sourceParent].slice(sourceIndex + 1)\n ],\n [targetParent]: [\n ...items[targetParent].slice(0, targetIndex + modifier),\n sourceItem,\n ...items[targetParent].slice(targetIndex + modifier)\n ]\n });\n}\nfunction move(items, source, target) {\n return mutate(items, source, target, arrayMove);\n}\nfunction swap(items, source, target) {\n return mutate(items, source, target, arraySwap);\n}\nexport {\n arrayMove,\n arraySwap,\n move,\n swap\n};\n"]}
|
package/sortable.d.cts
CHANGED
|
@@ -52,6 +52,7 @@ declare class Sortable<T extends Data = Data> {
|
|
|
52
52
|
accessor index: number;
|
|
53
53
|
previousIndex: number;
|
|
54
54
|
initialIndex: number;
|
|
55
|
+
initialGroup: UniqueIdentifier | undefined;
|
|
55
56
|
accessor group: UniqueIdentifier | undefined;
|
|
56
57
|
transition: SortableTransition | null;
|
|
57
58
|
constructor({ effects: inputEffects, group, index, sensors, type, transition, plugins, ...input }: SortableInput<T>, manager: DragDropManager<any, any> | undefined);
|
package/sortable.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ declare class Sortable<T extends Data = Data> {
|
|
|
52
52
|
accessor index: number;
|
|
53
53
|
previousIndex: number;
|
|
54
54
|
initialIndex: number;
|
|
55
|
+
initialGroup: UniqueIdentifier | undefined;
|
|
55
56
|
accessor group: UniqueIdentifier | undefined;
|
|
56
57
|
transition: SortableTransition | null;
|
|
57
58
|
constructor({ effects: inputEffects, group, index, sensors, type, transition, plugins, ...input }: SortableInput<T>, manager: DragDropManager<any, any> | undefined);
|
package/sortable.js
CHANGED
|
@@ -219,6 +219,25 @@ function getDirection(delta) {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
// ../helpers/dist/index.js
|
|
222
|
+
var __defProp2 = Object.defineProperty;
|
|
223
|
+
var __defProps2 = Object.defineProperties;
|
|
224
|
+
var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
|
|
225
|
+
var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
|
|
226
|
+
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
|
|
227
|
+
var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
|
|
228
|
+
var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
229
|
+
var __spreadValues2 = (a, b) => {
|
|
230
|
+
for (var prop in b || (b = {}))
|
|
231
|
+
if (__hasOwnProp2.call(b, prop))
|
|
232
|
+
__defNormalProp2(a, prop, b[prop]);
|
|
233
|
+
if (__getOwnPropSymbols2)
|
|
234
|
+
for (var prop of __getOwnPropSymbols2(b)) {
|
|
235
|
+
if (__propIsEnum2.call(b, prop))
|
|
236
|
+
__defNormalProp2(a, prop, b[prop]);
|
|
237
|
+
}
|
|
238
|
+
return a;
|
|
239
|
+
};
|
|
240
|
+
var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b));
|
|
222
241
|
function arrayMove(array, from, to) {
|
|
223
242
|
if (from === to) {
|
|
224
243
|
return array;
|
|
@@ -227,26 +246,110 @@ function arrayMove(array, from, to) {
|
|
|
227
246
|
newArray.splice(to, 0, newArray.splice(from, 1)[0]);
|
|
228
247
|
return newArray;
|
|
229
248
|
}
|
|
249
|
+
function mutate(items, source, target, mutation) {
|
|
250
|
+
if (!source || !target) {
|
|
251
|
+
return items;
|
|
252
|
+
}
|
|
253
|
+
const findIndex = (item, id) => item === id || typeof item === "object" && "id" in item && item.id === id;
|
|
254
|
+
if (Array.isArray(items)) {
|
|
255
|
+
const sourceIndex2 = items.findIndex((item) => findIndex(item, source.id));
|
|
256
|
+
const targetIndex2 = items.findIndex((item) => findIndex(item, target.id));
|
|
257
|
+
if (sourceIndex2 === -1 || targetIndex2 === -1) {
|
|
258
|
+
return items;
|
|
259
|
+
}
|
|
260
|
+
if (source.manager) {
|
|
261
|
+
const { dragOperation: dragOperation2 } = source.manager;
|
|
262
|
+
if (!dragOperation2.canceled && "index" in source && typeof source.index === "number") {
|
|
263
|
+
const projectedSourceIndex = source.index;
|
|
264
|
+
if (projectedSourceIndex !== sourceIndex2) {
|
|
265
|
+
return mutation(items, sourceIndex2, projectedSourceIndex);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return mutation(items, sourceIndex2, targetIndex2);
|
|
270
|
+
}
|
|
271
|
+
if (source.id === target.id) {
|
|
272
|
+
return items;
|
|
273
|
+
}
|
|
274
|
+
const entries = Object.entries(items);
|
|
275
|
+
let sourceIndex = -1;
|
|
276
|
+
let sourceParent;
|
|
277
|
+
let targetIndex = -1;
|
|
278
|
+
let targetParent;
|
|
279
|
+
for (const [id, children] of entries) {
|
|
280
|
+
if (sourceIndex === -1) {
|
|
281
|
+
sourceIndex = children.findIndex((item) => findIndex(item, source.id));
|
|
282
|
+
if (sourceIndex !== -1) {
|
|
283
|
+
sourceParent = id;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (targetIndex === -1) {
|
|
287
|
+
targetIndex = children.findIndex((item) => findIndex(item, target.id));
|
|
288
|
+
if (targetIndex !== -1) {
|
|
289
|
+
targetParent = id;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
if (sourceIndex !== -1 && targetIndex !== -1) {
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (!source.manager) return items;
|
|
297
|
+
const { dragOperation } = source.manager;
|
|
298
|
+
const position = dragOperation.position.current;
|
|
299
|
+
if (targetParent == null) {
|
|
300
|
+
if (target.id in items) {
|
|
301
|
+
const insertionIndex = target.shape && position.y > target.shape.center.y ? items[target.id].length : 0;
|
|
302
|
+
targetParent = target.id;
|
|
303
|
+
targetIndex = insertionIndex;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (sourceParent == null || targetParent == null) {
|
|
307
|
+
return items;
|
|
308
|
+
}
|
|
309
|
+
if (sourceParent === targetParent) {
|
|
310
|
+
return __spreadProps2(__spreadValues2({}, items), {
|
|
311
|
+
[sourceParent]: mutation(items[sourceParent], sourceIndex, targetIndex)
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
const isBelowTarget = target.shape && position.y > target.shape.boundingRectangle.bottom;
|
|
315
|
+
const modifier = isBelowTarget ? 1 : 0;
|
|
316
|
+
const sourceItem = items[sourceParent][sourceIndex];
|
|
317
|
+
return __spreadProps2(__spreadValues2({}, items), {
|
|
318
|
+
[sourceParent]: [
|
|
319
|
+
...items[sourceParent].slice(0, sourceIndex),
|
|
320
|
+
...items[sourceParent].slice(sourceIndex + 1)
|
|
321
|
+
],
|
|
322
|
+
[targetParent]: [
|
|
323
|
+
...items[targetParent].slice(0, targetIndex + modifier),
|
|
324
|
+
sourceItem,
|
|
325
|
+
...items[targetParent].slice(targetIndex + modifier)
|
|
326
|
+
]
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
function move(items, source, target) {
|
|
330
|
+
return mutate(items, source, target, arrayMove);
|
|
331
|
+
}
|
|
332
|
+
var defaultGroup = "__default__";
|
|
230
333
|
var OptimisticSortingPlugin = class extends Plugin {
|
|
231
334
|
constructor(manager) {
|
|
232
335
|
super(manager);
|
|
233
|
-
const getSortableInstances = (
|
|
234
|
-
var _a;
|
|
336
|
+
const getSortableInstances = () => {
|
|
235
337
|
const sortableInstances = /* @__PURE__ */ new Map();
|
|
236
338
|
for (const droppable of manager.registry.droppables) {
|
|
237
339
|
if (droppable instanceof SortableDroppable) {
|
|
238
340
|
const { sortable } = droppable;
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
`Duplicate sortable index found for same sortable group: ${sortable.droppable.id} and ${(_a = sortableInstances.get(sortable.index)) == null ? void 0 : _a.droppable.id} have the same index (${sortable.index}). Make sure each sortable item has a unique index. Use the \`group\` attribute to separate sortables into different groups.`
|
|
245
|
-
);
|
|
341
|
+
const { group } = sortable;
|
|
342
|
+
let instances = sortableInstances.get(group);
|
|
343
|
+
if (!instances) {
|
|
344
|
+
instances = /* @__PURE__ */ new Set();
|
|
345
|
+
sortableInstances.set(group, instances);
|
|
246
346
|
}
|
|
247
|
-
|
|
347
|
+
instances.add(sortable);
|
|
248
348
|
}
|
|
249
349
|
}
|
|
350
|
+
for (const [group, instances] of sortableInstances) {
|
|
351
|
+
sortableInstances.set(group, new Set(sort(instances)));
|
|
352
|
+
}
|
|
250
353
|
return sortableInstances;
|
|
251
354
|
};
|
|
252
355
|
const unsubscribe = [
|
|
@@ -263,37 +366,51 @@ var OptimisticSortingPlugin = class extends Plugin {
|
|
|
263
366
|
if (source.sortable === target.sortable) {
|
|
264
367
|
return;
|
|
265
368
|
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
const
|
|
369
|
+
const instances = getSortableInstances();
|
|
370
|
+
const sameGroup = source.sortable.group === target.sortable.group;
|
|
371
|
+
const sourceInstances = instances.get(source.sortable.group);
|
|
372
|
+
const targetInstances = sameGroup ? sourceInstances : instances.get(target.sortable.group);
|
|
373
|
+
if (!sourceInstances || !targetInstances) return;
|
|
270
374
|
manager2.renderer.rendering.then(() => {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
375
|
+
var _a, _b;
|
|
376
|
+
for (const [group, sortableInstances] of instances.entries()) {
|
|
377
|
+
const entries = Array.from(sortableInstances).entries();
|
|
378
|
+
for (const [index, sortable] of entries) {
|
|
379
|
+
if (sortable.index !== index || sortable.group !== group) {
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
274
382
|
}
|
|
275
383
|
}
|
|
276
|
-
const orderedSortables = Array.from(
|
|
277
|
-
sortableInstances.values()
|
|
278
|
-
).sort((a, b) => a.index - b.index);
|
|
279
|
-
const sourceIndex = orderedSortables.indexOf(source.sortable);
|
|
280
|
-
const targetIndex = orderedSortables.indexOf(target.sortable);
|
|
281
|
-
const newOrder = arrayMove(
|
|
282
|
-
orderedSortables,
|
|
283
|
-
sourceIndex,
|
|
284
|
-
targetIndex
|
|
285
|
-
);
|
|
286
384
|
const sourceElement = source.sortable.element;
|
|
287
385
|
const targetElement = target.sortable.element;
|
|
288
386
|
if (!targetElement || !sourceElement) {
|
|
289
387
|
return;
|
|
290
388
|
}
|
|
389
|
+
const orderedSourceSortables = sort(sourceInstances);
|
|
390
|
+
const orderedTargetSortables = sameGroup ? orderedSourceSortables : sort(targetInstances);
|
|
391
|
+
const sourceGroup = (_a = source.sortable.group) != null ? _a : defaultGroup;
|
|
392
|
+
const targetGroup = (_b = target.sortable.group) != null ? _b : defaultGroup;
|
|
393
|
+
const state = {
|
|
394
|
+
[sourceGroup]: orderedSourceSortables,
|
|
395
|
+
[targetGroup]: orderedTargetSortables
|
|
396
|
+
};
|
|
397
|
+
const newState = move(state, source, target);
|
|
398
|
+
const sourceIndex = newState[targetGroup].indexOf(source.sortable);
|
|
399
|
+
const targetIndex = newState[targetGroup].indexOf(target.sortable);
|
|
291
400
|
reorder(sourceElement, sourceIndex, targetElement, targetIndex);
|
|
401
|
+
manager2.collisionObserver.disable();
|
|
292
402
|
batch(() => {
|
|
293
|
-
for (const [index, sortable] of
|
|
403
|
+
for (const [index, sortable] of newState[sourceGroup].entries()) {
|
|
294
404
|
sortable.index = index;
|
|
295
405
|
}
|
|
406
|
+
if (!sameGroup) {
|
|
407
|
+
for (const [index, sortable] of newState[targetGroup].entries()) {
|
|
408
|
+
sortable.group = target.sortable.group;
|
|
409
|
+
sortable.index = index;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
296
412
|
});
|
|
413
|
+
manager2.actions.setDropTarget(source.id).then(() => manager2.collisionObserver.enable());
|
|
297
414
|
});
|
|
298
415
|
});
|
|
299
416
|
}),
|
|
@@ -306,35 +423,44 @@ var OptimisticSortingPlugin = class extends Plugin {
|
|
|
306
423
|
if (!isSortable(source)) {
|
|
307
424
|
return;
|
|
308
425
|
}
|
|
309
|
-
if (source.sortable.initialIndex === source.sortable.index) {
|
|
426
|
+
if (source.sortable.initialIndex === source.sortable.index && source.sortable.initialGroup === source.sortable.group) {
|
|
310
427
|
return;
|
|
311
428
|
}
|
|
312
429
|
queueMicrotask(() => {
|
|
313
|
-
const
|
|
430
|
+
const instances = getSortableInstances();
|
|
431
|
+
const initialGroupInstances = instances.get(
|
|
432
|
+
source.sortable.initialGroup
|
|
433
|
+
);
|
|
434
|
+
if (!initialGroupInstances) return;
|
|
314
435
|
manager2.renderer.rendering.then(() => {
|
|
315
436
|
var _a;
|
|
316
|
-
for (const [
|
|
317
|
-
|
|
318
|
-
|
|
437
|
+
for (const [group, sortableInstances] of instances.entries()) {
|
|
438
|
+
const entries = Array.from(sortableInstances).entries();
|
|
439
|
+
for (const [index, sortable] of entries) {
|
|
440
|
+
if (sortable.index !== index || sortable.group !== group) {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
319
443
|
}
|
|
320
444
|
}
|
|
321
|
-
const
|
|
322
|
-
sortableInstances.values()
|
|
323
|
-
).sort((a, b) => a.index - b.index);
|
|
445
|
+
const initialGroup = sort(initialGroupInstances);
|
|
324
446
|
const sourceElement = source.sortable.element;
|
|
325
|
-
const targetElement = (_a =
|
|
447
|
+
const targetElement = (_a = initialGroup[source.sortable.initialIndex]) == null ? void 0 : _a.element;
|
|
326
448
|
if (!targetElement || !sourceElement) {
|
|
327
449
|
return;
|
|
328
450
|
}
|
|
329
451
|
reorder(
|
|
330
452
|
sourceElement,
|
|
331
|
-
source.sortable.
|
|
453
|
+
source.sortable.initialIndex,
|
|
332
454
|
targetElement,
|
|
333
455
|
source.sortable.initialIndex
|
|
334
456
|
);
|
|
335
457
|
batch(() => {
|
|
336
|
-
for (const
|
|
337
|
-
|
|
458
|
+
for (const [_, sortableInstances] of instances.entries()) {
|
|
459
|
+
const entries = Array.from(sortableInstances).values();
|
|
460
|
+
for (const sortable of entries) {
|
|
461
|
+
sortable.index = sortable.initialIndex;
|
|
462
|
+
sortable.group = sortable.initialGroup;
|
|
463
|
+
}
|
|
338
464
|
}
|
|
339
465
|
});
|
|
340
466
|
});
|
|
@@ -349,9 +475,15 @@ var OptimisticSortingPlugin = class extends Plugin {
|
|
|
349
475
|
}
|
|
350
476
|
};
|
|
351
477
|
function reorder(sourceElement, sourceIndex, targetElement, targetIndex) {
|
|
352
|
-
const position = targetIndex < sourceIndex ? "
|
|
478
|
+
const position = targetIndex < sourceIndex ? "afterend" : "beforebegin";
|
|
353
479
|
targetElement.insertAdjacentElement(position, sourceElement);
|
|
354
480
|
}
|
|
481
|
+
function sortByIndex(a, b) {
|
|
482
|
+
return a.index - b.index;
|
|
483
|
+
}
|
|
484
|
+
function sort(instances) {
|
|
485
|
+
return Array.from(instances).sort(sortByIndex);
|
|
486
|
+
}
|
|
355
487
|
|
|
356
488
|
// src/sortable/sortable.ts
|
|
357
489
|
var defaultPlugins = [
|
|
@@ -396,6 +528,7 @@ var Sortable2 = class {
|
|
|
396
528
|
var _a2;
|
|
397
529
|
return (_a2 = this.manager) == null ? void 0 : _a2.monitor.addEventListener("dragstart", () => {
|
|
398
530
|
this.initialIndex = this.index;
|
|
531
|
+
this.initialGroup = this.group;
|
|
399
532
|
this.previousIndex = this.index;
|
|
400
533
|
});
|
|
401
534
|
},
|
package/sortable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/sortable/sortable.ts","src/sortable/SortableKeyboardPlugin.ts","src/sortable/utilities.ts","src/sortable/OptimisticSortingPlugin.ts","../helpers/dist/index.js"],"names":["batch","manager","id","source","target","Plugin","Sortable","_a","index","group"],"mappings":"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","sourcesContent":["import {batch, reactive, untracked} from '@dnd-kit/state';\nimport type {CollisionPriority} from '@dnd-kit/abstract';\nimport type {\n Data,\n PluginConstructor,\n Type,\n UniqueIdentifier,\n} from '@dnd-kit/abstract';\nimport {\n defaultCollisionDetection,\n type CollisionDetector,\n} from '@dnd-kit/collision';\nimport {Draggable, Droppable} from '@dnd-kit/dom';\nimport type {\n DraggableInput,\n FeedbackType,\n DroppableInput,\n Sensors,\n DragDropManager,\n} from '@dnd-kit/dom';\nimport {\n animateTransform,\n getComputedStyles,\n computeTranslate,\n ProxiedElements,\n} from '@dnd-kit/dom/utilities';\n\nimport {SortableKeyboardPlugin} from './SortableKeyboardPlugin.ts';\nimport {OptimisticSortingPlugin} from './OptimisticSortingPlugin.ts';\n\nexport interface SortableTransition {\n /**\n * The duration of the transition in milliseconds.\n * @default 300\n */\n duration?: number;\n /**\n * The easing function to use for the transition.\n * @default 'cubic-bezier(0.25, 1, 0.5, 1)'\n */\n easing?: string;\n /**\n * Whether the sortable item should transition when its index changes,\n * but there is no drag operation in progress.\n * @default false\n **/\n idle?: boolean;\n}\n\nconst defaultPlugins: PluginConstructor[] = [\n SortableKeyboardPlugin,\n OptimisticSortingPlugin,\n];\n\nexport interface SortableInput<T extends Data>\n extends DraggableInput<T>,\n DroppableInput<T> {\n /**\n * The index of the sortable item within its group.\n */\n index: number;\n\n /**\n * The element that should be used as the droppable target for this sortable item.\n */\n target?: Element;\n\n /**\n * The optional unique identifier of the group that the sortable item belongs to.\n */\n group?: UniqueIdentifier;\n /**\n * The transition configuration to use when the index of the sortable item changes.\n */\n transition?: SortableTransition | null;\n /**\n * Plugins to register when sortable item is instantiated.\n * @default [SortableKeyboardPlugin, OptimisticSortingPlugin]\n */\n plugins?: PluginConstructor[];\n}\n\nexport const defaultSortableTransition: SortableTransition = {\n duration: 250,\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n idle: false,\n};\n\nexport class Sortable<T extends Data = Data> {\n public draggable: Draggable<T>;\n public droppable: Droppable<T>;\n\n @reactive\n public accessor index: number;\n\n previousIndex: number;\n\n initialIndex: number;\n\n @reactive\n public accessor group: UniqueIdentifier | undefined;\n\n transition: SortableTransition | null;\n\n constructor(\n {\n effects: inputEffects = () => [],\n group,\n index,\n sensors,\n type,\n transition = defaultSortableTransition,\n plugins = defaultPlugins,\n ...input\n }: SortableInput<T>,\n manager: DragDropManager<any, any> | undefined\n ) {\n let previousGroup = group;\n\n this.droppable = new SortableDroppable<T>(input, manager, this);\n this.draggable = new SortableDraggable<T>(\n {\n ...input,\n effects: () => [\n () =>\n this.manager?.monitor.addEventListener('dragstart', () => {\n this.initialIndex = this.index;\n this.previousIndex = this.index;\n }),\n () => {\n const {index, group, previousIndex, manager: _} = this;\n\n if (group !== previousGroup) {\n previousGroup = group;\n this.previousIndex = index;\n return;\n }\n\n // Re-run this effect whenever the index changes\n if (index === previousIndex) {\n return;\n }\n\n this.previousIndex = index;\n\n this.animate();\n },\n () => {\n const {target} = this;\n const {feedback, isDragSource} = this.draggable;\n\n if (feedback == 'move' && isDragSource) {\n this.droppable.disabled = !target;\n }\n },\n () => {\n const {manager} = this;\n\n for (const plugin of plugins) {\n manager?.registry.register(plugin);\n }\n },\n ...inputEffects(),\n ],\n type,\n sensors,\n },\n manager,\n this\n );\n\n this.manager = manager;\n this.index = index;\n this.previousIndex = index;\n this.initialIndex = index;\n this.group = group;\n this.type = type;\n this.transition = transition;\n }\n\n protected animate() {\n untracked(() => {\n const {manager, transition} = this;\n const {shape} = this.droppable;\n\n if (!manager) return;\n\n const {idle} = manager.dragOperation.status;\n\n if (!shape || !transition || (idle && !transition.idle)) {\n return;\n }\n\n manager.renderer.rendering.then(() => {\n const {element} = this;\n\n if (!element) {\n return;\n }\n\n const updatedShape = this.refreshShape();\n\n if (!updatedShape) {\n return;\n }\n\n queueMicrotask(() => {\n const delta = {\n x:\n shape.boundingRectangle.left -\n updatedShape.boundingRectangle.left,\n y: shape.boundingRectangle.top - updatedShape.boundingRectangle.top,\n };\n\n const {translate} = getComputedStyles(element);\n const currentTranslate = computeTranslate(element, translate, false);\n const finalTranslate = computeTranslate(element, translate);\n\n if (delta.x || delta.y) {\n animateTransform({\n element,\n keyframes: {\n translate: [\n `${currentTranslate.x + delta.x}px ${currentTranslate.y + delta.y}px ${currentTranslate.z}`,\n `${finalTranslate.x}px ${finalTranslate.y}px ${finalTranslate.z}`,\n ],\n },\n options: transition,\n onFinish: () => {\n if (!manager.dragOperation.status.dragging) {\n this.droppable.shape = undefined;\n }\n },\n });\n }\n });\n });\n });\n }\n\n public get manager(): DragDropManager<any, any> | undefined {\n return this.draggable.manager as any;\n }\n\n public set manager(manager: DragDropManager<any, any> | undefined) {\n batch(() => {\n this.draggable.manager = manager as any;\n this.droppable.manager = manager as any;\n });\n }\n\n #element: Element | undefined;\n\n public set element(element: Element | undefined) {\n batch(() => {\n const previousElement = this.#element;\n const droppableElement = this.droppable.element;\n const draggableElement = this.draggable.element;\n\n if (!droppableElement || droppableElement === previousElement) {\n this.droppable.element = element;\n }\n\n if (!draggableElement || draggableElement === previousElement) {\n this.draggable.element = element;\n }\n\n this.#element = element;\n });\n }\n\n public get element() {\n const element = this.#element;\n\n if (!element) return;\n\n return ProxiedElements.get(element) ?? element ?? this.droppable.element;\n }\n\n public set target(target: Element | undefined) {\n this.droppable.element = target;\n }\n\n public get target() {\n return this.droppable.element;\n }\n\n public set source(source: Element | undefined) {\n this.draggable.element = source;\n }\n\n public get source() {\n return this.draggable.element;\n }\n\n public get disabled() {\n return this.draggable.disabled && this.droppable.disabled;\n }\n\n public set feedback(value: FeedbackType) {\n this.draggable.feedback = value;\n }\n\n public set disabled(value: boolean) {\n batch(() => {\n this.droppable.disabled = value;\n this.draggable.disabled = value;\n });\n }\n\n public set data(data: T) {\n batch(() => {\n this.droppable.data = data;\n this.draggable.data = data;\n });\n }\n\n public set handle(handle: Element | undefined) {\n this.draggable.handle = handle;\n }\n\n public set id(id: UniqueIdentifier) {\n batch(() => {\n this.droppable.id = id;\n this.draggable.id = id;\n });\n }\n\n public get id() {\n return this.droppable.id;\n }\n\n public set sensors(value: Sensors | undefined) {\n this.draggable.sensors = value;\n }\n\n public set collisionPriority(value: CollisionPriority | number | undefined) {\n this.droppable.collisionPriority = value;\n }\n\n public set collisionDetector(value: CollisionDetector | undefined) {\n this.droppable.collisionDetector = value ?? defaultCollisionDetection;\n }\n\n public set type(type: Type | undefined) {\n batch(() => {\n this.droppable.type = type;\n this.draggable.type = type;\n });\n }\n\n public get type() {\n return this.draggable.type;\n }\n\n public set accept(value: Droppable['accept']) {\n this.droppable.accept = value;\n }\n\n public get accept() {\n return this.droppable.accept;\n }\n\n public get isDropTarget() {\n return this.droppable.isDropTarget;\n }\n\n /**\n * A boolean indicating whether the sortable item is the source of a drag operation.\n */\n public get isDragSource() {\n return this.draggable.isDragSource;\n }\n\n public get status() {\n return this.draggable.status;\n }\n\n public refreshShape() {\n return this.droppable.refreshShape();\n }\n\n public accepts(draggable: Draggable): boolean {\n return this.droppable.accepts(draggable);\n }\n\n public register() {\n batch(() => {\n this.manager?.registry.register(this.droppable);\n this.manager?.registry.register(this.draggable);\n });\n\n return () => this.unregister();\n }\n\n public unregister() {\n batch(() => {\n this.manager?.registry.unregister(this.droppable);\n this.manager?.registry.unregister(this.draggable);\n });\n }\n\n public destroy() {\n batch(() => {\n this.droppable.destroy();\n this.draggable.destroy();\n });\n }\n}\n\nexport class SortableDraggable<T extends Data> extends Draggable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n\nexport class SortableDroppable<T extends Data> extends Droppable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n","import {batch, CleanupFunction, effect} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {closestCorners} from '@dnd-kit/collision';\nimport {\n DOMRectangle,\n getVisibleBoundingRectangle,\n isKeyboardEvent,\n scheduler,\n scrollIntoViewIfNeeded,\n} from '@dnd-kit/dom/utilities';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport {Scroller} from '@dnd-kit/dom';\nimport type {DragDropManager, Droppable} from '@dnd-kit/dom';\n\nimport {isSortable} from './utilities.ts';\n\nconst TOLERANCE = 10;\n\nexport class SortableKeyboardPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const cleanupEffect = effect(() => {\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (dragOperation.status.initialized) {\n const scroller = manager.registry.plugins.get(Scroller);\n\n if (scroller) {\n scroller.disable();\n\n return () => scroller.enable();\n }\n }\n });\n\n const unsubscribe = manager.monitor.addEventListener(\n 'dragmove',\n (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (!dragOperation.shape) {\n return;\n }\n\n const {actions, collisionObserver, registry} = manager;\n const {by} = event;\n\n if (!by) {\n return;\n }\n\n const direction = getDirection(by);\n const {source, target} = dragOperation;\n const {center} = dragOperation.shape.current;\n const potentialTargets: Droppable[] = [];\n const cleanup: CleanupFunction[] = [];\n\n batch(() => {\n for (const droppable of registry.droppables) {\n const {id} = droppable;\n\n if (\n !droppable.accepts(source) ||\n (id === target?.id && isSortable(droppable)) ||\n !droppable.element\n ) {\n continue;\n }\n\n let previousShape = droppable.shape;\n const shape = new DOMRectangle(droppable.element, {\n getBoundingClientRect: (element) =>\n getVisibleBoundingRectangle(element, undefined, 0.2),\n });\n\n if (!shape.height || !shape.width) continue;\n\n if (\n (direction == 'down' &&\n center.y + TOLERANCE < shape.center.y) ||\n (direction == 'up' && center.y - TOLERANCE > shape.center.y) ||\n (direction == 'left' &&\n center.x - TOLERANCE > shape.center.x) ||\n (direction == 'right' && center.x + TOLERANCE < shape.center.x)\n ) {\n potentialTargets.push(droppable);\n droppable.shape = shape;\n cleanup.push(() => (droppable.shape = previousShape));\n }\n }\n });\n\n event.preventDefault();\n collisionObserver.disable();\n\n const collisions = collisionObserver.computeCollisions(\n potentialTargets,\n closestCorners\n );\n batch(() => cleanup.forEach((clean) => clean()));\n\n const [firstCollision] = collisions;\n\n if (!firstCollision) {\n return;\n }\n\n const {id} = firstCollision;\n const {index, group} = source.sortable;\n\n actions.setDropTarget(id).then((defaultPrevented) => {\n if (defaultPrevented) return;\n\n // Wait until optimistic sorting has a chance to update the DOM\n const {source, target} = dragOperation;\n\n if (!source || !isSortable(source)) {\n return;\n }\n\n const {\n index: newIndex,\n group: newGroup,\n target: targetElement,\n } = source.sortable;\n const updated = index !== newIndex || group !== newGroup;\n const element = updated ? targetElement : target?.element;\n\n if (!element) return;\n\n scrollIntoViewIfNeeded(element);\n const shape = new DOMRectangle(element);\n\n if (!shape) {\n return;\n }\n\n actions.move({\n to: {\n x: shape.center.x,\n y: shape.center.y,\n },\n });\n\n if (updated) {\n actions\n .setDropTarget(source.id)\n .then(() => collisionObserver.enable());\n } else {\n collisionObserver.enable();\n }\n });\n });\n }\n );\n\n this.destroy = () => {\n unsubscribe();\n cleanupEffect();\n };\n }\n}\n\nfunction getDirection(delta: Coordinates) {\n const {x, y} = delta;\n\n if (x > 0) {\n return 'right';\n } else if (x < 0) {\n return 'left';\n } else if (y > 0) {\n return 'down';\n } else if (y < 0) {\n return 'up';\n }\n}\n","import type {Droppable, Draggable} from '@dnd-kit/dom';\n\nimport {SortableDroppable, SortableDraggable} from './sortable.ts';\n\nexport function isSortable(\n element: Draggable | Droppable | null\n): element is SortableDroppable<any> | SortableDraggable<any> {\n return (\n element instanceof SortableDroppable || element instanceof SortableDraggable\n );\n}\n","import {Plugin, UniqueIdentifier} from '@dnd-kit/abstract';\nimport type {DragDropManager} from '@dnd-kit/dom';\nimport {arrayMove} from '@dnd-kit/helpers';\n\nimport {isSortable} from './utilities.ts';\nimport {Sortable, SortableDroppable} from './sortable.ts';\nimport {batch} from '@dnd-kit/state';\n\nexport class OptimisticSortingPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const getSortableInstances = (group: UniqueIdentifier | undefined) => {\n const sortableInstances = new Map<number, Sortable>();\n\n for (const droppable of manager.registry.droppables) {\n if (droppable instanceof SortableDroppable) {\n const {sortable} = droppable;\n\n if (sortable.group !== group) {\n continue;\n }\n\n if (sortableInstances.has(sortable.index)) {\n throw new Error(\n `Duplicate sortable index found for same sortable group: ${sortable.droppable.id} and ${sortableInstances.get(sortable.index)?.droppable.id} have the same index (${sortable.index}). Make sure each sortable item has a unique index. Use the \\`group\\` attribute to separate sortables into different groups.`\n );\n }\n\n sortableInstances.set(sortable.index, sortable);\n }\n }\n\n return sortableInstances;\n };\n\n const unsubscribe = [\n manager.monitor.addEventListener('dragover', (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source, target} = dragOperation;\n\n if (!isSortable(source) || !isSortable(target)) {\n return;\n }\n\n if (source.sortable === target.sortable) {\n return;\n }\n\n if (source.sortable.group !== target.sortable.group) {\n return;\n }\n\n const sortableInstances = getSortableInstances(source.sortable.group);\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [index, sortable] of sortableInstances.entries()) {\n if (sortable.index !== index) {\n // At least one index was changed so we should abort optimistic updates\n return;\n }\n }\n\n const orderedSortables = Array.from(\n sortableInstances.values()\n ).sort((a, b) => a.index - b.index);\n\n const sourceIndex = orderedSortables.indexOf(source.sortable);\n const targetIndex = orderedSortables.indexOf(target.sortable);\n\n const newOrder = arrayMove(\n orderedSortables,\n sourceIndex,\n targetIndex\n );\n\n const sourceElement = source.sortable.element;\n const targetElement = target.sortable.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n reorder(sourceElement, sourceIndex, targetElement, targetIndex);\n\n batch(() => {\n for (const [index, sortable] of newOrder.entries()) {\n sortable.index = index;\n }\n });\n });\n });\n }),\n manager.monitor.addEventListener('dragend', (event, manager) => {\n if (!event.canceled) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source} = dragOperation;\n\n if (!isSortable(source)) {\n return;\n }\n\n if (source.sortable.initialIndex === source.sortable.index) {\n return;\n }\n\n queueMicrotask(() => {\n const sortableInstances = getSortableInstances(source.sortable.group);\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [index, sortable] of sortableInstances.entries()) {\n if (sortable.index !== index) {\n // At least one index was changed so we should abort optimistic updates\n return;\n }\n }\n\n const orderedSortables = Array.from(\n sortableInstances.values()\n ).sort((a, b) => a.index - b.index);\n\n const sourceElement = source.sortable.element;\n const targetElement =\n orderedSortables[source.sortable.initialIndex]?.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n reorder(\n sourceElement,\n source.sortable.index,\n targetElement,\n source.sortable.initialIndex\n );\n\n batch(() => {\n for (const sortable of orderedSortables.values()) {\n sortable.index = sortable.initialIndex;\n }\n });\n });\n });\n }),\n ];\n\n this.destroy = () => {\n for (const unsubscribeListener of unsubscribe) {\n unsubscribeListener();\n }\n };\n }\n}\n\nfunction reorder(\n sourceElement: Element,\n sourceIndex: number,\n targetElement: Element,\n targetIndex: number\n) {\n const position = targetIndex < sourceIndex ? 'beforebegin' : 'afterend';\n\n targetElement.insertAdjacentElement(position, sourceElement);\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/move.ts\nfunction arrayMove(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n newArray.splice(to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\nfunction arraySwap(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n const item = newArray[from];\n newArray[from] = newArray[to];\n newArray[to] = item;\n return newArray;\n}\nfunction mutate(items, source, target, mutation) {\n if (!source || !target) {\n return items;\n }\n const findIndex = (item, id) => item === id || typeof item === \"object\" && \"id\" in item && item.id === id;\n if (Array.isArray(items)) {\n const sourceIndex2 = items.findIndex((item) => findIndex(item, source.id));\n const targetIndex2 = items.findIndex((item) => findIndex(item, target.id));\n if (sourceIndex2 === -1 || targetIndex2 === -1) {\n return items;\n }\n if (source.manager) {\n const { dragOperation: dragOperation2 } = source.manager;\n if (!dragOperation2.canceled && \"index\" in source && typeof source.index === \"number\") {\n const projectedSourceIndex = source.index;\n if (projectedSourceIndex !== sourceIndex2) {\n return mutation(items, sourceIndex2, projectedSourceIndex);\n }\n }\n }\n return mutation(items, sourceIndex2, targetIndex2);\n }\n if (source.id === target.id) {\n return items;\n }\n const entries = Object.entries(items);\n let sourceIndex = -1;\n let sourceParent;\n let targetIndex = -1;\n let targetParent;\n for (const [id, children] of entries) {\n if (sourceIndex === -1) {\n sourceIndex = children.findIndex((item) => findIndex(item, source.id));\n if (sourceIndex !== -1) {\n sourceParent = id;\n }\n }\n if (targetIndex === -1) {\n targetIndex = children.findIndex((item) => findIndex(item, target.id));\n if (targetIndex !== -1) {\n targetParent = id;\n }\n }\n if (sourceIndex !== -1 && targetIndex !== -1) {\n break;\n }\n }\n if (!source.manager) return items;\n const { dragOperation } = source.manager;\n const position = dragOperation.position.current;\n if (targetParent == null) {\n if (target.id in items) {\n const insertionIndex = target.shape && position.y > target.shape.center.y ? items[target.id].length : 0;\n targetParent = target.id;\n targetIndex = insertionIndex;\n }\n }\n if (sourceParent == null || targetParent == null) {\n return items;\n }\n if (sourceParent === targetParent) {\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: mutation(items[sourceParent], sourceIndex, targetIndex)\n });\n }\n const isBelowTarget = target.shape && position.y > target.shape.boundingRectangle.bottom;\n const modifier = isBelowTarget ? 1 : 0;\n const sourceItem = items[sourceParent][sourceIndex];\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: [\n ...items[sourceParent].slice(0, sourceIndex),\n ...items[sourceParent].slice(sourceIndex + 1)\n ],\n [targetParent]: [\n ...items[targetParent].slice(0, targetIndex + modifier),\n sourceItem,\n ...items[targetParent].slice(targetIndex + modifier)\n ]\n });\n}\nfunction move(items, source, target) {\n return mutate(items, source, target, arrayMove);\n}\nfunction swap(items, source, target) {\n return mutate(items, source, target, arraySwap);\n}\nexport {\n arrayMove,\n arraySwap,\n move,\n swap\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["src/sortable/sortable.ts","src/sortable/SortableKeyboardPlugin.ts","src/sortable/utilities.ts","src/sortable/OptimisticSortingPlugin.ts","../helpers/dist/index.js"],"names":["batch","manager","id","source","target","Plugin","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","Sortable","_a","index","group"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAQ,SAAAA,QAAO,UAAU,iBAAgB;AAQzC;AAAA,EACE;AAAA,OAEK;AACP,SAAQ,WAAW,iBAAgB;AAQnC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACzBP,SAAQ,OAAwB,cAAa;AAC7C,SAAQ,cAAa;AACrB,SAAQ,sBAAqB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AAGP,SAAQ,gBAAe;;;ACRhB,SAAS,WACd,SAC4D;AAC5D,SACE,mBAAmB,qBAAqB,mBAAmB;AAE/D;;;ADOA,IAAM,YAAY;AAEX,IAAM,yBAAN,cAAqC,OAAwB;AAAA,EAClE,YAAY,SAA0B;AACpC,UAAM,OAAO;AAEb,UAAM,gBAAgB,OAAO,MAAM;AACjC,YAAM,EAAC,cAAa,IAAI;AAExB,UAAI,CAAC,gBAAgB,cAAc,cAAc,GAAG;AAClD;AAAA,MACF;AAEA,UAAI,CAAC,WAAW,cAAc,MAAM,GAAG;AACrC;AAAA,MACF;AAEA,UAAI,cAAc,OAAO,aAAa;AACpC,cAAM,WAAW,QAAQ,SAAS,QAAQ,IAAI,QAAQ;AAEtD,YAAI,UAAU;AACZ,mBAAS,QAAQ;AAEjB,iBAAO,MAAM,SAAS,OAAO;AAAA,QAC/B;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,cAAc,QAAQ,QAAQ;AAAA,MAClC;AAAA,MACA,CAAC,OAAOC,aAAY;AAClB,uBAAe,MAAM;AACnB,cAAI,KAAK,YAAY,MAAM,kBAAkB;AAC3C;AAAA,UACF;AAEA,gBAAM,EAAC,cAAa,IAAIA;AAExB,cAAI,CAAC,gBAAgB,cAAc,cAAc,GAAG;AAClD;AAAA,UACF;AAEA,cAAI,CAAC,WAAW,cAAc,MAAM,GAAG;AACrC;AAAA,UACF;AAEA,cAAI,CAAC,cAAc,OAAO;AACxB;AAAA,UACF;AAEA,gBAAM,EAAC,SAAS,mBAAmB,SAAQ,IAAIA;AAC/C,gBAAM,EAAC,GAAE,IAAI;AAEb,cAAI,CAAC,IAAI;AACP;AAAA,UACF;AAEA,gBAAM,YAAY,aAAa,EAAE;AACjC,gBAAM,EAAC,QAAQ,OAAM,IAAI;AACzB,gBAAM,EAAC,OAAM,IAAI,cAAc,MAAM;AACrC,gBAAM,mBAAgC,CAAC;AACvC,gBAAM,UAA6B,CAAC;AAEpC,gBAAM,MAAM;AACV,uBAAW,aAAa,SAAS,YAAY;AAC3C,oBAAM,EAAC,IAAAC,IAAE,IAAI;AAEb,kBACE,CAAC,UAAU,QAAQ,MAAM,KACxBA,SAAO,iCAAQ,OAAM,WAAW,SAAS,KAC1C,CAAC,UAAU,SACX;AACA;AAAA,cACF;AAEA,kBAAI,gBAAgB,UAAU;AAC9B,oBAAM,QAAQ,IAAI,aAAa,UAAU,SAAS;AAAA,gBAChD,uBAAuB,CAAC,YACtB,4BAA4B,SAAS,QAAW,GAAG;AAAA,cACvD,CAAC;AAED,kBAAI,CAAC,MAAM,UAAU,CAAC,MAAM,MAAO;AAEnC,kBACG,aAAa,UACZ,OAAO,IAAI,YAAY,MAAM,OAAO,KACrC,aAAa,QAAQ,OAAO,IAAI,YAAY,MAAM,OAAO,KACzD,aAAa,UACZ,OAAO,IAAI,YAAY,MAAM,OAAO,KACrC,aAAa,WAAW,OAAO,IAAI,YAAY,MAAM,OAAO,GAC7D;AACA,iCAAiB,KAAK,SAAS;AAC/B,0BAAU,QAAQ;AAClB,wBAAQ,KAAK,MAAO,UAAU,QAAQ,aAAc;AAAA,cACtD;AAAA,YACF;AAAA,UACF,CAAC;AAED,gBAAM,eAAe;AACrB,4BAAkB,QAAQ;AAE1B,gBAAM,aAAa,kBAAkB;AAAA,YACnC;AAAA,YACA;AAAA,UACF;AACA,gBAAM,MAAM,QAAQ,QAAQ,CAAC,UAAU,MAAM,CAAC,CAAC;AAE/C,gBAAM,CAAC,cAAc,IAAI;AAEzB,cAAI,CAAC,gBAAgB;AACnB;AAAA,UACF;AAEA,gBAAM,EAAC,GAAE,IAAI;AACb,gBAAM,EAAC,OAAO,MAAK,IAAI,OAAO;AAE9B,kBAAQ,cAAc,EAAE,EAAE,KAAK,CAAC,qBAAqB;AACnD,gBAAI,iBAAkB;AAGtB,kBAAM,EAAC,QAAAC,SAAQ,QAAAC,QAAM,IAAI;AAEzB,gBAAI,CAACD,WAAU,CAAC,WAAWA,OAAM,GAAG;AAClC;AAAA,YACF;AAEA,kBAAM;AAAA,cACJ,OAAO;AAAA,cACP,OAAO;AAAA,cACP,QAAQ;AAAA,YACV,IAAIA,QAAO;AACX,kBAAM,UAAU,UAAU,YAAY,UAAU;AAChD,kBAAM,UAAU,UAAU,gBAAgBC,WAAA,gBAAAA,QAAQ;AAElD,gBAAI,CAAC,QAAS;AAEd,mCAAuB,OAAO;AAC9B,kBAAM,QAAQ,IAAI,aAAa,OAAO;AAEtC,gBAAI,CAAC,OAAO;AACV;AAAA,YACF;AAEA,oBAAQ,KAAK;AAAA,cACX,IAAI;AAAA,gBACF,GAAG,MAAM,OAAO;AAAA,gBAChB,GAAG,MAAM,OAAO;AAAA,cAClB;AAAA,YACF,CAAC;AAED,gBAAI,SAAS;AACX,sBACG,cAAcD,QAAO,EAAE,EACvB,KAAK,MAAM,kBAAkB,OAAO,CAAC;AAAA,YAC1C,OAAO;AACL,gCAAkB,OAAO;AAAA,YAC3B;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAEA,SAAK,UAAU,MAAM;AACnB,kBAAY;AACZ,oBAAc;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,aAAa,OAAoB;AACxC,QAAM,EAAC,GAAG,EAAC,IAAI;AAEf,MAAI,IAAI,GAAG;AACT,WAAO;AAAA,EACT,WAAW,IAAI,GAAG;AAChB,WAAO;AAAA,EACT,WAAW,IAAI,GAAG;AAChB,WAAO;AAAA,EACT,WAAW,IAAI,GAAG;AAChB,WAAO;AAAA,EACT;AACF;;;AEtMA,SAAQ,UAAAE,eAAoC;;;ACA5C,IAAIC,aAAY,OAAO;AACvB,IAAIC,cAAa,OAAO;AACxB,IAAIC,qBAAoB,OAAO;AAC/B,IAAIC,uBAAsB,OAAO;AACjC,IAAIC,gBAAe,OAAO,UAAU;AACpC,IAAIC,gBAAe,OAAO,UAAU;AACpC,IAAIC,mBAAkB,CAAC,KAAK,KAAK,UAAU,OAAO,MAAMN,WAAU,KAAK,KAAK,EAAE,YAAY,MAAM,cAAc,MAAM,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI,GAAG,IAAI;AAC1J,IAAIO,kBAAiB,CAAC,GAAG,MAAM;AAC7B,WAAS,QAAQ,MAAM,IAAI,CAAC;AAC1B,QAAIH,cAAa,KAAK,GAAG,IAAI;AAC3B,MAAAE,iBAAgB,GAAG,MAAM,EAAE,IAAI,CAAC;AACpC,MAAIH;AACF,aAAS,QAAQA,qBAAoB,CAAC,GAAG;AACvC,UAAIE,cAAa,KAAK,GAAG,IAAI;AAC3B,QAAAC,iBAAgB,GAAG,MAAM,EAAE,IAAI,CAAC;AAAA,IACpC;AACF,SAAO;AACT;AACA,IAAIE,iBAAgB,CAAC,GAAG,MAAMP,YAAW,GAAGC,mBAAkB,CAAC,CAAC;AAGhE,SAAS,UAAU,OAAO,MAAM,IAAI;AAClC,MAAI,SAAS,IAAI;AACf,WAAO;AAAA,EACT;AACA,QAAM,WAAW,MAAM,MAAM;AAC7B,WAAS,OAAO,IAAI,GAAG,SAAS,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;AAClD,SAAO;AACT;AAWA,SAAS,OAAO,OAAO,QAAQ,QAAQ,UAAU;AAC/C,MAAI,CAAC,UAAU,CAAC,QAAQ;AACtB,WAAO;AAAA,EACT;AACA,QAAM,YAAY,CAAC,MAAM,OAAO,SAAS,MAAM,OAAO,SAAS,YAAY,QAAQ,QAAQ,KAAK,OAAO;AACvG,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,eAAe,MAAM,UAAU,CAAC,SAAS,UAAU,MAAM,OAAO,EAAE,CAAC;AACzE,UAAM,eAAe,MAAM,UAAU,CAAC,SAAS,UAAU,MAAM,OAAO,EAAE,CAAC;AACzE,QAAI,iBAAiB,MAAM,iBAAiB,IAAI;AAC9C,aAAO;AAAA,IACT;AACA,QAAI,OAAO,SAAS;AAClB,YAAM,EAAE,eAAe,eAAe,IAAI,OAAO;AACjD,UAAI,CAAC,eAAe,YAAY,WAAW,UAAU,OAAO,OAAO,UAAU,UAAU;AACrF,cAAM,uBAAuB,OAAO;AACpC,YAAI,yBAAyB,cAAc;AACzC,iBAAO,SAAS,OAAO,cAAc,oBAAoB;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AACA,WAAO,SAAS,OAAO,cAAc,YAAY;AAAA,EACnD;AACA,MAAI,OAAO,OAAO,OAAO,IAAI;AAC3B,WAAO;AAAA,EACT;AACA,QAAM,UAAU,OAAO,QAAQ,KAAK;AACpC,MAAI,cAAc;AAClB,MAAI;AACJ,MAAI,cAAc;AAClB,MAAI;AACJ,aAAW,CAAC,IAAI,QAAQ,KAAK,SAAS;AACpC,QAAI,gBAAgB,IAAI;AACtB,oBAAc,SAAS,UAAU,CAAC,SAAS,UAAU,MAAM,OAAO,EAAE,CAAC;AACrE,UAAI,gBAAgB,IAAI;AACtB,uBAAe;AAAA,MACjB;AAAA,IACF;AACA,QAAI,gBAAgB,IAAI;AACtB,oBAAc,SAAS,UAAU,CAAC,SAAS,UAAU,MAAM,OAAO,EAAE,CAAC;AACrE,UAAI,gBAAgB,IAAI;AACtB,uBAAe;AAAA,MACjB;AAAA,IACF;AACA,QAAI,gBAAgB,MAAM,gBAAgB,IAAI;AAC5C;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,OAAO,QAAS,QAAO;AAC5B,QAAM,EAAE,cAAc,IAAI,OAAO;AACjC,QAAM,WAAW,cAAc,SAAS;AACxC,MAAI,gBAAgB,MAAM;AACxB,QAAI,OAAO,MAAM,OAAO;AACtB,YAAM,iBAAiB,OAAO,SAAS,SAAS,IAAI,OAAO,MAAM,OAAO,IAAI,MAAM,OAAO,EAAE,EAAE,SAAS;AACtG,qBAAe,OAAO;AACtB,oBAAc;AAAA,IAChB;AAAA,EACF;AACA,MAAI,gBAAgB,QAAQ,gBAAgB,MAAM;AAChD,WAAO;AAAA,EACT;AACA,MAAI,iBAAiB,cAAc;AACjC,WAAOM,eAAcD,gBAAe,CAAC,GAAG,KAAK,GAAG;AAAA,MAC9C,CAAC,YAAY,GAAG,SAAS,MAAM,YAAY,GAAG,aAAa,WAAW;AAAA,IACxE,CAAC;AAAA,EACH;AACA,QAAM,gBAAgB,OAAO,SAAS,SAAS,IAAI,OAAO,MAAM,kBAAkB;AAClF,QAAM,WAAW,gBAAgB,IAAI;AACrC,QAAM,aAAa,MAAM,YAAY,EAAE,WAAW;AAClD,SAAOC,eAAcD,gBAAe,CAAC,GAAG,KAAK,GAAG;AAAA,IAC9C,CAAC,YAAY,GAAG;AAAA,MACd,GAAG,MAAM,YAAY,EAAE,MAAM,GAAG,WAAW;AAAA,MAC3C,GAAG,MAAM,YAAY,EAAE,MAAM,cAAc,CAAC;AAAA,IAC9C;AAAA,IACA,CAAC,YAAY,GAAG;AAAA,MACd,GAAG,MAAM,YAAY,EAAE,MAAM,GAAG,cAAc,QAAQ;AAAA,MACtD;AAAA,MACA,GAAG,MAAM,YAAY,EAAE,MAAM,cAAc,QAAQ;AAAA,IACrD;AAAA,EACF,CAAC;AACH;AACA,SAAS,KAAK,OAAO,QAAQ,QAAQ;AACnC,SAAO,OAAO,OAAO,QAAQ,QAAQ,SAAS;AAChD;;;ADnHA,SAAQ,SAAAb,cAAY;AAEpB,IAAM,eAAe;AAEd,IAAM,0BAAN,cAAsCK,QAAwB;AAAA,EACnE,YAAY,SAA0B;AACpC,UAAM,OAAO;AAEb,UAAM,uBAAuB,MAAM;AACjC,YAAM,oBAAoB,oBAAI,IAG5B;AAEF,iBAAW,aAAa,QAAQ,SAAS,YAAY;AACnD,YAAI,qBAAqB,mBAAmB;AAC1C,gBAAM,EAAC,SAAQ,IAAI;AACnB,gBAAM,EAAC,MAAK,IAAI;AAEhB,cAAI,YAAY,kBAAkB,IAAI,KAAK;AAE3C,cAAI,CAAC,WAAW;AACd,wBAAY,oBAAI,IAAI;AACpB,8BAAkB,IAAI,OAAO,SAAS;AAAA,UACxC;AAEA,oBAAU,IAAI,QAAQ;AAAA,QACxB;AAAA,MACF;AAEA,iBAAW,CAAC,OAAO,SAAS,KAAK,mBAAmB;AAClD,0BAAkB,IAAI,OAAO,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC;AAAA,MACvD;AAEA,aAAO;AAAA,IACT;AAEA,UAAM,cAAc;AAAA,MAClB,QAAQ,QAAQ,iBAAiB,YAAY,CAAC,OAAOJ,aAAY;AAC/D,uBAAe,MAAM;AACnB,cAAI,KAAK,YAAY,MAAM,kBAAkB;AAC3C;AAAA,UACF;AAEA,gBAAM,EAAC,cAAa,IAAIA;AACxB,gBAAM,EAAC,QAAQ,OAAM,IAAI;AAEzB,cAAI,CAAC,WAAW,MAAM,KAAK,CAAC,WAAW,MAAM,GAAG;AAC9C;AAAA,UACF;AAEA,cAAI,OAAO,aAAa,OAAO,UAAU;AACvC;AAAA,UACF;AAEA,gBAAM,YAAY,qBAAqB;AACvC,gBAAM,YAAY,OAAO,SAAS,UAAU,OAAO,SAAS;AAC5D,gBAAM,kBAAkB,UAAU,IAAI,OAAO,SAAS,KAAK;AAC3D,gBAAM,kBAAkB,YACpB,kBACA,UAAU,IAAI,OAAO,SAAS,KAAK;AAEvC,cAAI,CAAC,mBAAmB,CAAC,gBAAiB;AAG1C,UAAAA,SAAQ,SAAS,UAAU,KAAK,MAAM;AAvEhD;AAwEY,uBAAW,CAAC,OAAO,iBAAiB,KAAK,UAAU,QAAQ,GAAG;AAC5D,oBAAM,UAAU,MAAM,KAAK,iBAAiB,EAAE,QAAQ;AAEtD,yBAAW,CAAC,OAAO,QAAQ,KAAK,SAAS;AACvC,oBAAI,SAAS,UAAU,SAAS,SAAS,UAAU,OAAO;AAExD;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,gBAAgB,OAAO,SAAS;AACtC,kBAAM,gBAAgB,OAAO,SAAS;AAEtC,gBAAI,CAAC,iBAAiB,CAAC,eAAe;AACpC;AAAA,YACF;AAEA,kBAAM,yBAAyB,KAAK,eAAe;AACnD,kBAAM,yBAAyB,YAC3B,yBACA,KAAK,eAAe;AACxB,kBAAM,eAAc,YAAO,SAAS,UAAhB,YAAyB;AAC7C,kBAAM,eAAc,YAAO,SAAS,UAAhB,YAAyB;AAC7C,kBAAM,QAAQ;AAAA,cACZ,CAAC,WAAW,GAAG;AAAA,cACf,CAAC,WAAW,GAAG;AAAA,YACjB;AACA,kBAAM,WAAW,KAAK,OAAO,QAAQ,MAAM;AAC3C,kBAAM,cAAc,SAAS,WAAW,EAAE,QAAQ,OAAO,QAAQ;AACjE,kBAAM,cAAc,SAAS,WAAW,EAAE,QAAQ,OAAO,QAAQ;AAEjE,oBAAQ,eAAe,aAAa,eAAe,WAAW;AAE9D,YAAAA,SAAQ,kBAAkB,QAAQ;AAElC,YAAAD,OAAM,MAAM;AACV,yBAAW,CAAC,OAAO,QAAQ,KAAK,SAAS,WAAW,EAAE,QAAQ,GAAG;AAC/D,yBAAS,QAAQ;AAAA,cACnB;AAEA,kBAAI,CAAC,WAAW;AACd,2BAAW,CAAC,OAAO,QAAQ,KAAK,SAC9B,WACF,EAAE,QAAQ,GAAG;AACX,2BAAS,QAAQ,OAAO,SAAS;AACjC,2BAAS,QAAQ;AAAA,gBACnB;AAAA,cACF;AAAA,YACF,CAAC;AAED,YAAAC,SAAQ,QACL,cAAc,OAAO,EAAE,EACvB,KAAK,MAAMA,SAAQ,kBAAkB,OAAO,CAAC;AAAA,UAClD,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,MACD,QAAQ,QAAQ,iBAAiB,WAAW,CAAC,OAAOA,aAAY;AAC9D,YAAI,CAAC,MAAM,UAAU;AACnB;AAAA,QACF;AAEA,cAAM,EAAC,cAAa,IAAIA;AACxB,cAAM,EAAC,OAAM,IAAI;AAEjB,YAAI,CAAC,WAAW,MAAM,GAAG;AACvB;AAAA,QACF;AAEA,YACE,OAAO,SAAS,iBAAiB,OAAO,SAAS,SACjD,OAAO,SAAS,iBAAiB,OAAO,SAAS,OACjD;AACA;AAAA,QACF;AAEA,uBAAe,MAAM;AACnB,gBAAM,YAAY,qBAAqB;AACvC,gBAAM,wBAAwB,UAAU;AAAA,YACtC,OAAO,SAAS;AAAA,UAClB;AAEA,cAAI,CAAC,sBAAuB;AAG5B,UAAAA,SAAQ,SAAS,UAAU,KAAK,MAAM;AA7JhD;AA8JY,uBAAW,CAAC,OAAO,iBAAiB,KAAK,UAAU,QAAQ,GAAG;AAC5D,oBAAM,UAAU,MAAM,KAAK,iBAAiB,EAAE,QAAQ;AAEtD,yBAAW,CAAC,OAAO,QAAQ,KAAK,SAAS;AACvC,oBAAI,SAAS,UAAU,SAAS,SAAS,UAAU,OAAO;AAExD;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,kBAAM,eAAe,KAAK,qBAAqB;AAC/C,kBAAM,gBAAgB,OAAO,SAAS;AACtC,kBAAM,iBACJ,kBAAa,OAAO,SAAS,YAAY,MAAzC,mBAA4C;AAE9C,gBAAI,CAAC,iBAAiB,CAAC,eAAe;AACpC;AAAA,YACF;AAEA;AAAA,cACE;AAAA,cACA,OAAO,SAAS;AAAA,cAChB;AAAA,cACA,OAAO,SAAS;AAAA,YAClB;AAEA,YAAAD,OAAM,MAAM;AACV,yBAAW,CAAC,GAAG,iBAAiB,KAAK,UAAU,QAAQ,GAAG;AACxD,sBAAM,UAAU,MAAM,KAAK,iBAAiB,EAAE,OAAO;AAErD,2BAAW,YAAY,SAAS;AAC9B,2BAAS,QAAQ,SAAS;AAC1B,2BAAS,QAAQ,SAAS;AAAA,gBAC5B;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH,CAAC;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,SAAK,UAAU,MAAM;AACnB,iBAAW,uBAAuB,aAAa;AAC7C,4BAAoB;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,QACP,eACA,aACA,eACA,aACA;AACA,QAAM,WAAW,cAAc,cAAc,aAAa;AAE1D,gBAAc,sBAAsB,UAAU,aAAa;AAC7D;AAEA,SAAS,YAAY,GAAa,GAAa;AAC7C,SAAO,EAAE,QAAQ,EAAE;AACrB;AAEA,SAAS,KAAK,WAA0B;AACtC,SAAO,MAAM,KAAK,SAAS,EAAE,KAAK,WAAW;AAC/C;;;AHhLA,IAAM,iBAAsC;AAAA,EAC1C;AAAA,EACA;AACF;AA8BO,IAAM,4BAAgD;AAAA,EAC3D,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,MAAM;AACR;AAtFA;AA4FE,cAAC,WAOD,cAAC;AAXI,IAAMe,YAAN,MAAsC;AAAA,EAgB3C,YACE,IAUA,SACA;AAvBF,uBAAgB,QAAhB;AAOA,uBAAgB,QAAhB;AAwJA;AAnJE,iBACE;AAAA,eAAS,eAAe,MAAM,CAAC;AAAA,MAC/B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa;AAAA,MACb,UAAU;AAAA,IAhHhB,IAyGI,IAQK,kBARL,IAQK;AAAA,MAPH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAKF,QAAI,gBAAgB;AAEpB,SAAK,YAAY,IAAI,kBAAqB,OAAO,SAAS,IAAI;AAC9D,SAAK,YAAY,IAAI;AAAA,MACnB,iCACK,QADL;AAAA,QAEE,SAAS,MAAM;AAAA,UACb,MAAG;AA5Hb,gBAAAC;AA6HY,oBAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAc,QAAQ,iBAAiB,aAAa,MAAM;AACxD,mBAAK,eAAe,KAAK;AACzB,mBAAK,eAAe,KAAK;AACzB,mBAAK,gBAAgB,KAAK;AAAA,YAC5B;AAAA;AAAA,UACF,MAAM;AACJ,kBAAM,EAAC,OAAAC,QAAO,OAAAC,QAAO,eAAe,SAAS,EAAC,IAAI;AAElD,gBAAIA,WAAU,eAAe;AAC3B,8BAAgBA;AAChB,mBAAK,gBAAgBD;AACrB;AAAA,YACF;AAGA,gBAAIA,WAAU,eAAe;AAC3B;AAAA,YACF;AAEA,iBAAK,gBAAgBA;AAErB,iBAAK,QAAQ;AAAA,UACf;AAAA,UACA,MAAM;AACJ,kBAAM,EAAC,OAAM,IAAI;AACjB,kBAAM,EAAC,UAAU,aAAY,IAAI,KAAK;AAEtC,gBAAI,YAAY,UAAU,cAAc;AACtC,mBAAK,UAAU,WAAW,CAAC;AAAA,YAC7B;AAAA,UACF;AAAA,UACA,MAAM;AACJ,kBAAM,EAAC,SAAAhB,SAAO,IAAI;AAElB,uBAAW,UAAU,SAAS;AAC5B,cAAAA,YAAA,gBAAAA,SAAS,SAAS,SAAS;AAAA,YAC7B;AAAA,UACF;AAAA,UACA,GAAG,aAAa;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,QAAQ;AACb,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AAAA,EAEU,UAAU;AAClB,cAAU,MAAM;AACd,YAAM,EAAC,SAAS,WAAU,IAAI;AAC9B,YAAM,EAAC,MAAK,IAAI,KAAK;AAErB,UAAI,CAAC,QAAS;AAEd,YAAM,EAAC,KAAI,IAAI,QAAQ,cAAc;AAErC,UAAI,CAAC,SAAS,CAAC,cAAe,QAAQ,CAAC,WAAW,MAAO;AACvD;AAAA,MACF;AAEA,cAAQ,SAAS,UAAU,KAAK,MAAM;AACpC,cAAM,EAAC,QAAO,IAAI;AAElB,YAAI,CAAC,SAAS;AACZ;AAAA,QACF;AAEA,cAAM,eAAe,KAAK,aAAa;AAEvC,YAAI,CAAC,cAAc;AACjB;AAAA,QACF;AAEA,uBAAe,MAAM;AACnB,gBAAM,QAAQ;AAAA,YACZ,GACE,MAAM,kBAAkB,OACxB,aAAa,kBAAkB;AAAA,YACjC,GAAG,MAAM,kBAAkB,MAAM,aAAa,kBAAkB;AAAA,UAClE;AAEA,gBAAM,EAAC,UAAS,IAAI,kBAAkB,OAAO;AAC7C,gBAAM,mBAAmB,iBAAiB,SAAS,WAAW,KAAK;AACnE,gBAAM,iBAAiB,iBAAiB,SAAS,SAAS;AAE1D,cAAI,MAAM,KAAK,MAAM,GAAG;AACtB,6BAAiB;AAAA,cACf;AAAA,cACA,WAAW;AAAA,gBACT,WAAW;AAAA,kBACT,GAAG,iBAAiB,IAAI,MAAM,CAAC,MAAM,iBAAiB,IAAI,MAAM,CAAC,MAAM,iBAAiB,CAAC;AAAA,kBACzF,GAAG,eAAe,CAAC,MAAM,eAAe,CAAC,MAAM,eAAe,CAAC;AAAA,gBACjE;AAAA,cACF;AAAA,cACA,SAAS;AAAA,cACT,UAAU,MAAM;AACd,oBAAI,CAAC,QAAQ,cAAc,OAAO,UAAU;AAC1C,uBAAK,UAAU,QAAQ;AAAA,gBACzB;AAAA,cACF;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,UAAiD;AAC1D,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,QAAQ,SAAgD;AACjE,IAAAD,OAAM,MAAM;AACV,WAAK,UAAU,UAAU;AACzB,WAAK,UAAU,UAAU;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAIA,IAAW,QAAQ,SAA8B;AAC/C,IAAAA,OAAM,MAAM;AACV,YAAM,kBAAkB,mBAAK;AAC7B,YAAM,mBAAmB,KAAK,UAAU;AACxC,YAAM,mBAAmB,KAAK,UAAU;AAExC,UAAI,CAAC,oBAAoB,qBAAqB,iBAAiB;AAC7D,aAAK,UAAU,UAAU;AAAA,MAC3B;AAEA,UAAI,CAAC,oBAAoB,qBAAqB,iBAAiB;AAC7D,aAAK,UAAU,UAAU;AAAA,MAC3B;AAEA,yBAAK,UAAW;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,UAAU;AAhRvB;AAiRI,UAAM,UAAU,mBAAK;AAErB,QAAI,CAAC,QAAS;AAEd,YAAO,2BAAgB,IAAI,OAAO,MAA3B,YAAgC,YAAhC,YAA2C,KAAK,UAAU;AAAA,EACnE;AAAA,EAEA,IAAW,OAAO,QAA6B;AAC7C,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA,EAEA,IAAW,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,OAAO,QAA6B;AAC7C,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA,EAEA,IAAW,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,WAAW;AACpB,WAAO,KAAK,UAAU,YAAY,KAAK,UAAU;AAAA,EACnD;AAAA,EAEA,IAAW,SAAS,OAAqB;AACvC,SAAK,UAAU,WAAW;AAAA,EAC5B;AAAA,EAEA,IAAW,SAAS,OAAgB;AAClC,IAAAA,OAAM,MAAM;AACV,WAAK,UAAU,WAAW;AAC1B,WAAK,UAAU,WAAW;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,KAAK,MAAS;AACvB,IAAAA,OAAM,MAAM;AACV,WAAK,UAAU,OAAO;AACtB,WAAK,UAAU,OAAO;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,OAAO,QAA6B;AAC7C,SAAK,UAAU,SAAS;AAAA,EAC1B;AAAA,EAEA,IAAW,GAAG,IAAsB;AAClC,IAAAA,OAAM,MAAM;AACV,WAAK,UAAU,KAAK;AACpB,WAAK,UAAU,KAAK;AAAA,IACtB,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,KAAK;AACd,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,QAAQ,OAA4B;AAC7C,SAAK,UAAU,UAAU;AAAA,EAC3B;AAAA,EAEA,IAAW,kBAAkB,OAA+C;AAC1E,SAAK,UAAU,oBAAoB;AAAA,EACrC;AAAA,EAEA,IAAW,kBAAkB,OAAsC;AACjE,SAAK,UAAU,oBAAoB,wBAAS;AAAA,EAC9C;AAAA,EAEA,IAAW,KAAK,MAAwB;AACtC,IAAAA,OAAM,MAAM;AACV,WAAK,UAAU,OAAO;AACtB,WAAK,UAAU,OAAO;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,OAAO;AAChB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,OAAO,OAA4B;AAC5C,SAAK,UAAU,SAAS;AAAA,EAC1B;AAAA,EAEA,IAAW,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,eAAe;AACxB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,eAAe;AACxB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEA,IAAW,SAAS;AAClB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA,EAEO,eAAe;AACpB,WAAO,KAAK,UAAU,aAAa;AAAA,EACrC;AAAA,EAEO,QAAQ,WAA+B;AAC5C,WAAO,KAAK,UAAU,QAAQ,SAAS;AAAA,EACzC;AAAA,EAEO,WAAW;AAChB,IAAAA,OAAM,MAAM;AApYhB;AAqYM,iBAAK,YAAL,mBAAc,SAAS,SAAS,KAAK;AACrC,iBAAK,YAAL,mBAAc,SAAS,SAAS,KAAK;AAAA,IACvC,CAAC;AAED,WAAO,MAAM,KAAK,WAAW;AAAA,EAC/B;AAAA,EAEO,aAAa;AAClB,IAAAA,OAAM,MAAM;AA7YhB;AA8YM,iBAAK,YAAL,mBAAc,SAAS,WAAW,KAAK;AACvC,iBAAK,YAAL,mBAAc,SAAS,WAAW,KAAK;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEO,UAAU;AACf,IAAAA,OAAM,MAAM;AACV,WAAK,UAAU,QAAQ;AACvB,WAAK,UAAU,QAAQ;AAAA,IACzB,CAAC;AAAA,EACH;AACF;AAjUO;AAKW;AAOA;AAwJhB;AA/JA,4BAAgB,SADhB,YAJWe,WAKK;AAOhB,4BAAgB,SADhB,YAXWA,WAYK;AAZX,2BAAMA;AAmUN,IAAM,oBAAN,cAAgD,UAAa;AAAA,EAClE,YACE,OACA,SACO,UACP;AACA,UAAM,OAAO,OAAO;AAFb;AAAA,EAGT;AACF;AAEO,IAAM,oBAAN,cAAgD,UAAa;AAAA,EAClE,YACE,OACA,SACO,UACP;AACA,UAAM,OAAO,OAAO;AAFb;AAAA,EAGT;AACF","sourcesContent":["import {batch, reactive, untracked} from '@dnd-kit/state';\nimport type {CollisionPriority} from '@dnd-kit/abstract';\nimport type {\n Data,\n PluginConstructor,\n Type,\n UniqueIdentifier,\n} from '@dnd-kit/abstract';\nimport {\n defaultCollisionDetection,\n type CollisionDetector,\n} from '@dnd-kit/collision';\nimport {Draggable, Droppable} from '@dnd-kit/dom';\nimport type {\n DraggableInput,\n FeedbackType,\n DroppableInput,\n Sensors,\n DragDropManager,\n} from '@dnd-kit/dom';\nimport {\n animateTransform,\n getComputedStyles,\n computeTranslate,\n ProxiedElements,\n} from '@dnd-kit/dom/utilities';\n\nimport {SortableKeyboardPlugin} from './SortableKeyboardPlugin.ts';\nimport {OptimisticSortingPlugin} from './OptimisticSortingPlugin.ts';\n\nexport interface SortableTransition {\n /**\n * The duration of the transition in milliseconds.\n * @default 300\n */\n duration?: number;\n /**\n * The easing function to use for the transition.\n * @default 'cubic-bezier(0.25, 1, 0.5, 1)'\n */\n easing?: string;\n /**\n * Whether the sortable item should transition when its index changes,\n * but there is no drag operation in progress.\n * @default false\n **/\n idle?: boolean;\n}\n\nconst defaultPlugins: PluginConstructor[] = [\n SortableKeyboardPlugin,\n OptimisticSortingPlugin,\n];\n\nexport interface SortableInput<T extends Data>\n extends DraggableInput<T>,\n DroppableInput<T> {\n /**\n * The index of the sortable item within its group.\n */\n index: number;\n\n /**\n * The element that should be used as the droppable target for this sortable item.\n */\n target?: Element;\n\n /**\n * The optional unique identifier of the group that the sortable item belongs to.\n */\n group?: UniqueIdentifier;\n /**\n * The transition configuration to use when the index of the sortable item changes.\n */\n transition?: SortableTransition | null;\n /**\n * Plugins to register when sortable item is instantiated.\n * @default [SortableKeyboardPlugin, OptimisticSortingPlugin]\n */\n plugins?: PluginConstructor[];\n}\n\nexport const defaultSortableTransition: SortableTransition = {\n duration: 250,\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n idle: false,\n};\n\nexport class Sortable<T extends Data = Data> {\n public draggable: Draggable<T>;\n public droppable: Droppable<T>;\n\n @reactive\n public accessor index: number;\n\n previousIndex: number;\n initialIndex: number;\n initialGroup: UniqueIdentifier | undefined;\n\n @reactive\n public accessor group: UniqueIdentifier | undefined;\n\n transition: SortableTransition | null;\n\n constructor(\n {\n effects: inputEffects = () => [],\n group,\n index,\n sensors,\n type,\n transition = defaultSortableTransition,\n plugins = defaultPlugins,\n ...input\n }: SortableInput<T>,\n manager: DragDropManager<any, any> | undefined\n ) {\n let previousGroup = group;\n\n this.droppable = new SortableDroppable<T>(input, manager, this);\n this.draggable = new SortableDraggable<T>(\n {\n ...input,\n effects: () => [\n () =>\n this.manager?.monitor.addEventListener('dragstart', () => {\n this.initialIndex = this.index;\n this.initialGroup = this.group;\n this.previousIndex = this.index;\n }),\n () => {\n const {index, group, previousIndex, manager: _} = this;\n\n if (group !== previousGroup) {\n previousGroup = group;\n this.previousIndex = index;\n return;\n }\n\n // Re-run this effect whenever the index changes\n if (index === previousIndex) {\n return;\n }\n\n this.previousIndex = index;\n\n this.animate();\n },\n () => {\n const {target} = this;\n const {feedback, isDragSource} = this.draggable;\n\n if (feedback == 'move' && isDragSource) {\n this.droppable.disabled = !target;\n }\n },\n () => {\n const {manager} = this;\n\n for (const plugin of plugins) {\n manager?.registry.register(plugin);\n }\n },\n ...inputEffects(),\n ],\n type,\n sensors,\n },\n manager,\n this\n );\n\n this.manager = manager;\n this.index = index;\n this.previousIndex = index;\n this.initialIndex = index;\n this.group = group;\n this.type = type;\n this.transition = transition;\n }\n\n protected animate() {\n untracked(() => {\n const {manager, transition} = this;\n const {shape} = this.droppable;\n\n if (!manager) return;\n\n const {idle} = manager.dragOperation.status;\n\n if (!shape || !transition || (idle && !transition.idle)) {\n return;\n }\n\n manager.renderer.rendering.then(() => {\n const {element} = this;\n\n if (!element) {\n return;\n }\n\n const updatedShape = this.refreshShape();\n\n if (!updatedShape) {\n return;\n }\n\n queueMicrotask(() => {\n const delta = {\n x:\n shape.boundingRectangle.left -\n updatedShape.boundingRectangle.left,\n y: shape.boundingRectangle.top - updatedShape.boundingRectangle.top,\n };\n\n const {translate} = getComputedStyles(element);\n const currentTranslate = computeTranslate(element, translate, false);\n const finalTranslate = computeTranslate(element, translate);\n\n if (delta.x || delta.y) {\n animateTransform({\n element,\n keyframes: {\n translate: [\n `${currentTranslate.x + delta.x}px ${currentTranslate.y + delta.y}px ${currentTranslate.z}`,\n `${finalTranslate.x}px ${finalTranslate.y}px ${finalTranslate.z}`,\n ],\n },\n options: transition,\n onFinish: () => {\n if (!manager.dragOperation.status.dragging) {\n this.droppable.shape = undefined;\n }\n },\n });\n }\n });\n });\n });\n }\n\n public get manager(): DragDropManager<any, any> | undefined {\n return this.draggable.manager as any;\n }\n\n public set manager(manager: DragDropManager<any, any> | undefined) {\n batch(() => {\n this.draggable.manager = manager as any;\n this.droppable.manager = manager as any;\n });\n }\n\n #element: Element | undefined;\n\n public set element(element: Element | undefined) {\n batch(() => {\n const previousElement = this.#element;\n const droppableElement = this.droppable.element;\n const draggableElement = this.draggable.element;\n\n if (!droppableElement || droppableElement === previousElement) {\n this.droppable.element = element;\n }\n\n if (!draggableElement || draggableElement === previousElement) {\n this.draggable.element = element;\n }\n\n this.#element = element;\n });\n }\n\n public get element() {\n const element = this.#element;\n\n if (!element) return;\n\n return ProxiedElements.get(element) ?? element ?? this.droppable.element;\n }\n\n public set target(target: Element | undefined) {\n this.droppable.element = target;\n }\n\n public get target() {\n return this.droppable.element;\n }\n\n public set source(source: Element | undefined) {\n this.draggable.element = source;\n }\n\n public get source() {\n return this.draggable.element;\n }\n\n public get disabled() {\n return this.draggable.disabled && this.droppable.disabled;\n }\n\n public set feedback(value: FeedbackType) {\n this.draggable.feedback = value;\n }\n\n public set disabled(value: boolean) {\n batch(() => {\n this.droppable.disabled = value;\n this.draggable.disabled = value;\n });\n }\n\n public set data(data: T) {\n batch(() => {\n this.droppable.data = data;\n this.draggable.data = data;\n });\n }\n\n public set handle(handle: Element | undefined) {\n this.draggable.handle = handle;\n }\n\n public set id(id: UniqueIdentifier) {\n batch(() => {\n this.droppable.id = id;\n this.draggable.id = id;\n });\n }\n\n public get id() {\n return this.droppable.id;\n }\n\n public set sensors(value: Sensors | undefined) {\n this.draggable.sensors = value;\n }\n\n public set collisionPriority(value: CollisionPriority | number | undefined) {\n this.droppable.collisionPriority = value;\n }\n\n public set collisionDetector(value: CollisionDetector | undefined) {\n this.droppable.collisionDetector = value ?? defaultCollisionDetection;\n }\n\n public set type(type: Type | undefined) {\n batch(() => {\n this.droppable.type = type;\n this.draggable.type = type;\n });\n }\n\n public get type() {\n return this.draggable.type;\n }\n\n public set accept(value: Droppable['accept']) {\n this.droppable.accept = value;\n }\n\n public get accept() {\n return this.droppable.accept;\n }\n\n public get isDropTarget() {\n return this.droppable.isDropTarget;\n }\n\n /**\n * A boolean indicating whether the sortable item is the source of a drag operation.\n */\n public get isDragSource() {\n return this.draggable.isDragSource;\n }\n\n public get status() {\n return this.draggable.status;\n }\n\n public refreshShape() {\n return this.droppable.refreshShape();\n }\n\n public accepts(draggable: Draggable): boolean {\n return this.droppable.accepts(draggable);\n }\n\n public register() {\n batch(() => {\n this.manager?.registry.register(this.droppable);\n this.manager?.registry.register(this.draggable);\n });\n\n return () => this.unregister();\n }\n\n public unregister() {\n batch(() => {\n this.manager?.registry.unregister(this.droppable);\n this.manager?.registry.unregister(this.draggable);\n });\n }\n\n public destroy() {\n batch(() => {\n this.droppable.destroy();\n this.draggable.destroy();\n });\n }\n}\n\nexport class SortableDraggable<T extends Data> extends Draggable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n\nexport class SortableDroppable<T extends Data> extends Droppable<T> {\n constructor(\n input: DraggableInput<T>,\n manager: DragDropManager | undefined,\n public sortable: Sortable<T>\n ) {\n super(input, manager);\n }\n}\n","import {batch, CleanupFunction, effect} from '@dnd-kit/state';\nimport {Plugin} from '@dnd-kit/abstract';\nimport {closestCorners} from '@dnd-kit/collision';\nimport {\n DOMRectangle,\n getVisibleBoundingRectangle,\n isKeyboardEvent,\n scheduler,\n scrollIntoViewIfNeeded,\n} from '@dnd-kit/dom/utilities';\nimport type {Coordinates} from '@dnd-kit/geometry';\n\nimport {Scroller} from '@dnd-kit/dom';\nimport type {DragDropManager, Droppable} from '@dnd-kit/dom';\n\nimport {isSortable} from './utilities.ts';\n\nconst TOLERANCE = 10;\n\nexport class SortableKeyboardPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const cleanupEffect = effect(() => {\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (dragOperation.status.initialized) {\n const scroller = manager.registry.plugins.get(Scroller);\n\n if (scroller) {\n scroller.disable();\n\n return () => scroller.enable();\n }\n }\n });\n\n const unsubscribe = manager.monitor.addEventListener(\n 'dragmove',\n (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n\n if (!isKeyboardEvent(dragOperation.activatorEvent)) {\n return;\n }\n\n if (!isSortable(dragOperation.source)) {\n return;\n }\n\n if (!dragOperation.shape) {\n return;\n }\n\n const {actions, collisionObserver, registry} = manager;\n const {by} = event;\n\n if (!by) {\n return;\n }\n\n const direction = getDirection(by);\n const {source, target} = dragOperation;\n const {center} = dragOperation.shape.current;\n const potentialTargets: Droppable[] = [];\n const cleanup: CleanupFunction[] = [];\n\n batch(() => {\n for (const droppable of registry.droppables) {\n const {id} = droppable;\n\n if (\n !droppable.accepts(source) ||\n (id === target?.id && isSortable(droppable)) ||\n !droppable.element\n ) {\n continue;\n }\n\n let previousShape = droppable.shape;\n const shape = new DOMRectangle(droppable.element, {\n getBoundingClientRect: (element) =>\n getVisibleBoundingRectangle(element, undefined, 0.2),\n });\n\n if (!shape.height || !shape.width) continue;\n\n if (\n (direction == 'down' &&\n center.y + TOLERANCE < shape.center.y) ||\n (direction == 'up' && center.y - TOLERANCE > shape.center.y) ||\n (direction == 'left' &&\n center.x - TOLERANCE > shape.center.x) ||\n (direction == 'right' && center.x + TOLERANCE < shape.center.x)\n ) {\n potentialTargets.push(droppable);\n droppable.shape = shape;\n cleanup.push(() => (droppable.shape = previousShape));\n }\n }\n });\n\n event.preventDefault();\n collisionObserver.disable();\n\n const collisions = collisionObserver.computeCollisions(\n potentialTargets,\n closestCorners\n );\n batch(() => cleanup.forEach((clean) => clean()));\n\n const [firstCollision] = collisions;\n\n if (!firstCollision) {\n return;\n }\n\n const {id} = firstCollision;\n const {index, group} = source.sortable;\n\n actions.setDropTarget(id).then((defaultPrevented) => {\n if (defaultPrevented) return;\n\n // Wait until optimistic sorting has a chance to update the DOM\n const {source, target} = dragOperation;\n\n if (!source || !isSortable(source)) {\n return;\n }\n\n const {\n index: newIndex,\n group: newGroup,\n target: targetElement,\n } = source.sortable;\n const updated = index !== newIndex || group !== newGroup;\n const element = updated ? targetElement : target?.element;\n\n if (!element) return;\n\n scrollIntoViewIfNeeded(element);\n const shape = new DOMRectangle(element);\n\n if (!shape) {\n return;\n }\n\n actions.move({\n to: {\n x: shape.center.x,\n y: shape.center.y,\n },\n });\n\n if (updated) {\n actions\n .setDropTarget(source.id)\n .then(() => collisionObserver.enable());\n } else {\n collisionObserver.enable();\n }\n });\n });\n }\n );\n\n this.destroy = () => {\n unsubscribe();\n cleanupEffect();\n };\n }\n}\n\nfunction getDirection(delta: Coordinates) {\n const {x, y} = delta;\n\n if (x > 0) {\n return 'right';\n } else if (x < 0) {\n return 'left';\n } else if (y > 0) {\n return 'down';\n } else if (y < 0) {\n return 'up';\n }\n}\n","import type {Droppable, Draggable} from '@dnd-kit/dom';\n\nimport {SortableDroppable, SortableDraggable} from './sortable.ts';\n\nexport function isSortable(\n element: Draggable | Droppable | null\n): element is SortableDroppable<any> | SortableDraggable<any> {\n return (\n element instanceof SortableDroppable || element instanceof SortableDraggable\n );\n}\n","import {Plugin, type UniqueIdentifier} from '@dnd-kit/abstract';\nimport type {DragDropManager} from '@dnd-kit/dom';\nimport {move} from '@dnd-kit/helpers';\n\nimport {isSortable} from './utilities.ts';\nimport {Sortable, SortableDroppable} from './sortable.ts';\nimport {batch} from '@dnd-kit/state';\n\nconst defaultGroup = '__default__';\n\nexport class OptimisticSortingPlugin extends Plugin<DragDropManager> {\n constructor(manager: DragDropManager) {\n super(manager);\n\n const getSortableInstances = () => {\n const sortableInstances = new Map<\n UniqueIdentifier | undefined,\n Set<Sortable>\n >();\n\n for (const droppable of manager.registry.droppables) {\n if (droppable instanceof SortableDroppable) {\n const {sortable} = droppable;\n const {group} = sortable;\n\n let instances = sortableInstances.get(group);\n\n if (!instances) {\n instances = new Set();\n sortableInstances.set(group, instances);\n }\n\n instances.add(sortable);\n }\n }\n\n for (const [group, instances] of sortableInstances) {\n sortableInstances.set(group, new Set(sort(instances)));\n }\n\n return sortableInstances;\n };\n\n const unsubscribe = [\n manager.monitor.addEventListener('dragover', (event, manager) => {\n queueMicrotask(() => {\n if (this.disabled || event.defaultPrevented) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source, target} = dragOperation;\n\n if (!isSortable(source) || !isSortable(target)) {\n return;\n }\n\n if (source.sortable === target.sortable) {\n return;\n }\n\n const instances = getSortableInstances();\n const sameGroup = source.sortable.group === target.sortable.group;\n const sourceInstances = instances.get(source.sortable.group);\n const targetInstances = sameGroup\n ? sourceInstances\n : instances.get(target.sortable.group);\n\n if (!sourceInstances || !targetInstances) return;\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [group, sortableInstances] of instances.entries()) {\n const entries = Array.from(sortableInstances).entries();\n\n for (const [index, sortable] of entries) {\n if (sortable.index !== index || sortable.group !== group) {\n // At least one index or group was changed so we should abort optimistic updates\n return;\n }\n }\n }\n\n const sourceElement = source.sortable.element;\n const targetElement = target.sortable.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n const orderedSourceSortables = sort(sourceInstances);\n const orderedTargetSortables = sameGroup\n ? orderedSourceSortables\n : sort(targetInstances);\n const sourceGroup = source.sortable.group ?? defaultGroup;\n const targetGroup = target.sortable.group ?? defaultGroup;\n const state = {\n [sourceGroup]: orderedSourceSortables,\n [targetGroup]: orderedTargetSortables,\n };\n const newState = move(state, source, target);\n const sourceIndex = newState[targetGroup].indexOf(source.sortable);\n const targetIndex = newState[targetGroup].indexOf(target.sortable);\n\n reorder(sourceElement, sourceIndex, targetElement, targetIndex);\n\n manager.collisionObserver.disable();\n\n batch(() => {\n for (const [index, sortable] of newState[sourceGroup].entries()) {\n sortable.index = index;\n }\n\n if (!sameGroup) {\n for (const [index, sortable] of newState[\n targetGroup\n ].entries()) {\n sortable.group = target.sortable.group;\n sortable.index = index;\n }\n }\n });\n\n manager.actions\n .setDropTarget(source.id)\n .then(() => manager.collisionObserver.enable());\n });\n });\n }),\n manager.monitor.addEventListener('dragend', (event, manager) => {\n if (!event.canceled) {\n return;\n }\n\n const {dragOperation} = manager;\n const {source} = dragOperation;\n\n if (!isSortable(source)) {\n return;\n }\n\n if (\n source.sortable.initialIndex === source.sortable.index &&\n source.sortable.initialGroup === source.sortable.group\n ) {\n return;\n }\n\n queueMicrotask(() => {\n const instances = getSortableInstances();\n const initialGroupInstances = instances.get(\n source.sortable.initialGroup\n );\n\n if (!initialGroupInstances) return;\n\n // Wait for the renderer to handle the event before attempting to optimistically update\n manager.renderer.rendering.then(() => {\n for (const [group, sortableInstances] of instances.entries()) {\n const entries = Array.from(sortableInstances).entries();\n\n for (const [index, sortable] of entries) {\n if (sortable.index !== index || sortable.group !== group) {\n // At least one index or group was changed so we should abort optimistic updates\n return;\n }\n }\n }\n\n const initialGroup = sort(initialGroupInstances);\n const sourceElement = source.sortable.element;\n const targetElement =\n initialGroup[source.sortable.initialIndex]?.element;\n\n if (!targetElement || !sourceElement) {\n return;\n }\n\n reorder(\n sourceElement,\n source.sortable.initialIndex,\n targetElement,\n source.sortable.initialIndex\n );\n\n batch(() => {\n for (const [_, sortableInstances] of instances.entries()) {\n const entries = Array.from(sortableInstances).values();\n\n for (const sortable of entries) {\n sortable.index = sortable.initialIndex;\n sortable.group = sortable.initialGroup;\n }\n }\n });\n });\n });\n }),\n ];\n\n this.destroy = () => {\n for (const unsubscribeListener of unsubscribe) {\n unsubscribeListener();\n }\n };\n }\n}\n\nfunction reorder(\n sourceElement: Element,\n sourceIndex: number,\n targetElement: Element,\n targetIndex: number\n) {\n const position = targetIndex < sourceIndex ? 'afterend' : 'beforebegin';\n\n targetElement.insertAdjacentElement(position, sourceElement);\n}\n\nfunction sortByIndex(a: Sortable, b: Sortable) {\n return a.index - b.index;\n}\n\nfunction sort(instances: Set<Sortable>) {\n return Array.from(instances).sort(sortByIndex);\n}\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/move.ts\nfunction arrayMove(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n newArray.splice(to, 0, newArray.splice(from, 1)[0]);\n return newArray;\n}\nfunction arraySwap(array, from, to) {\n if (from === to) {\n return array;\n }\n const newArray = array.slice();\n const item = newArray[from];\n newArray[from] = newArray[to];\n newArray[to] = item;\n return newArray;\n}\nfunction mutate(items, source, target, mutation) {\n if (!source || !target) {\n return items;\n }\n const findIndex = (item, id) => item === id || typeof item === \"object\" && \"id\" in item && item.id === id;\n if (Array.isArray(items)) {\n const sourceIndex2 = items.findIndex((item) => findIndex(item, source.id));\n const targetIndex2 = items.findIndex((item) => findIndex(item, target.id));\n if (sourceIndex2 === -1 || targetIndex2 === -1) {\n return items;\n }\n if (source.manager) {\n const { dragOperation: dragOperation2 } = source.manager;\n if (!dragOperation2.canceled && \"index\" in source && typeof source.index === \"number\") {\n const projectedSourceIndex = source.index;\n if (projectedSourceIndex !== sourceIndex2) {\n return mutation(items, sourceIndex2, projectedSourceIndex);\n }\n }\n }\n return mutation(items, sourceIndex2, targetIndex2);\n }\n if (source.id === target.id) {\n return items;\n }\n const entries = Object.entries(items);\n let sourceIndex = -1;\n let sourceParent;\n let targetIndex = -1;\n let targetParent;\n for (const [id, children] of entries) {\n if (sourceIndex === -1) {\n sourceIndex = children.findIndex((item) => findIndex(item, source.id));\n if (sourceIndex !== -1) {\n sourceParent = id;\n }\n }\n if (targetIndex === -1) {\n targetIndex = children.findIndex((item) => findIndex(item, target.id));\n if (targetIndex !== -1) {\n targetParent = id;\n }\n }\n if (sourceIndex !== -1 && targetIndex !== -1) {\n break;\n }\n }\n if (!source.manager) return items;\n const { dragOperation } = source.manager;\n const position = dragOperation.position.current;\n if (targetParent == null) {\n if (target.id in items) {\n const insertionIndex = target.shape && position.y > target.shape.center.y ? items[target.id].length : 0;\n targetParent = target.id;\n targetIndex = insertionIndex;\n }\n }\n if (sourceParent == null || targetParent == null) {\n return items;\n }\n if (sourceParent === targetParent) {\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: mutation(items[sourceParent], sourceIndex, targetIndex)\n });\n }\n const isBelowTarget = target.shape && position.y > target.shape.boundingRectangle.bottom;\n const modifier = isBelowTarget ? 1 : 0;\n const sourceItem = items[sourceParent][sourceIndex];\n return __spreadProps(__spreadValues({}, items), {\n [sourceParent]: [\n ...items[sourceParent].slice(0, sourceIndex),\n ...items[sourceParent].slice(sourceIndex + 1)\n ],\n [targetParent]: [\n ...items[targetParent].slice(0, targetIndex + modifier),\n sourceItem,\n ...items[targetParent].slice(targetIndex + modifier)\n ]\n });\n}\nfunction move(items, source, target) {\n return mutate(items, source, target, arrayMove);\n}\nfunction swap(items, source, target) {\n return mutate(items, source, target, arraySwap);\n}\nexport {\n arrayMove,\n arraySwap,\n move,\n swap\n};\n"]}
|