@vielzeug/dnd 2.2.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,80 +1,111 @@
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), n.source.notifyInteraction({
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({
48
77
  index: n.source.getOrderedIds().indexOf(n.draggedId),
49
78
  itemId: n.draggedId,
50
79
  total: n.source.getOrderedIds().length,
51
80
  type: "cancel"
52
81
  }));
53
82
  }
54
- function v(e, t) {
83
+ function S(e, t) {
55
84
  let n = e.active;
56
85
  if (!n) return;
57
- let r = n.target, i = n.placeholder.parentElement;
58
- 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);
59
- 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 = [];
60
90
  for (let [t, r] of n.initialOrders) {
61
91
  if (!e.handles.has(t)) continue;
62
92
  let n = t.getOrderedIds();
63
- d(r, n) && a.push({
93
+ f(r, n) && o.push({
64
94
  after: n,
65
95
  before: r,
66
96
  handle: t
67
97
  });
68
98
  }
69
- for (let { after: e, before: t, handle: n } of a) n.notifyBeforeReorder(t, e);
70
99
  if (r && r !== n.source) {
71
- let t = a.find((e) => e.handle === n.source), i = a.find((e) => e.handle === r);
100
+ let t = o.find((e) => e.handle === n.source), i = o.find((e) => e.handle === r);
72
101
  if (t && i) {
73
102
  e.commitMove({
74
103
  itemId: n.draggedId,
75
104
  source: n.source.element,
105
+ sourceBeforeIds: t.before,
76
106
  sourceIds: t.after,
77
107
  target: r.element,
108
+ targetBeforeIds: i.before,
78
109
  targetIds: i.after
79
110
  });
80
111
  let a = i.after.indexOf(n.draggedId), o = i.after.length;
@@ -92,21 +123,25 @@ function v(e, t) {
92
123
  }
93
124
  return;
94
125
  }
95
- for (let { after: e, handle: t } of a) t.commitReorder(e);
96
- let o = a.find((e) => e.handle === n.source), s = o ? o.after : n.source.getOrderedIds(), c = s.indexOf(n.draggedId);
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);
97
132
  n.source.notifyInteraction({
98
- index: c,
133
+ index: l,
99
134
  itemId: n.draggedId,
100
- total: s.length,
135
+ total: c.length,
101
136
  type: "drop"
102
137
  });
103
138
  }
104
- function y(e, t, n) {
139
+ function C(e, t, n) {
105
140
  if (!e.active) return;
106
141
  let { active: r } = e;
107
- 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);
108
143
  }
109
- function b(e, t, n, r) {
144
+ function w(e, t, n, r) {
110
145
  if (!r) return;
111
146
  let { container: i, edgeThreshold: a, speed: o, viewport: s } = r, c = t.getBoundingClientRect();
112
147
  if (n === "vertical") {
@@ -127,55 +162,52 @@ function b(e, t, n, r) {
127
162
  top: 0
128
163
  });
129
164
  }
130
- function x(e, t, n, r, i, a) {
131
- let o = n(), s = o.indexOf(e);
132
- if (s < 0) return null;
133
- let c = a === "vertical" ? i === "ArrowDown" : i === "ArrowRight", l = a === "vertical" ? i === "ArrowUp" : i === "ArrowLeft", u;
134
- if (c) u = Math.min(o.length - 1, s + 1);
135
- else if (l) u = Math.max(0, s - 1);
136
- else if (i === "Home") u = 0;
137
- 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;
138
173
  else return null;
139
- if (u === s) return null;
140
- let d = o[u];
141
- return d ? (t.insertBefore(e, u > s ? d.nextSibling : d), e.focus(), r()) : null;
174
+ return s === i ? null : s;
142
175
  }
143
- function S(t = {}) {
176
+ function E(t = {}) {
144
177
  let n = {
145
178
  active: null,
146
179
  commitMove(e) {
147
- t.onMove?.({
180
+ h("onMove", t.onMove, Object.freeze({
148
181
  ...e,
149
- setRevert(e) {
150
- n.lastRevert = e;
151
- }
152
- });
182
+ sourceBeforeIds: m(e.sourceBeforeIds),
183
+ sourceIds: m(e.sourceIds),
184
+ targetBeforeIds: m(e.targetBeforeIds),
185
+ targetIds: m(e.targetIds)
186
+ }));
153
187
  },
154
188
  disposables: /* @__PURE__ */ new Set(),
155
189
  handles: /* @__PURE__ */ new Set(),
156
- lastRevert: null,
157
190
  touch: null
158
- }, a = e(() => {
191
+ }, r = e(() => {
159
192
  n.touch?.dispose();
160
- for (let e of n.disposables) e();
193
+ for (let e of [...n.disposables]) e();
194
+ n.disposables.clear(), n.handles.clear();
161
195
  }), o = {
162
196
  get disposalSignal() {
163
- return a.disposalSignal;
197
+ return r.disposalSignal;
164
198
  },
165
- dispose: a.dispose,
199
+ dispose: r.dispose,
166
200
  get disposed() {
167
- return a.disposed;
201
+ return r.disposed;
168
202
  },
169
203
  get isDragging() {
170
204
  return n.active !== null;
171
205
  },
172
- revert() {
173
- n.lastRevert?.(), n.lastRevert = null;
174
- },
175
- [i]: !0,
176
- [Symbol.dispose]: a[Symbol.dispose]
206
+ [a]: !0,
207
+ [Symbol.dispose]: r[Symbol.dispose]
177
208
  };
178
- 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;
179
211
  for (let t of n.handles) {
180
212
  let n = t.resolveTouchTarget(e);
181
213
  if (n) return n;
@@ -183,172 +215,204 @@ function S(t = {}) {
183
215
  return null;
184
216
  })), o;
185
217
  }
186
- function C(n) {
187
- 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(_);
188
- d !== void 0 && d.trim();
189
- 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) => {
190
- 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);
191
231
  if (t) return t;
192
232
  let n = {
193
- dataDndHandle: e.getAttribute(a),
194
- dataDndItem: e.getAttribute(o),
233
+ dataDndHandle: e.getAttribute(o),
234
+ dataDndItem: e.getAttribute(s),
195
235
  draggable: e.getAttribute("draggable"),
196
236
  role: e.getAttribute("role"),
197
237
  tabIndex: e.getAttribute("tabindex"),
198
238
  touchAction: e.style.touchAction
199
239
  };
200
- return E.set(e, n), n;
201
- }, k = (e, t, n) => {
240
+ return A.set(e, n), n;
241
+ }, N = (e, t, n) => {
202
242
  n === null ? e.removeAttribute(t) : e.setAttribute(t, n);
203
- }, A = () => {
204
- w().forEach((e) => {
205
- let t = O(e);
206
- t.role === null && e.setAttribute("role", "listitem"), t.tabIndex === null && (e.tabIndex = 0), d ? e.querySelectorAll(d).forEach((e) => {
207
- O(e), e.setAttribute(a, ""), e.setAttribute("draggable", "true"), e.style.touchAction = "none";
208
- }) : (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
+ });
209
249
  });
210
- }, j = () => {
211
- let e = /* @__PURE__ */ new Set();
212
- Array.from(s.children).forEach((t) => {
213
- let n = t;
214
- try {
215
- let t = c(n);
216
- t && (O(n), e.has(t) ? `${t}` : e.add(t), n.setAttribute(o, ""));
217
- } catch (e) {
218
- `${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);
219
261
  }
220
- }), A();
221
- }, M = () => {
222
- 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;
223
- E.clear();
224
- }, 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) => {
225
272
  let t = document.createElement("div");
226
- return t.className = h, t.setAttribute("aria-hidden", "true"), i === "horizontal" ? t.style.width = `${e.offsetWidth}px` : t.style.height = `${e.offsetHeight}px`, t;
227
- }, P = null, F = {
228
- commitReorder: (e) => {
229
- if (!n.onReorder) return;
230
- let t = {
231
- ids: e,
232
- setRevert(e) {
233
- P = e;
234
- }
235
- };
236
- n.onReorder(t);
237
- },
238
- element: s,
239
- getOrderedIds: T,
240
- isDisabled: () => t(n.disabled),
241
- notifyBeforeReorder: (e, t) => n.onBeforeReorder?.(e, t),
242
- notifyDragEnd: (e, t) => n.onDragEnd?.(e, t),
243
- notifyDragStart: (e, t) => n.onDragStart?.(e, t),
244
- notifyInteraction: (e) => n.onInteraction?.(e),
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)),
245
288
  resolveTouchTarget: (e) => {
246
- if (t(n.disabled) || !s.contains(e)) return null;
247
- let r = e.closest(`[${o}]`);
248
- if (!r || !s.contains(r)) return null;
249
- if (!d) return r;
250
- let i = e.closest(d);
251
- 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;
252
296
  }
253
- };
254
- C.handles.add(F);
255
- let I = (e) => {
256
- if (C.active || F.isDisabled()) return;
257
- let t = e.target, r = t.closest(`[${o}]`);
258
- if (!r || d && !t.closest(d)) return;
259
- 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;
260
306
  if (!i) return;
261
- let a = N(r), s = r.nextSibling, l = c(r), u = /* @__PURE__ */ new Map();
262
- u.set(F, F.getOrderedIds()), r.setAttribute("data-dragging", ""), i.insertBefore(a, s);
263
- let m = {
264
- draggedEl: r,
265
- 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,
266
312
  hideFrame: null,
267
313
  initialOrders: u,
268
- originalDisplay: r.style.display,
269
- originalNextSibling: s,
314
+ originalDisplay: n.style.display,
315
+ originalNextSibling: o,
270
316
  originalParent: i,
271
317
  placeholder: a,
272
- source: F,
273
- target: F
318
+ source: R,
319
+ target: R
274
320
  };
275
- if ((!f(e) || e.__dndTouchPreview) && p(m), C.active = m, e.dataTransfer && (e.dataTransfer.effectAllowed = "move", e.dataTransfer.setData("text/plain", l), n.dragImage)) {
276
- let t = typeof n.dragImage == "function" ? n.dragImage(l, r, e) : n.dragImage, [i, a] = n.dragImageOffset ?? [0, 0];
277
- 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)}`;
278
328
  }
279
- F.notifyDragStart(m.draggedId, e), F.notifyInteraction({
280
- index: F.getOrderedIds().indexOf(l),
281
- itemId: l,
282
- total: F.getOrderedIds().length,
329
+ R.notifyDragStart(d.draggedId, e), R.notifyInteraction({
330
+ index: R.getOrderedIds().indexOf(c),
331
+ itemId: c,
332
+ total: R.getOrderedIds().length,
283
333
  type: "pickup"
284
334
  });
285
- }, L = (e) => {
286
- let t = C.active;
287
- if (!t || t.source.isDisabled() || F.isDisabled()) return;
288
- e.preventDefault(), b(e, s, i, v), g(t, F);
289
- let { draggedEl: n, placeholder: r } = t, a = e.target.closest(`[${o}]`);
290
- if (!a) {
291
- r.parentElement !== s && s.appendChild(r), t.target = F;
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;
292
343
  return;
293
344
  }
294
- if (a === n || a === r) return;
295
- let c = a.getBoundingClientRect(), l = i === "vertical" ? e.clientY >= c.top + c.height / 2 : e.clientX >= c.left + c.width / 2;
296
- s.insertBefore(r, l ? a.nextSibling : a), t.target = F;
297
- }, R = (e) => {
298
- let t = C.active;
299
- t && (t.source.isDisabled() || F.isDisabled() || (e.preventDefault(), t.target = F));
300
- }, z = (e) => {
301
- C.active?.source === F && y(C, e, !1);
302
- }, B = (e) => {
303
- if (!m || F.isDisabled()) return;
304
- let t = e.target?.tagName;
305
- if (t === "INPUT" || t === "TEXTAREA" || t === "SELECT") return;
306
- let n = e.target.closest(`[${o}]`);
307
- if (!n || !s.contains(n)) return;
308
- let r = T(), a = c(n), l = r.indexOf(a), u = x(n, s, w, T, e.key, i);
309
- u !== null && (e.preventDefault(), F.notifyBeforeReorder(r, u), F.commitReorder(u), F.notifyInteraction({
310
- index: u.indexOf(a),
311
- itemId: a,
312
- previousIndex: l,
313
- total: u.length,
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,
314
375
  type: "move"
315
- }));
376
+ });
316
377
  };
317
- j();
318
- let V = e(() => {
319
- 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();
320
381
  });
321
- 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), {
322
383
  get disposalSignal() {
323
- return V.disposalSignal;
384
+ return G.disposalSignal;
324
385
  },
325
- dispose: V.dispose,
386
+ dispose: G.dispose,
326
387
  get disposed() {
327
- return V.disposed;
388
+ return G.disposed;
328
389
  },
329
390
  get isDragging() {
330
- return C.active?.source === F;
331
- },
332
- revert: () => {
333
- P?.(), P = null;
391
+ return D.active?.source === R;
334
392
  },
335
- [Symbol.dispose]: V[Symbol.dispose],
336
- sync: () => {
337
- j();
393
+ [Symbol.dispose]: G[Symbol.dispose],
394
+ refresh: () => {
395
+ F();
338
396
  }
339
397
  };
340
398
  }
341
- function w(e, t, n) {
342
- 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 = [];
343
407
  for (let e of t) {
344
- if (!r.has(e)) continue;
345
- let t = r.get(e);
346
- 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);
347
411
  }
348
- for (let e of r.values()) i.push(e);
349
- return i;
412
+ for (let e of i.values()) a.push(e);
413
+ return a;
350
414
  }
351
415
  //#endregion
352
- 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 };
353
417
 
354
418
  //# sourceMappingURL=sortable.js.map