@vielzeug/dnd 2.1.0 → 3.0.0

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/dist/sortable.js CHANGED
@@ -1,86 +1,147 @@
1
- import { createDisposable as e, resolveDisabled as t } from "./_shared.js";
2
- import { DndScopeError as n } from "./errors.js";
3
1
  import "./_dev.js";
4
- import { createScopeTouchController as r } from "./_touch.js";
2
+ import { createDisposable as e, resolveDisabled as t } from "./_shared.js";
3
+ import { DndError as n, DndScopeError as r } from "./errors.js";
4
+ import { createScopeTouchController as i } from "./_touch.js";
5
5
  //#region src/sortable.ts
6
- var i = Symbol("SortableScope"), a = "data-dnd-handle", o = "data-dnd-item", s = /* @__PURE__ */ new WeakMap(), c = {
6
+ var a = Symbol("SortableScope"), o = "data-dnd-handle", s = "data-dnd-item", c = /* @__PURE__ */ new WeakMap(), l = {
7
7
  container: !0,
8
8
  edgeThreshold: 32,
9
9
  speed: 18,
10
10
  viewport: !1
11
11
  };
12
- function l(e) {
13
- let t = s.get(e);
14
- if (!t) throw new n();
12
+ function u(e) {
13
+ let t = c.get(e);
14
+ if (!t) throw new r();
15
+ if (e.disposed) throw new r("Cannot register a sortable with a disposed scope.");
15
16
  return t;
16
17
  }
17
- function u(e) {
18
- return e === !1 ? null : e === !0 || e === void 0 ? c : {
18
+ function d(e) {
19
+ if (e === !1) return null;
20
+ if (e === !0 || e === void 0) return l;
21
+ if (!Number.isFinite(e.edgeThreshold ?? 32) || (e.edgeThreshold ?? 32) < 0 || !Number.isFinite(e.speed ?? 18) || (e.speed ?? 18) <= 0) throw new n("Auto-scroll edgeThreshold must be non-negative and speed must be positive");
22
+ return {
19
23
  container: e.container ?? !0,
20
24
  edgeThreshold: e.edgeThreshold ?? 32,
21
25
  speed: e.speed ?? 18,
22
26
  viewport: e.viewport ?? !1
23
27
  };
24
28
  }
25
- function d(e, t) {
29
+ function f(e, t) {
26
30
  return t.length !== e.length || t.some((t, n) => t !== e[n]);
27
31
  }
28
- function f(e) {
32
+ function p(e) {
29
33
  return e.__dndTouch === !0;
30
34
  }
31
- function p(e) {
35
+ function m(e) {
36
+ return Object.freeze([...e]);
37
+ }
38
+ function h(e, t, ...n) {
39
+ if (t) try {
40
+ t(...n);
41
+ } catch {
42
+ `${e}`;
43
+ }
44
+ }
45
+ function g(e) {
32
46
  typeof requestAnimationFrame == "function" && (e.hideFrame = requestAnimationFrame(() => {
33
47
  e.hideFrame = null, e.draggedEl.style.display = "none";
34
48
  }));
35
49
  }
36
- function m(e) {
50
+ function _(e) {
37
51
  e.hideFrame !== null && (cancelAnimationFrame(e.hideFrame), e.hideFrame = null);
38
52
  }
39
- function h(e) {
40
- m(e), e.draggedEl.style.display = e.originalDisplay, e.draggedEl.removeAttribute("data-dragging");
53
+ function v(e) {
54
+ _(e), e.draggedEl.style.display = e.originalDisplay, e.draggedEl.removeAttribute("data-dragging");
41
55
  }
42
- function g(e, t) {
56
+ function y(e, t) {
43
57
  e.initialOrders.has(t) || e.initialOrders.set(t, t.getOrderedIds());
44
58
  }
45
- function _(e, t) {
59
+ function b(e) {
60
+ let t = e.target;
61
+ return [...e.initialOrders].flatMap(([n, r]) => {
62
+ let i = r.filter((t) => t !== e.draggedId);
63
+ if (n === t && e.placeholder.parentElement === n.element) {
64
+ let t = [...n.element.children], r = t.indexOf(e.placeholder), a = n.getOrderedItems().filter((n) => n !== e.draggedEl && t.indexOf(n) < r).length;
65
+ i.splice(a, 0, e.draggedId);
66
+ }
67
+ return f(r, i) ? [{
68
+ after: i,
69
+ before: r,
70
+ handle: n
71
+ }] : [];
72
+ });
73
+ }
74
+ function x(e, t) {
46
75
  let n = e.active;
47
- n && (h(n), n.originalParent.insertBefore(n.draggedEl, n.originalNextSibling), n.placeholder.remove(), e.active = null, n.source.notifyDragEnd(n.draggedId, t));
76
+ n && (v(n), n.originalParent.insertBefore(n.draggedEl, n.originalNextSibling?.parentNode === n.originalParent ? n.originalNextSibling : null), n.placeholder.remove(), e.active = null, n.source.notifyDragEnd(n.draggedId, t), n.source.notifyInteraction({
77
+ index: n.source.getOrderedIds().indexOf(n.draggedId),
78
+ itemId: n.draggedId,
79
+ total: n.source.getOrderedIds().length,
80
+ type: "cancel"
81
+ }));
48
82
  }
49
- function v(e, t) {
83
+ function S(e, t) {
50
84
  let n = e.active;
51
85
  if (!n) return;
52
- let r = n.target, i = n.placeholder.parentElement;
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 = [];
86
+ let r = n.target, i = n.placeholder.parentElement, a = b(n);
87
+ for (let { after: e, before: t, handle: n } of a) n.notifyBeforeReorder(m(t), m(e));
88
+ v(n), r && e.handles.has(r) && i ? i.insertBefore(n.draggedEl, n.placeholder) : n.originalParent.insertBefore(n.draggedEl, n.originalNextSibling?.parentNode === n.originalParent ? n.originalNextSibling : null), n.placeholder.remove(), e.active = null, n.source.notifyDragEnd(n.draggedId, t);
89
+ let o = [];
55
90
  for (let [t, r] of n.initialOrders) {
56
91
  if (!e.handles.has(t)) continue;
57
92
  let n = t.getOrderedIds();
58
- d(r, n) && a.push({
93
+ f(r, n) && o.push({
59
94
  after: n,
60
95
  before: r,
61
96
  handle: t
62
97
  });
63
98
  }
64
- for (let { after: e, before: t, handle: n } of a) n.notifyBeforeReorder(t, e);
65
99
  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
- });
100
+ let t = o.find((e) => e.handle === n.source), i = o.find((e) => e.handle === r);
101
+ if (t && i) {
102
+ e.commitMove({
103
+ itemId: n.draggedId,
104
+ source: n.source.element,
105
+ sourceBeforeIds: t.before,
106
+ sourceIds: t.after,
107
+ target: r.element,
108
+ targetBeforeIds: i.before,
109
+ targetIds: i.after
110
+ });
111
+ let a = i.after.indexOf(n.draggedId), o = i.after.length;
112
+ n.source.notifyInteraction({
113
+ index: a,
114
+ itemId: n.draggedId,
115
+ total: o,
116
+ type: "drop"
117
+ }), r.notifyInteraction({
118
+ index: a,
119
+ itemId: n.draggedId,
120
+ total: o,
121
+ type: "drop"
122
+ });
123
+ }
74
124
  return;
75
125
  }
76
- for (let { after: e, handle: t } of a) t.commitReorder(e);
126
+ for (let { after: e, before: t, handle: r } of o) r.commitReorder({
127
+ after: e,
128
+ before: t,
129
+ item: n.draggedId
130
+ });
131
+ let s = o.find((e) => e.handle === n.source), c = s ? s.after : n.source.getOrderedIds(), l = c.indexOf(n.draggedId);
132
+ n.source.notifyInteraction({
133
+ index: l,
134
+ itemId: n.draggedId,
135
+ total: c.length,
136
+ type: "drop"
137
+ });
77
138
  }
78
- function y(e, t, n) {
139
+ function C(e, t, n) {
79
140
  if (!e.active) return;
80
141
  let { active: r } = e;
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);
142
+ n || !t.dataTransfer || t.dataTransfer.dropEffect === "none" || !r.target || !e.handles.has(r.target) || r.source.isDisabled() || r.target.isDisabled() ? x(e, t) : S(e, t);
82
143
  }
83
- function b(e, t, n, r) {
144
+ function w(e, t, n, r) {
84
145
  if (!r) return;
85
146
  let { container: i, edgeThreshold: a, speed: o, viewport: s } = r, c = t.getBoundingClientRect();
86
147
  if (n === "vertical") {
@@ -101,55 +162,52 @@ function b(e, t, n, r) {
101
162
  top: 0
102
163
  });
103
164
  }
104
- function x(e, t, n, r, i, a) {
105
- let o = n(), s = o.indexOf(e);
106
- if (s < 0) return null;
107
- let c = a === "vertical" ? i === "ArrowDown" : i === "ArrowRight", l = a === "vertical" ? i === "ArrowUp" : i === "ArrowLeft", u;
108
- if (c) u = Math.min(o.length - 1, s + 1);
109
- else if (l) u = Math.max(0, s - 1);
110
- else if (i === "Home") u = 0;
111
- else if (i === "End") u = o.length - 1;
165
+ function T(e, t, n, r) {
166
+ let i = e.indexOf(t);
167
+ if (i < 0) return null;
168
+ let a = r === "vertical" ? n === "ArrowDown" : n === "ArrowRight", o = r === "vertical" ? n === "ArrowUp" : n === "ArrowLeft", s;
169
+ if (a) s = Math.min(e.length - 1, i + 1);
170
+ else if (o) s = Math.max(0, i - 1);
171
+ else if (n === "Home") s = 0;
172
+ else if (n === "End") s = e.length - 1;
112
173
  else return null;
113
- if (u === s) return null;
114
- let d = o[u];
115
- return d ? (t.insertBefore(e, u > s ? d.nextSibling : d), e.focus(), r()) : null;
174
+ return s === i ? null : s;
116
175
  }
117
- function S(t = {}) {
176
+ function E(t = {}) {
118
177
  let n = {
119
178
  active: null,
120
179
  commitMove(e) {
121
- t.onMove?.({
180
+ h("onMove", t.onMove, Object.freeze({
122
181
  ...e,
123
- setRevert(e) {
124
- n.lastRevert = e;
125
- }
126
- });
182
+ sourceBeforeIds: m(e.sourceBeforeIds),
183
+ sourceIds: m(e.sourceIds),
184
+ targetBeforeIds: m(e.targetBeforeIds),
185
+ targetIds: m(e.targetIds)
186
+ }));
127
187
  },
128
188
  disposables: /* @__PURE__ */ new Set(),
129
189
  handles: /* @__PURE__ */ new Set(),
130
- lastRevert: null,
131
190
  touch: null
132
- }, a = e(() => {
191
+ }, r = e(() => {
133
192
  n.touch?.dispose();
134
- for (let e of n.disposables) e();
193
+ for (let e of [...n.disposables]) e();
194
+ n.disposables.clear(), n.handles.clear();
135
195
  }), o = {
136
196
  get disposalSignal() {
137
- return a.disposalSignal;
197
+ return r.disposalSignal;
138
198
  },
139
- dispose: a.dispose,
199
+ dispose: r.dispose,
140
200
  get disposed() {
141
- return a.disposed;
201
+ return r.disposed;
142
202
  },
143
203
  get isDragging() {
144
204
  return n.active !== null;
145
205
  },
146
- revert() {
147
- n.lastRevert?.(), n.lastRevert = null;
148
- },
149
- [i]: !0,
150
- [Symbol.dispose]: a[Symbol.dispose]
206
+ [a]: !0,
207
+ [Symbol.dispose]: r[Symbol.dispose]
151
208
  };
152
- return s.set(o, n), t.touch && (n.touch = r(t.touch === !0 ? {} : t.touch, (e) => {
209
+ return c.set(o, n), t.touch && (n.touch = i(t.touch === !0 ? {} : t.touch, (e) => {
210
+ if (n.active) return null;
153
211
  for (let t of n.handles) {
154
212
  let n = t.resolveTouchTarget(e);
155
213
  if (n) return n;
@@ -157,160 +215,204 @@ function S(t = {}) {
157
215
  return null;
158
216
  })), o;
159
217
  }
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);
218
+ function D(r) {
219
+ let { autoScroll: i = !0, axis: a = "vertical", element: c, getKey: l, handle: f, keyboard: _ = !0, placeholderClass: v = "dnd-placeholder", scope: b = E() } = r;
220
+ if (a !== "vertical" && a !== "horizontal") throw new n("axis must be \"vertical\" or \"horizontal\"");
221
+ let x = f?.trim() || null;
222
+ if ((f === void 0 || x) && x) try {
223
+ c.querySelector(x);
224
+ } catch (e) {
225
+ throw new n(`Invalid handle selector: "${f}"`, { cause: e });
226
+ }
227
+ let S = d(i), D = u(b);
228
+ if ([...D.handles].some((e) => e.element === c)) throw new n("A sortable is already registered for this element in the selected scope.");
229
+ let O = () => (r.items ? r.items() : Array.from(c.children)).filter((e) => e.parentElement === c && e.hasAttribute(s)), k = () => O().map((e) => l(e)), A = /* @__PURE__ */ new Map(), j = c.getAttribute("role"), M = (e) => {
230
+ let t = A.get(e);
165
231
  if (t) return t;
166
232
  let n = {
167
- dataDndHandle: e.getAttribute(a),
168
- dataDndItem: e.getAttribute(o),
233
+ dataDndHandle: e.getAttribute(o),
234
+ dataDndItem: e.getAttribute(s),
169
235
  draggable: e.getAttribute("draggable"),
170
236
  role: e.getAttribute("role"),
171
237
  tabIndex: e.getAttribute("tabindex"),
172
238
  touchAction: e.style.touchAction
173
239
  };
174
- return E.set(e, n), n;
175
- }, k = (e, t, n) => {
240
+ return A.set(e, n), n;
241
+ }, N = (e, t, n) => {
176
242
  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");
243
+ }, P = (e = O()) => {
244
+ e.forEach((e) => {
245
+ let t = M(e);
246
+ t.role === null && e.setAttribute("role", "listitem"), t.tabIndex === null && (e.tabIndex = 0), f === void 0 ? (e.setAttribute("draggable", "true"), D.touch && (e.style.touchAction = "none")) : x && e.querySelectorAll(x).forEach((e) => {
247
+ M(e), e.setAttribute(o, ""), e.setAttribute("draggable", "true"), D.touch && (e.style.touchAction = "none");
248
+ });
183
249
  });
184
- }, j = () => {
185
- let e = /* @__PURE__ */ new Set();
186
- Array.from(s.children).forEach((t) => {
187
- let n = t;
188
- try {
189
- let t = c(n);
190
- t && (O(n), e.has(t) ? `${t}` : e.add(t), n.setAttribute(o, ""));
191
- } catch (e) {
192
- `${String(e)}`;
250
+ }, F = () => {
251
+ let e = /* @__PURE__ */ new Set(), t = r.items ? r.items() : Array.from(c.children), n = t.filter((e) => e instanceof HTMLElement && e.parentElement === c), i = [];
252
+ n.length, t.length;
253
+ for (let t of n) try {
254
+ let n = l(t);
255
+ if (n) {
256
+ if (e.has(n)) {
257
+ `${n}`;
258
+ continue;
259
+ }
260
+ e.add(n), i.push(t);
193
261
  }
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) => {
262
+ } catch (e) {
263
+ `${String(e)}`;
264
+ }
265
+ I();
266
+ for (let e of i) M(e), e.setAttribute(s, "");
267
+ P(i);
268
+ }, I = () => {
269
+ for (let [e, t] of A) N(e, o, t.dataDndHandle), N(e, s, t.dataDndItem), N(e, "draggable", t.draggable), N(e, "role", t.role), N(e, "tabindex", t.tabIndex), e.style.touchAction = t.touchAction;
270
+ A.clear();
271
+ }, L = (e) => {
199
272
  let t = document.createElement("div");
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 = {
202
- commitReorder: (e) => {
203
- if (!n.onReorder) return;
204
- let t = {
205
- ids: e,
206
- setRevert(e) {
207
- P = e;
208
- }
209
- };
210
- n.onReorder(t);
211
- },
212
- element: s,
213
- getOrderedIds: T,
214
- isDisabled: () => t(n.disabled),
215
- notifyBeforeReorder: (e, t) => n.onBeforeReorder?.(e, t),
216
- notifyDragEnd: (e, t) => n.onDragEnd?.(e, t),
217
- notifyDragStart: (e, t) => n.onDragStart?.(e, t),
273
+ return t.className = v, t.setAttribute("aria-hidden", "true"), a === "horizontal" ? t.style.width = `${e.offsetWidth}px` : t.style.height = `${e.offsetHeight}px`, t;
274
+ }, R = {
275
+ commitReorder: (e) => h("onReorder", r.onReorder, Object.freeze({
276
+ after: m(e.after),
277
+ before: m(e.before),
278
+ item: e.item
279
+ })),
280
+ element: c,
281
+ getOrderedIds: k,
282
+ getOrderedItems: O,
283
+ isDisabled: () => t(r.disabled),
284
+ notifyBeforeReorder: (e, t) => h("onBeforeReorder", r.onBeforeReorder, e, t),
285
+ notifyDragEnd: (e, t) => h("onDragEnd", r.onDragEnd, e, t),
286
+ notifyDragStart: (e, t) => h("onDragStart", r.onDragStart, e, t),
287
+ notifyInteraction: (e) => h("onInteraction", r.onInteraction, Object.freeze(e)),
218
288
  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;
289
+ if (t(r.disabled) || !c.contains(e)) return null;
290
+ let n = e.closest(`[${s}]`);
291
+ if (!n || !O().includes(n)) return null;
292
+ if (f === void 0) return n;
293
+ if (!x) return null;
294
+ let i = e.closest(x);
295
+ return i && n.contains(i) ? i : null;
225
296
  }
226
- };
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;
232
- let i = r.parentElement;
297
+ }, z = (e) => {
298
+ if (D.active || R.isDisabled()) return;
299
+ let t = e.target, n = t.closest(`[${s}]`);
300
+ if (!n || !O().includes(n)) return;
301
+ if (f !== void 0) {
302
+ let e = x ? t.closest(x) : null;
303
+ if (!e || !n.contains(e)) return;
304
+ }
305
+ let i = n.parentElement;
233
306
  if (!i) return;
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 = {
237
- draggedEl: r,
238
- draggedId: l,
307
+ let a = L(n), o = n.nextSibling, c = l(n), u = /* @__PURE__ */ new Map();
308
+ u.set(R, R.getOrderedIds()), n.setAttribute("data-dragging", ""), i.insertBefore(a, o);
309
+ let d = {
310
+ draggedEl: n,
311
+ draggedId: c,
239
312
  hideFrame: null,
240
313
  initialOrders: u,
241
- originalDisplay: r.style.display,
242
- originalNextSibling: s,
314
+ originalDisplay: n.style.display,
315
+ originalNextSibling: o,
243
316
  originalParent: i,
244
317
  placeholder: a,
245
- source: F,
246
- target: F
318
+ source: R,
319
+ target: R
247
320
  };
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];
250
- t && e.dataTransfer.setDragImage(t, i, a);
321
+ if ((!p(e) || e.__dndTouchPreview) && g(d), D.active = d, e.dataTransfer) try {
322
+ if (e.dataTransfer.effectAllowed = "move", e.dataTransfer.setData("text/plain", c), r.dragImage) {
323
+ let t = typeof r.dragImage == "function" ? r.dragImage(c, n, e) : r.dragImage, [i, a] = r.dragImageOffset ?? [0, 0];
324
+ t && e.dataTransfer.setDragImage(t, i, a);
325
+ }
326
+ } catch (e) {
327
+ `${e instanceof Error ? e.message : String(e)}`;
251
328
  }
252
- F.notifyDragStart(m.draggedId, e);
253
- }, L = (e) => {
254
- let t = C.active;
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;
329
+ R.notifyDragStart(d.draggedId, e), R.notifyInteraction({
330
+ index: R.getOrderedIds().indexOf(c),
331
+ itemId: c,
332
+ total: R.getOrderedIds().length,
333
+ type: "pickup"
334
+ });
335
+ }, B = (e) => {
336
+ let t = D.active;
337
+ if (!t || t.source.isDisabled() || R.isDisabled()) return;
338
+ e.preventDefault(), w(e, c, a, S), y(t, R);
339
+ let { draggedEl: n, placeholder: r } = t, i = e.target.closest(`[${s}]`);
340
+ if (i && !O().includes(i)) return;
341
+ if (!i) {
342
+ r.parentElement !== c && c.appendChild(r), t.target = R;
260
343
  return;
261
344
  }
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) => {
266
- let t = C.active;
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;
272
- let t = e.target?.tagName;
273
- if (t === "INPUT" || t === "TEXTAREA" || t === "SELECT") return;
274
- let n = e.target.closest(`[${o}]`);
275
- if (!n || !s.contains(n)) return;
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));
345
+ if (i === n || i === r) return;
346
+ let o = i.getBoundingClientRect(), l = a === "vertical" ? e.clientY >= o.top + o.height / 2 : e.clientX >= o.left + o.width / 2;
347
+ c.insertBefore(r, l ? i.nextSibling : i), t.target = R;
348
+ }, V = (e) => {
349
+ let t = D.active;
350
+ t && (t.source.isDisabled() || R.isDisabled() || (e.preventDefault(), t.target = R));
351
+ }, H = (e) => {
352
+ D.active?.source === R && C(D, e, !1);
353
+ }, U = (e) => {
354
+ if (!_ || R.isDisabled()) return;
355
+ let t = e.target, n = t?.closest(`[${s}]`);
356
+ if (!t || !n || !O().includes(n)) return;
357
+ let r = t.closest("input, textarea, select, button, a[href], [contenteditable]:not([contenteditable=\"false\"]), [role=\"button\"], [role=\"link\"]"), i = x ? t.closest(x) : null;
358
+ if (r && (!i || !n.contains(i))) return;
359
+ let o = O(), u = o.indexOf(n), d = T(o, n, e.key, a);
360
+ if (d === null) return;
361
+ let f = o[d];
362
+ if (!f) return;
363
+ let p = o.map(l), h = [...o];
364
+ h.splice(u, 1), h.splice(d, 0, n);
365
+ let g = h.map(l), v = l(n);
366
+ e.preventDefault(), R.notifyBeforeReorder(m(p), m(g)), c.insertBefore(n, d > u ? f.nextSibling : f), n.focus(), R.commitReorder({
367
+ after: g,
368
+ before: p,
369
+ item: v
370
+ }), R.notifyInteraction({
371
+ index: d,
372
+ itemId: v,
373
+ previousIndex: u,
374
+ total: g.length,
375
+ type: "move"
376
+ });
278
377
  };
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();
378
+ F();
379
+ let W, G = e(() => {
380
+ D.disposables.delete(G.dispose), D.active && (D.active.source === R || D.active.target === R) && !D.touch?.cancel() && C(D, new Event("dragend"), !0), W?.(), D.handles.delete(R), N(c, "role", j), I();
282
381
  });
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), {
382
+ return D.handles.add(R), W = D.touch?.register(c), j === null && c.setAttribute("role", "list"), c.addEventListener("dragstart", z, { signal: G.disposalSignal }), c.addEventListener("dragover", B, { signal: G.disposalSignal }), c.addEventListener("drop", V, { signal: G.disposalSignal }), c.addEventListener("dragend", H, { signal: G.disposalSignal }), c.addEventListener("keydown", U, { signal: G.disposalSignal }), D.disposables.add(G.dispose), {
284
383
  get disposalSignal() {
285
- return V.disposalSignal;
384
+ return G.disposalSignal;
286
385
  },
287
- dispose: V.dispose,
386
+ dispose: G.dispose,
288
387
  get disposed() {
289
- return V.disposed;
388
+ return G.disposed;
290
389
  },
291
390
  get isDragging() {
292
- return C.active?.source === F;
293
- },
294
- revert: () => {
295
- P?.(), P = null;
391
+ return D.active?.source === R;
296
392
  },
297
- [Symbol.dispose]: V[Symbol.dispose],
298
- sync: () => {
299
- j();
393
+ [Symbol.dispose]: G[Symbol.dispose],
394
+ refresh: () => {
395
+ F();
300
396
  }
301
397
  };
302
398
  }
303
- function w(e, t, n) {
304
- let r = new Map(e.map((e) => [n(e), e])), i = [];
399
+ function O(e, t, r) {
400
+ let i = /* @__PURE__ */ new Map();
401
+ for (let t of e) {
402
+ let e = r(t);
403
+ if (i.has(e)) throw new n(`Duplicate item key: "${e}"`);
404
+ i.set(e, t);
405
+ }
406
+ let a = [];
305
407
  for (let e of t) {
306
- if (!r.has(e)) continue;
307
- let t = r.get(e);
308
- i.push(t), r.delete(e);
408
+ if (!i.has(e)) continue;
409
+ let t = i.get(e);
410
+ a.push(t), i.delete(e);
309
411
  }
310
- for (let e of r.values()) i.push(e);
311
- return i;
412
+ for (let e of i.values()) a.push(e);
413
+ return a;
312
414
  }
313
415
  //#endregion
314
- export { w as applyReorder, C as createSortable, S as createSortableScope };
416
+ export { n as DndError, r as DndScopeError, O as applyReorder, D as createSortable, E as createSortableScope };
315
417
 
316
418
  //# sourceMappingURL=sortable.js.map