@vielzeug/dnd 1.2.3 → 2.0.1
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/README.md +12 -9
- package/dist/_shared.cjs.map +1 -1
- package/dist/_shared.d.ts +1 -1
- package/dist/_shared.d.ts.map +1 -1
- package/dist/_shared.js.map +1 -1
- package/dist/_touch.cjs +2 -0
- package/dist/_touch.cjs.map +1 -0
- package/dist/_touch.d.ts +12 -0
- package/dist/_touch.d.ts.map +1 -0
- package/dist/_touch.js +168 -0
- package/dist/_touch.js.map +1 -0
- package/dist/dnd.cjs +1 -1
- package/dist/dnd.cjs.map +1 -1
- package/dist/dnd.iife.js +1 -1
- package/dist/dnd.iife.js.map +1 -1
- package/dist/dnd.js +1 -1
- package/dist/dnd.js.map +1 -1
- package/dist/drop-zone.cjs +1 -1
- package/dist/drop-zone.cjs.map +1 -1
- package/dist/drop-zone.d.ts +38 -34
- package/dist/drop-zone.d.ts.map +1 -1
- package/dist/drop-zone.js +38 -26
- package/dist/drop-zone.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -2
- package/dist/sortable.cjs +1 -1
- package/dist/sortable.cjs.map +1 -1
- package/dist/sortable.d.ts +81 -47
- package/dist/sortable.d.ts.map +1 -1
- package/dist/sortable.js +165 -105
- package/dist/sortable.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +21 -16
- package/dist/touch.cjs +0 -2
- package/dist/touch.cjs.map +0 -1
- package/dist/touch.d.ts +0 -49
- package/dist/touch.d.ts.map +0 -1
- package/dist/touch.js +0 -124
- package/dist/touch.js.map +0 -1
package/dist/sortable.d.ts
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type TouchInputOptions } from './_touch';
|
|
2
|
+
import type { Disposable } from './types';
|
|
2
3
|
declare const SCOPE_BRAND: unique symbol;
|
|
3
4
|
export interface SortableScope extends Disposable {
|
|
4
5
|
/** `true` while any sortable in this scope is actively dragging. */
|
|
5
6
|
readonly isDragging: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Calls the revert function registered for the most recent cross-container move.
|
|
9
|
+
* A no-op when no move registered a revert function.
|
|
10
|
+
*/
|
|
11
|
+
revert(): void;
|
|
6
12
|
readonly [SCOPE_BRAND]: true;
|
|
7
13
|
}
|
|
8
14
|
export interface AutoScrollOptions {
|
|
15
|
+
/** Scroll the sortable container while dragging near its edges. @default true */
|
|
16
|
+
container?: boolean;
|
|
9
17
|
/** Distance in pixels from an edge that triggers auto-scroll. @default 32 */
|
|
10
18
|
edgeThreshold?: number;
|
|
11
19
|
/** Pixels scrolled per dragover frame while near an edge. @default 18 */
|
|
12
20
|
speed?: number;
|
|
13
|
-
/** Scroll the sortable container while dragging near its edges. @default true */
|
|
14
|
-
container?: boolean;
|
|
15
21
|
/** Scroll the viewport while dragging near the window edges. @default false */
|
|
16
22
|
viewport?: boolean;
|
|
17
23
|
}
|
|
@@ -37,21 +43,57 @@ export interface ReorderEvent {
|
|
|
37
43
|
*/
|
|
38
44
|
setRevert(fn: () => void): void;
|
|
39
45
|
}
|
|
46
|
+
/** A single committed move between two containers in the same sortable scope. */
|
|
47
|
+
export interface SortableMoveEvent {
|
|
48
|
+
/** Stable identity of the moved item. */
|
|
49
|
+
readonly itemId: string;
|
|
50
|
+
/** Registers a rollback for the most recent scope move. */
|
|
51
|
+
setRevert(fn: () => void): void;
|
|
52
|
+
/** Source container before the move. */
|
|
53
|
+
readonly source: HTMLElement;
|
|
54
|
+
/** Ordered source item IDs after the move. */
|
|
55
|
+
readonly sourceIds: string[];
|
|
56
|
+
/** Target container after the move. */
|
|
57
|
+
readonly target: HTMLElement;
|
|
58
|
+
/** Ordered target item IDs after the move. */
|
|
59
|
+
readonly targetIds: string[];
|
|
60
|
+
}
|
|
61
|
+
export interface SortableScopeOptions {
|
|
62
|
+
/**
|
|
63
|
+
* Called exactly once for every successful cross-container move.
|
|
64
|
+
* Local reorders continue to use each sortable's `onReorder` callback.
|
|
65
|
+
*/
|
|
66
|
+
onMove?: (event: SortableMoveEvent) => void;
|
|
67
|
+
/**
|
|
68
|
+
* Enables touch input for sortable items registered to this scope.
|
|
69
|
+
* The controller ignores unrelated document draggables.
|
|
70
|
+
*/
|
|
71
|
+
touch?: boolean | TouchInputOptions;
|
|
72
|
+
}
|
|
73
|
+
export type SortableTouchOptions = TouchInputOptions;
|
|
40
74
|
export interface SortableOptions {
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
|
|
75
|
+
/** Auto-scrolls the container (and viewport) near edges while dragging. @default true */
|
|
76
|
+
autoScroll?: boolean | AutoScrollOptions;
|
|
77
|
+
/** Sorting axis used to compute insertion position. @default 'vertical' */
|
|
78
|
+
axis?: 'vertical' | 'horizontal';
|
|
45
79
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
80
|
+
* When `true`, drag interactions are ignored.
|
|
81
|
+
*
|
|
82
|
+
* Note: if `disabled` transitions to `true` while a drag is in progress the
|
|
83
|
+
* drag is treated as a cancellation — the item snaps back to its original
|
|
84
|
+
* position rather than committing the last placeholder location.
|
|
48
85
|
*/
|
|
49
|
-
|
|
86
|
+
disabled?: boolean;
|
|
87
|
+
/** Optional custom drag preview element. */
|
|
88
|
+
dragImage?: HTMLElement | ((id: string, item: HTMLElement, event: DragEvent) => HTMLElement | null | undefined);
|
|
50
89
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
90
|
+
* Hotspot offset `[x, y]` passed to `setDragImage`.
|
|
91
|
+
* Controls which point of the preview image follows the cursor.
|
|
92
|
+
* @default [0, 0]
|
|
53
93
|
*/
|
|
54
|
-
|
|
94
|
+
dragImageOffset?: [number, number];
|
|
95
|
+
/** Container element whose direct-child items are sortable. */
|
|
96
|
+
element: HTMLElement;
|
|
55
97
|
/**
|
|
56
98
|
* Returns the identity key for a given item element.
|
|
57
99
|
* This separates the "what is this item?" concern (yours) from the "which children
|
|
@@ -63,27 +105,16 @@ export interface SortableOptions {
|
|
|
63
105
|
* ```
|
|
64
106
|
*/
|
|
65
107
|
getKey: (element: HTMLElement) => string;
|
|
66
|
-
/** Sorting axis used to compute insertion position. @default 'vertical' */
|
|
67
|
-
axis?: 'vertical' | 'horizontal';
|
|
68
|
-
/** Auto-scrolls the container (and viewport) near edges while dragging. @default true */
|
|
69
|
-
autoScroll?: boolean | AutoScrollOptions;
|
|
70
|
-
/** Optional custom drag preview element. */
|
|
71
|
-
dragImage?: HTMLElement | ((id: string, item: HTMLElement, event: DragEvent) => HTMLElement | null | undefined);
|
|
72
|
-
/** CSS class applied to the placeholder element. @default 'dnd-placeholder' */
|
|
73
|
-
placeholderClass?: string;
|
|
74
108
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* ```ts
|
|
79
|
-
* onReorder: ({ ids, setRevert }) => {
|
|
80
|
-
* const prev = order;
|
|
81
|
-
* setOrder(ids);
|
|
82
|
-
* setRevert(() => setOrder(prev));
|
|
83
|
-
* },
|
|
84
|
-
* ```
|
|
109
|
+
* Selector for the drag handle inside each item.
|
|
110
|
+
* When omitted the whole item is the handle.
|
|
85
111
|
*/
|
|
86
|
-
|
|
112
|
+
handle?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Enables keyboard-based reordering using arrow keys plus Home/End.
|
|
115
|
+
* @default true
|
|
116
|
+
*/
|
|
117
|
+
keyboard?: boolean;
|
|
87
118
|
/**
|
|
88
119
|
* Called just before a successful drag commit with the before and after order snapshots.
|
|
89
120
|
* Use this hook to set up FLIP animations — the source items are still in their
|
|
@@ -97,24 +128,27 @@ export interface SortableOptions {
|
|
|
97
128
|
* ```
|
|
98
129
|
*/
|
|
99
130
|
onBeforeReorder?: (from: string[], to: string[]) => void;
|
|
100
|
-
/**
|
|
101
|
-
* When `true`, drag interactions are ignored.
|
|
102
|
-
*
|
|
103
|
-
* Note: if `disabled` transitions to `true` while a drag is in progress the
|
|
104
|
-
* drag is treated as a cancellation — the item snaps back to its original
|
|
105
|
-
* position rather than committing the last placeholder location.
|
|
106
|
-
*/
|
|
107
|
-
disabled?: boolean;
|
|
108
|
-
/** Called when the user starts dragging an item. */
|
|
109
|
-
onDragStart?: (id: string, event: DragEvent) => void;
|
|
110
131
|
/** Called when a drag ends (whether dropped or cancelled). */
|
|
111
132
|
onDragEnd?: (id: string, event: DragEvent) => void;
|
|
133
|
+
/** Called when the user starts dragging an item. */
|
|
134
|
+
onDragStart?: (id: string, event: DragEvent) => void;
|
|
112
135
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
* @
|
|
136
|
+
* Called with a {@link ReorderEvent} after a successful reorder, only when the order changed.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```ts
|
|
140
|
+
* onReorder: ({ ids, setRevert }) => {
|
|
141
|
+
* const prev = order;
|
|
142
|
+
* setOrder(ids);
|
|
143
|
+
* setRevert(() => setOrder(prev));
|
|
144
|
+
* },
|
|
145
|
+
* ```
|
|
116
146
|
*/
|
|
117
|
-
|
|
147
|
+
onReorder?: (event: ReorderEvent) => void;
|
|
148
|
+
/** CSS class applied to the placeholder element. @default 'dnd-placeholder' */
|
|
149
|
+
placeholderClass?: string;
|
|
150
|
+
/** Shared scope for connected sortable containers. Containers only exchange items within the same scope. */
|
|
151
|
+
scope?: SortableScope;
|
|
118
152
|
}
|
|
119
153
|
export interface Sortable extends Disposable {
|
|
120
154
|
readonly isDragging: boolean;
|
|
@@ -163,7 +197,7 @@ export interface Sortable extends Disposable {
|
|
|
163
197
|
* scope.dispose();
|
|
164
198
|
* ```
|
|
165
199
|
*/
|
|
166
|
-
export declare function createSortableScope(): SortableScope;
|
|
200
|
+
export declare function createSortableScope(options?: SortableScopeOptions): SortableScope;
|
|
167
201
|
/**
|
|
168
202
|
* Makes a list of items sortable via native HTML drag interactions.
|
|
169
203
|
*
|
package/dist/sortable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortable.d.ts","sourceRoot":"","sources":["../src/sortable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sortable.d.ts","sourceRoot":"","sources":["../src/sortable.ts"],"names":[],"mappings":"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"}
|
package/dist/sortable.js
CHANGED
|
@@ -1,69 +1,86 @@
|
|
|
1
1
|
import { createDisposable as e, resolveDisabled as t } from "./_shared.js";
|
|
2
2
|
import { DndScopeError as n } from "./errors.js";
|
|
3
3
|
import "./_dev.js";
|
|
4
|
+
import { createScopeTouchController as r } from "./_touch.js";
|
|
4
5
|
//#region src/sortable.ts
|
|
5
|
-
var
|
|
6
|
+
var i = Symbol("SortableScope"), a = "data-dnd-handle", o = "data-dnd-item", s = /* @__PURE__ */ new WeakMap(), c = {
|
|
6
7
|
container: !0,
|
|
7
8
|
edgeThreshold: 32,
|
|
8
9
|
speed: 18,
|
|
9
10
|
viewport: !1
|
|
10
11
|
};
|
|
11
|
-
function
|
|
12
|
-
let t =
|
|
12
|
+
function l(e) {
|
|
13
|
+
let t = s.get(e);
|
|
13
14
|
if (!t) throw new n();
|
|
14
15
|
return t;
|
|
15
16
|
}
|
|
16
|
-
function
|
|
17
|
-
return e === !1 ? null : e === !0 || e === void 0 ?
|
|
17
|
+
function u(e) {
|
|
18
|
+
return e === !1 ? null : e === !0 || e === void 0 ? c : {
|
|
18
19
|
container: e.container ?? !0,
|
|
19
20
|
edgeThreshold: e.edgeThreshold ?? 32,
|
|
20
21
|
speed: e.speed ?? 18,
|
|
21
22
|
viewport: e.viewport ?? !1
|
|
22
23
|
};
|
|
23
24
|
}
|
|
24
|
-
function
|
|
25
|
+
function d(e, t) {
|
|
25
26
|
return t.length !== e.length || t.some((t, n) => t !== e[n]);
|
|
26
27
|
}
|
|
27
|
-
function d(e) {
|
|
28
|
-
e.querySelectorAll(`[${i}]`).forEach((e) => {
|
|
29
|
-
e.removeAttribute(i), e.removeAttribute("draggable"), e.style.touchAction = "";
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
28
|
function f(e) {
|
|
29
|
+
return e.__dndTouch === !0;
|
|
30
|
+
}
|
|
31
|
+
function p(e) {
|
|
33
32
|
typeof requestAnimationFrame == "function" && (e.hideFrame = requestAnimationFrame(() => {
|
|
34
33
|
e.hideFrame = null, e.draggedEl.style.display = "none";
|
|
35
34
|
}));
|
|
36
35
|
}
|
|
37
|
-
function
|
|
36
|
+
function m(e) {
|
|
38
37
|
e.hideFrame !== null && (cancelAnimationFrame(e.hideFrame), e.hideFrame = null);
|
|
39
38
|
}
|
|
40
|
-
function
|
|
41
|
-
|
|
39
|
+
function h(e) {
|
|
40
|
+
m(e), e.draggedEl.style.display = e.originalDisplay, e.draggedEl.removeAttribute("data-dragging");
|
|
42
41
|
}
|
|
43
|
-
function
|
|
42
|
+
function g(e, t) {
|
|
44
43
|
e.initialOrders.has(t) || e.initialOrders.set(t, t.getOrderedIds());
|
|
45
44
|
}
|
|
46
|
-
function
|
|
45
|
+
function _(e, t) {
|
|
47
46
|
let n = e.active;
|
|
48
|
-
n && (
|
|
47
|
+
n && (h(n), n.originalParent.insertBefore(n.draggedEl, n.originalNextSibling), n.placeholder.remove(), e.active = null, n.source.notifyDragEnd(n.draggedId, t));
|
|
49
48
|
}
|
|
50
|
-
function
|
|
49
|
+
function v(e, t) {
|
|
51
50
|
let n = e.active;
|
|
52
51
|
if (!n) return;
|
|
53
52
|
let r = n.target, i = n.placeholder.parentElement;
|
|
54
|
-
|
|
53
|
+
h(n), r && e.handles.has(r) && i ? i.insertBefore(n.draggedEl, n.placeholder) : n.originalParent.insertBefore(n.draggedEl, n.originalNextSibling), n.placeholder.remove(), e.active = null, n.source.notifyDragEnd(n.draggedId, t);
|
|
54
|
+
let a = [];
|
|
55
55
|
for (let [t, r] of n.initialOrders) {
|
|
56
56
|
if (!e.handles.has(t)) continue;
|
|
57
57
|
let n = t.getOrderedIds();
|
|
58
|
-
|
|
58
|
+
d(r, n) && a.push({
|
|
59
|
+
after: n,
|
|
60
|
+
before: r,
|
|
61
|
+
handle: t
|
|
62
|
+
});
|
|
59
63
|
}
|
|
64
|
+
for (let { after: e, before: t, handle: n } of a) n.notifyBeforeReorder(t, e);
|
|
65
|
+
if (r && r !== n.source) {
|
|
66
|
+
let t = a.find((e) => e.handle === n.source), i = a.find((e) => e.handle === r);
|
|
67
|
+
t && i && e.commitMove({
|
|
68
|
+
itemId: n.draggedId,
|
|
69
|
+
source: n.source.element,
|
|
70
|
+
sourceIds: t.after,
|
|
71
|
+
target: r.element,
|
|
72
|
+
targetIds: i.after
|
|
73
|
+
});
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
for (let { after: e, handle: t } of a) t.commitReorder(e);
|
|
60
77
|
}
|
|
61
|
-
function
|
|
78
|
+
function y(e, t, n) {
|
|
62
79
|
if (!e.active) return;
|
|
63
80
|
let { active: r } = e;
|
|
64
|
-
n || !t.dataTransfer || t.dataTransfer.dropEffect === "none" || !r.target || !e.handles.has(r.target) || r.source.isDisabled() || r.target.isDisabled() ?
|
|
81
|
+
n || !t.dataTransfer || t.dataTransfer.dropEffect === "none" || !r.target || !e.handles.has(r.target) || r.source.isDisabled() || r.target.isDisabled() ? _(e, t) : v(e, t);
|
|
65
82
|
}
|
|
66
|
-
function
|
|
83
|
+
function b(e, t, n, r) {
|
|
67
84
|
if (!r) return;
|
|
68
85
|
let { container: i, edgeThreshold: a, speed: o, viewport: s } = r, c = t.getBoundingClientRect();
|
|
69
86
|
if (n === "vertical") {
|
|
@@ -84,7 +101,7 @@ function y(e, t, n, r) {
|
|
|
84
101
|
top: 0
|
|
85
102
|
});
|
|
86
103
|
}
|
|
87
|
-
function
|
|
104
|
+
function x(e, t, n, r, i, a) {
|
|
88
105
|
let o = n(), s = o.indexOf(e);
|
|
89
106
|
if (s < 0) return null;
|
|
90
107
|
let c = a === "vertical" ? i === "ArrowDown" : i === "ArrowRight", l = a === "vertical" ? i === "ArrowUp" : i === "ArrowLeft", u;
|
|
@@ -97,150 +114,193 @@ function b(e, t, n, r, i, a) {
|
|
|
97
114
|
let d = o[u];
|
|
98
115
|
return d ? (t.insertBefore(e, u > s ? d.nextSibling : d), e.focus(), r()) : null;
|
|
99
116
|
}
|
|
100
|
-
function
|
|
101
|
-
let
|
|
117
|
+
function S(t = {}) {
|
|
118
|
+
let n = {
|
|
102
119
|
active: null,
|
|
120
|
+
commitMove(e) {
|
|
121
|
+
t.onMove?.({
|
|
122
|
+
...e,
|
|
123
|
+
setRevert(e) {
|
|
124
|
+
n.lastRevert = e;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
},
|
|
103
128
|
disposables: /* @__PURE__ */ new Set(),
|
|
104
|
-
handles: /* @__PURE__ */ new Set()
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
129
|
+
handles: /* @__PURE__ */ new Set(),
|
|
130
|
+
lastRevert: null,
|
|
131
|
+
touch: null
|
|
132
|
+
}, a = e(() => {
|
|
133
|
+
n.touch?.dispose();
|
|
134
|
+
for (let e of n.disposables) e();
|
|
135
|
+
}), o = {
|
|
108
136
|
get disposalSignal() {
|
|
109
|
-
return
|
|
137
|
+
return a.disposalSignal;
|
|
110
138
|
},
|
|
111
|
-
dispose:
|
|
139
|
+
dispose: a.dispose,
|
|
112
140
|
get disposed() {
|
|
113
|
-
return
|
|
141
|
+
return a.disposed;
|
|
114
142
|
},
|
|
115
143
|
get isDragging() {
|
|
116
|
-
return
|
|
144
|
+
return n.active !== null;
|
|
145
|
+
},
|
|
146
|
+
revert() {
|
|
147
|
+
n.lastRevert?.(), n.lastRevert = null;
|
|
117
148
|
},
|
|
118
|
-
[
|
|
119
|
-
[Symbol.dispose]:
|
|
149
|
+
[i]: !0,
|
|
150
|
+
[Symbol.dispose]: a[Symbol.dispose]
|
|
120
151
|
};
|
|
121
|
-
return
|
|
152
|
+
return s.set(o, n), t.touch && (n.touch = r(t.touch === !0 ? {} : t.touch, (e) => {
|
|
153
|
+
for (let t of n.handles) {
|
|
154
|
+
let n = t.resolveTouchTarget(e);
|
|
155
|
+
if (n) return n;
|
|
156
|
+
}
|
|
157
|
+
return null;
|
|
158
|
+
})), o;
|
|
122
159
|
}
|
|
123
|
-
function
|
|
124
|
-
let { autoScroll: r = !0, axis:
|
|
125
|
-
|
|
126
|
-
let w = () => Array.from(s.children).filter((e) => e.hasAttribute(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
160
|
+
function C(n) {
|
|
161
|
+
let { autoScroll: r = !0, axis: i = "vertical", element: s, getKey: c, handle: d, keyboard: m = !0, placeholderClass: h = "dnd-placeholder", scope: _ = S() } = n, v = u(r), C = l(_);
|
|
162
|
+
d !== void 0 && d.trim();
|
|
163
|
+
let w = () => Array.from(s.children).filter((e) => e.hasAttribute(o)), T = () => w().map((e) => c(e)), E = /* @__PURE__ */ new Map(), D = s.getAttribute("role"), O = (e) => {
|
|
164
|
+
let t = E.get(e);
|
|
165
|
+
if (t) return t;
|
|
166
|
+
let n = {
|
|
167
|
+
dataDndHandle: e.getAttribute(a),
|
|
168
|
+
dataDndItem: e.getAttribute(o),
|
|
169
|
+
draggable: e.getAttribute("draggable"),
|
|
170
|
+
role: e.getAttribute("role"),
|
|
171
|
+
tabIndex: e.getAttribute("tabindex"),
|
|
172
|
+
touchAction: e.style.touchAction
|
|
173
|
+
};
|
|
174
|
+
return E.set(e, n), n;
|
|
175
|
+
}, k = (e, t, n) => {
|
|
176
|
+
n === null ? e.removeAttribute(t) : e.setAttribute(t, n);
|
|
177
|
+
}, A = () => {
|
|
178
|
+
w().forEach((e) => {
|
|
179
|
+
let t = O(e);
|
|
180
|
+
t.role === null && e.setAttribute("role", "listitem"), t.tabIndex === null && (e.tabIndex = 0), d ? e.querySelectorAll(d).forEach((e) => {
|
|
181
|
+
O(e), e.setAttribute(a, ""), e.setAttribute("draggable", "true"), e.style.touchAction = "none";
|
|
182
|
+
}) : (e.setAttribute("draggable", "true"), e.style.touchAction = "none");
|
|
131
183
|
});
|
|
132
|
-
},
|
|
184
|
+
}, j = () => {
|
|
133
185
|
let e = /* @__PURE__ */ new Set();
|
|
134
186
|
Array.from(s.children).forEach((t) => {
|
|
135
187
|
let n = t;
|
|
136
188
|
try {
|
|
137
|
-
let t =
|
|
138
|
-
t && (e.has(t) ? `${t}` : e.add(t), n.setAttribute(
|
|
189
|
+
let t = c(n);
|
|
190
|
+
t && (O(n), e.has(t) ? `${t}` : e.add(t), n.setAttribute(o, ""));
|
|
139
191
|
} catch (e) {
|
|
140
192
|
`${String(e)}`;
|
|
141
193
|
}
|
|
142
|
-
}),
|
|
143
|
-
},
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}, k = (e) => {
|
|
194
|
+
}), A();
|
|
195
|
+
}, M = () => {
|
|
196
|
+
for (let [e, t] of E) k(e, a, t.dataDndHandle), k(e, o, t.dataDndItem), k(e, "draggable", t.draggable), k(e, "role", t.role), k(e, "tabindex", t.tabIndex), e.style.touchAction = t.touchAction;
|
|
197
|
+
E.clear();
|
|
198
|
+
}, N = (e) => {
|
|
148
199
|
let t = document.createElement("div");
|
|
149
|
-
return t.className =
|
|
150
|
-
},
|
|
200
|
+
return t.className = h, t.setAttribute("aria-hidden", "true"), i === "horizontal" ? t.style.width = `${e.offsetWidth}px` : t.style.height = `${e.offsetHeight}px`, t;
|
|
201
|
+
}, P = null, F = {
|
|
151
202
|
commitReorder: (e) => {
|
|
152
203
|
if (!n.onReorder) return;
|
|
153
204
|
let t = {
|
|
154
205
|
ids: e,
|
|
155
206
|
setRevert(e) {
|
|
156
|
-
|
|
207
|
+
P = e;
|
|
157
208
|
}
|
|
158
209
|
};
|
|
159
210
|
n.onReorder(t);
|
|
160
211
|
},
|
|
212
|
+
element: s,
|
|
161
213
|
getOrderedIds: T,
|
|
162
214
|
isDisabled: () => t(n.disabled),
|
|
163
215
|
notifyBeforeReorder: (e, t) => n.onBeforeReorder?.(e, t),
|
|
164
216
|
notifyDragEnd: (e, t) => n.onDragEnd?.(e, t),
|
|
165
|
-
notifyDragStart: (e, t) => n.onDragStart?.(e, t)
|
|
217
|
+
notifyDragStart: (e, t) => n.onDragStart?.(e, t),
|
|
218
|
+
resolveTouchTarget: (e) => {
|
|
219
|
+
if (t(n.disabled) || !s.contains(e)) return null;
|
|
220
|
+
let r = e.closest(`[${o}]`);
|
|
221
|
+
if (!r || !s.contains(r)) return null;
|
|
222
|
+
if (!d) return r;
|
|
223
|
+
let i = e.closest(d);
|
|
224
|
+
return i && r.contains(i) ? i : null;
|
|
225
|
+
}
|
|
166
226
|
};
|
|
167
|
-
C.handles.add(
|
|
168
|
-
let
|
|
169
|
-
if (C.active ||
|
|
170
|
-
let t = e.target, r = t.closest(`[${
|
|
171
|
-
if (!r ||
|
|
227
|
+
C.handles.add(F);
|
|
228
|
+
let I = (e) => {
|
|
229
|
+
if (C.active || F.isDisabled()) return;
|
|
230
|
+
let t = e.target, r = t.closest(`[${o}]`);
|
|
231
|
+
if (!r || d && !t.closest(d)) return;
|
|
172
232
|
let i = r.parentElement;
|
|
173
233
|
if (!i) return;
|
|
174
|
-
let
|
|
175
|
-
|
|
176
|
-
let
|
|
234
|
+
let a = N(r), s = r.nextSibling, l = c(r), u = /* @__PURE__ */ new Map();
|
|
235
|
+
u.set(F, F.getOrderedIds()), r.setAttribute("data-dragging", ""), i.insertBefore(a, s);
|
|
236
|
+
let m = {
|
|
177
237
|
draggedEl: r,
|
|
178
|
-
draggedId:
|
|
238
|
+
draggedId: l,
|
|
179
239
|
hideFrame: null,
|
|
180
|
-
initialOrders:
|
|
240
|
+
initialOrders: u,
|
|
181
241
|
originalDisplay: r.style.display,
|
|
182
242
|
originalNextSibling: s,
|
|
183
243
|
originalParent: i,
|
|
184
|
-
placeholder:
|
|
185
|
-
source:
|
|
186
|
-
target:
|
|
244
|
+
placeholder: a,
|
|
245
|
+
source: F,
|
|
246
|
+
target: F
|
|
187
247
|
};
|
|
188
|
-
if (f(
|
|
189
|
-
let t = typeof n.dragImage == "function" ? n.dragImage(
|
|
248
|
+
if ((!f(e) || e.__dndTouchPreview) && p(m), C.active = m, e.dataTransfer && (e.dataTransfer.effectAllowed = "move", e.dataTransfer.setData("text/plain", l), n.dragImage)) {
|
|
249
|
+
let t = typeof n.dragImage == "function" ? n.dragImage(l, r, e) : n.dragImage, [i, a] = n.dragImageOffset ?? [0, 0];
|
|
190
250
|
t && e.dataTransfer.setDragImage(t, i, a);
|
|
191
251
|
}
|
|
192
|
-
|
|
193
|
-
},
|
|
252
|
+
F.notifyDragStart(m.draggedId, e);
|
|
253
|
+
}, L = (e) => {
|
|
194
254
|
let t = C.active;
|
|
195
|
-
if (!t || t.source.isDisabled() ||
|
|
196
|
-
e.preventDefault(),
|
|
197
|
-
let { draggedEl: n, placeholder: r } = t,
|
|
198
|
-
if (!
|
|
199
|
-
r.parentElement !== s && s.appendChild(r), t.target =
|
|
255
|
+
if (!t || t.source.isDisabled() || F.isDisabled()) return;
|
|
256
|
+
e.preventDefault(), b(e, s, i, v), g(t, F);
|
|
257
|
+
let { draggedEl: n, placeholder: r } = t, a = e.target.closest(`[${o}]`);
|
|
258
|
+
if (!a) {
|
|
259
|
+
r.parentElement !== s && s.appendChild(r), t.target = F;
|
|
200
260
|
return;
|
|
201
261
|
}
|
|
202
|
-
if (
|
|
203
|
-
let c =
|
|
204
|
-
s.insertBefore(r, l ?
|
|
205
|
-
},
|
|
262
|
+
if (a === n || a === r) return;
|
|
263
|
+
let c = a.getBoundingClientRect(), l = i === "vertical" ? e.clientY >= c.top + c.height / 2 : e.clientX >= c.left + c.width / 2;
|
|
264
|
+
s.insertBefore(r, l ? a.nextSibling : a), t.target = F;
|
|
265
|
+
}, R = (e) => {
|
|
206
266
|
let t = C.active;
|
|
207
|
-
t && (t.source.isDisabled() ||
|
|
208
|
-
},
|
|
209
|
-
C.active?.source ===
|
|
210
|
-
},
|
|
211
|
-
if (!m ||
|
|
267
|
+
t && (t.source.isDisabled() || F.isDisabled() || (e.preventDefault(), t.target = F));
|
|
268
|
+
}, z = (e) => {
|
|
269
|
+
C.active?.source === F && y(C, e, !1);
|
|
270
|
+
}, B = (e) => {
|
|
271
|
+
if (!m || F.isDisabled()) return;
|
|
212
272
|
let t = e.target?.tagName;
|
|
213
273
|
if (t === "INPUT" || t === "TEXTAREA" || t === "SELECT") return;
|
|
214
|
-
let n = e.target.closest(`[${
|
|
274
|
+
let n = e.target.closest(`[${o}]`);
|
|
215
275
|
if (!n || !s.contains(n)) return;
|
|
216
|
-
let r = T(),
|
|
217
|
-
|
|
276
|
+
let r = T(), a = x(n, s, w, T, e.key, i);
|
|
277
|
+
a !== null && (e.preventDefault(), F.notifyBeforeReorder(r, a), F.commitReorder(a));
|
|
218
278
|
};
|
|
219
|
-
|
|
220
|
-
let
|
|
221
|
-
C.disposables.delete(
|
|
279
|
+
j();
|
|
280
|
+
let V = e(() => {
|
|
281
|
+
C.disposables.delete(V.dispose), C.active && (C.active.source === F || C.active.target === F) && y(C, new Event("dragend"), !0), C.handles.delete(F), k(s, "role", D), M();
|
|
222
282
|
});
|
|
223
|
-
return s.setAttribute("role", "list"), s.addEventListener("dragstart",
|
|
283
|
+
return D === null && s.setAttribute("role", "list"), s.addEventListener("dragstart", I, { signal: V.disposalSignal }), s.addEventListener("dragover", L, { signal: V.disposalSignal }), s.addEventListener("drop", R, { signal: V.disposalSignal }), s.addEventListener("dragend", z, { signal: V.disposalSignal }), s.addEventListener("keydown", B, { signal: V.disposalSignal }), C.disposables.add(V.dispose), {
|
|
224
284
|
get disposalSignal() {
|
|
225
|
-
return
|
|
285
|
+
return V.disposalSignal;
|
|
226
286
|
},
|
|
227
|
-
dispose:
|
|
287
|
+
dispose: V.dispose,
|
|
228
288
|
get disposed() {
|
|
229
|
-
return
|
|
289
|
+
return V.disposed;
|
|
230
290
|
},
|
|
231
291
|
get isDragging() {
|
|
232
|
-
return C.active?.source ===
|
|
292
|
+
return C.active?.source === F;
|
|
233
293
|
},
|
|
234
294
|
revert: () => {
|
|
235
|
-
|
|
295
|
+
P?.(), P = null;
|
|
236
296
|
},
|
|
237
|
-
[Symbol.dispose]:
|
|
297
|
+
[Symbol.dispose]: V[Symbol.dispose],
|
|
238
298
|
sync: () => {
|
|
239
|
-
|
|
299
|
+
j();
|
|
240
300
|
}
|
|
241
301
|
};
|
|
242
302
|
}
|
|
243
|
-
function
|
|
303
|
+
function w(e, t, n) {
|
|
244
304
|
let r = new Map(e.map((e) => [n(e), e])), i = [];
|
|
245
305
|
for (let e of t) {
|
|
246
306
|
if (!r.has(e)) continue;
|
|
@@ -251,6 +311,6 @@ function C(e, t, n) {
|
|
|
251
311
|
return i;
|
|
252
312
|
}
|
|
253
313
|
//#endregion
|
|
254
|
-
export {
|
|
314
|
+
export { w as applyReorder, C as createSortable, S as createSortableScope };
|
|
255
315
|
|
|
256
316
|
//# sourceMappingURL=sortable.js.map
|