svelte-dnd-action 0.9.51 → 0.9.52
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/index.js +52 -2
- package/dist/index.mjs +52 -2
- package/package.json +1 -1
- package/src/helpers/intersection.js +53 -2
- package/src/pointerAction.js +3 -1
package/dist/index.js
CHANGED
|
@@ -356,11 +356,13 @@
|
|
|
356
356
|
/**
|
|
357
357
|
* Gets the bounding rect but removes transforms (ex: flip animation)
|
|
358
358
|
* @param {HTMLElement} el
|
|
359
|
+
* @param {boolean} [onlyVisible] - use the visible rect defaults to true
|
|
359
360
|
* @return {{top: number, left: number, bottom: number, right: number}}
|
|
360
361
|
*/
|
|
361
362
|
function getBoundingRectNoTransforms(el) {
|
|
363
|
+
var onlyVisible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
362
364
|
var ta;
|
|
363
|
-
var rect = el.getBoundingClientRect();
|
|
365
|
+
var rect = onlyVisible ? getVisibleRectRecursive(el) : el.getBoundingClientRect();
|
|
364
366
|
var style = getComputedStyle(el);
|
|
365
367
|
var tx = style.transform;
|
|
366
368
|
if (tx) {
|
|
@@ -507,6 +509,54 @@
|
|
|
507
509
|
var rect = getAbsoluteRect(el);
|
|
508
510
|
return rect.right < 0 || rect.left > document.documentElement.scrollWidth || rect.bottom < 0 || rect.top > document.documentElement.scrollHeight;
|
|
509
511
|
}
|
|
512
|
+
function getVisibleRectRecursive(element) {
|
|
513
|
+
var rect = element.getBoundingClientRect();
|
|
514
|
+
var visibleRect = {
|
|
515
|
+
top: rect.top,
|
|
516
|
+
bottom: rect.bottom,
|
|
517
|
+
left: rect.left,
|
|
518
|
+
right: rect.right
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
// Traverse up the DOM hierarchy, checking for scrollable ancestors
|
|
522
|
+
var parent = element.parentElement;
|
|
523
|
+
while (parent && parent !== document.body) {
|
|
524
|
+
var parentRect = parent.getBoundingClientRect();
|
|
525
|
+
|
|
526
|
+
// Check if the parent has a scrollable overflow
|
|
527
|
+
var overflowY = window.getComputedStyle(parent).overflowY;
|
|
528
|
+
var overflowX = window.getComputedStyle(parent).overflowX;
|
|
529
|
+
var isScrollableY = overflowY === "scroll" || overflowY === "auto";
|
|
530
|
+
var isScrollableX = overflowX === "scroll" || overflowX === "auto";
|
|
531
|
+
|
|
532
|
+
// Constrain the visible area to the parent's visible area
|
|
533
|
+
if (isScrollableY) {
|
|
534
|
+
visibleRect.top = Math.max(visibleRect.top, parentRect.top);
|
|
535
|
+
visibleRect.bottom = Math.min(visibleRect.bottom, parentRect.bottom);
|
|
536
|
+
}
|
|
537
|
+
if (isScrollableX) {
|
|
538
|
+
visibleRect.left = Math.max(visibleRect.left, parentRect.left);
|
|
539
|
+
visibleRect.right = Math.min(visibleRect.right, parentRect.right);
|
|
540
|
+
}
|
|
541
|
+
parent = parent.parentElement;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
// Finally, constrain the visible rect to the viewport
|
|
545
|
+
visibleRect.top = Math.max(visibleRect.top, 0);
|
|
546
|
+
visibleRect.bottom = Math.min(visibleRect.bottom, window.innerHeight);
|
|
547
|
+
visibleRect.left = Math.max(visibleRect.left, 0);
|
|
548
|
+
visibleRect.right = Math.min(visibleRect.right, window.innerWidth);
|
|
549
|
+
|
|
550
|
+
// Return the visible rectangle, ensuring that all values are valid
|
|
551
|
+
return {
|
|
552
|
+
top: visibleRect.top,
|
|
553
|
+
bottom: visibleRect.bottom,
|
|
554
|
+
left: visibleRect.left,
|
|
555
|
+
right: visibleRect.right,
|
|
556
|
+
width: Math.max(0, visibleRect.right - visibleRect.left),
|
|
557
|
+
height: Math.max(0, visibleRect.bottom - visibleRect.top)
|
|
558
|
+
};
|
|
559
|
+
}
|
|
510
560
|
|
|
511
561
|
var dzToShadowIndexToRect;
|
|
512
562
|
|
|
@@ -1592,7 +1642,7 @@
|
|
|
1592
1642
|
|
|
1593
1643
|
// helper function for handleDrop
|
|
1594
1644
|
function animateDraggedToFinalPosition(shadowElIdx, callback) {
|
|
1595
|
-
var shadowElRect = shadowElIdx > -1 ? getBoundingRectNoTransforms(shadowElDropZone.children[shadowElIdx]) : getBoundingRectNoTransforms(shadowElDropZone);
|
|
1645
|
+
var shadowElRect = shadowElIdx > -1 ? getBoundingRectNoTransforms(shadowElDropZone.children[shadowElIdx], false) : getBoundingRectNoTransforms(shadowElDropZone, false);
|
|
1596
1646
|
var newTransform = {
|
|
1597
1647
|
x: shadowElRect.left - parseFloat(draggedEl.style.left),
|
|
1598
1648
|
y: shadowElRect.top - parseFloat(draggedEl.style.top)
|
package/dist/index.mjs
CHANGED
|
@@ -350,11 +350,13 @@ function setDebugMode(isDebug) {
|
|
|
350
350
|
/**
|
|
351
351
|
* Gets the bounding rect but removes transforms (ex: flip animation)
|
|
352
352
|
* @param {HTMLElement} el
|
|
353
|
+
* @param {boolean} [onlyVisible] - use the visible rect defaults to true
|
|
353
354
|
* @return {{top: number, left: number, bottom: number, right: number}}
|
|
354
355
|
*/
|
|
355
356
|
function getBoundingRectNoTransforms(el) {
|
|
357
|
+
var onlyVisible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
356
358
|
var ta;
|
|
357
|
-
var rect = el.getBoundingClientRect();
|
|
359
|
+
var rect = onlyVisible ? getVisibleRectRecursive(el) : el.getBoundingClientRect();
|
|
358
360
|
var style = getComputedStyle(el);
|
|
359
361
|
var tx = style.transform;
|
|
360
362
|
if (tx) {
|
|
@@ -501,6 +503,54 @@ function isElementOffDocument(el) {
|
|
|
501
503
|
var rect = getAbsoluteRect(el);
|
|
502
504
|
return rect.right < 0 || rect.left > document.documentElement.scrollWidth || rect.bottom < 0 || rect.top > document.documentElement.scrollHeight;
|
|
503
505
|
}
|
|
506
|
+
function getVisibleRectRecursive(element) {
|
|
507
|
+
var rect = element.getBoundingClientRect();
|
|
508
|
+
var visibleRect = {
|
|
509
|
+
top: rect.top,
|
|
510
|
+
bottom: rect.bottom,
|
|
511
|
+
left: rect.left,
|
|
512
|
+
right: rect.right
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
// Traverse up the DOM hierarchy, checking for scrollable ancestors
|
|
516
|
+
var parent = element.parentElement;
|
|
517
|
+
while (parent && parent !== document.body) {
|
|
518
|
+
var parentRect = parent.getBoundingClientRect();
|
|
519
|
+
|
|
520
|
+
// Check if the parent has a scrollable overflow
|
|
521
|
+
var overflowY = window.getComputedStyle(parent).overflowY;
|
|
522
|
+
var overflowX = window.getComputedStyle(parent).overflowX;
|
|
523
|
+
var isScrollableY = overflowY === "scroll" || overflowY === "auto";
|
|
524
|
+
var isScrollableX = overflowX === "scroll" || overflowX === "auto";
|
|
525
|
+
|
|
526
|
+
// Constrain the visible area to the parent's visible area
|
|
527
|
+
if (isScrollableY) {
|
|
528
|
+
visibleRect.top = Math.max(visibleRect.top, parentRect.top);
|
|
529
|
+
visibleRect.bottom = Math.min(visibleRect.bottom, parentRect.bottom);
|
|
530
|
+
}
|
|
531
|
+
if (isScrollableX) {
|
|
532
|
+
visibleRect.left = Math.max(visibleRect.left, parentRect.left);
|
|
533
|
+
visibleRect.right = Math.min(visibleRect.right, parentRect.right);
|
|
534
|
+
}
|
|
535
|
+
parent = parent.parentElement;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
// Finally, constrain the visible rect to the viewport
|
|
539
|
+
visibleRect.top = Math.max(visibleRect.top, 0);
|
|
540
|
+
visibleRect.bottom = Math.min(visibleRect.bottom, window.innerHeight);
|
|
541
|
+
visibleRect.left = Math.max(visibleRect.left, 0);
|
|
542
|
+
visibleRect.right = Math.min(visibleRect.right, window.innerWidth);
|
|
543
|
+
|
|
544
|
+
// Return the visible rectangle, ensuring that all values are valid
|
|
545
|
+
return {
|
|
546
|
+
top: visibleRect.top,
|
|
547
|
+
bottom: visibleRect.bottom,
|
|
548
|
+
left: visibleRect.left,
|
|
549
|
+
right: visibleRect.right,
|
|
550
|
+
width: Math.max(0, visibleRect.right - visibleRect.left),
|
|
551
|
+
height: Math.max(0, visibleRect.bottom - visibleRect.top)
|
|
552
|
+
};
|
|
553
|
+
}
|
|
504
554
|
|
|
505
555
|
var dzToShadowIndexToRect;
|
|
506
556
|
|
|
@@ -1586,7 +1636,7 @@ function handleDrop$1() {
|
|
|
1586
1636
|
|
|
1587
1637
|
// helper function for handleDrop
|
|
1588
1638
|
function animateDraggedToFinalPosition(shadowElIdx, callback) {
|
|
1589
|
-
var shadowElRect = shadowElIdx > -1 ? getBoundingRectNoTransforms(shadowElDropZone.children[shadowElIdx]) : getBoundingRectNoTransforms(shadowElDropZone);
|
|
1639
|
+
var shadowElRect = shadowElIdx > -1 ? getBoundingRectNoTransforms(shadowElDropZone.children[shadowElIdx], false) : getBoundingRectNoTransforms(shadowElDropZone, false);
|
|
1590
1640
|
var newTransform = {
|
|
1591
1641
|
x: shadowElRect.left - parseFloat(draggedEl.style.left),
|
|
1592
1642
|
y: shadowElRect.top - parseFloat(draggedEl.style.top)
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "svelte-dnd-action",
|
|
3
3
|
"description": "*An awesome drag and drop library for Svelte 3 and 4 (not using the browser's built-in dnd, thanks god): Rich animations, nested containers, touch support and more *",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.52",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/isaacHagoel/svelte-dnd-action.git"
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Gets the bounding rect but removes transforms (ex: flip animation)
|
|
5
5
|
* @param {HTMLElement} el
|
|
6
|
+
* @param {boolean} [onlyVisible] - use the visible rect defaults to true
|
|
6
7
|
* @return {{top: number, left: number, bottom: number, right: number}}
|
|
7
8
|
*/
|
|
8
|
-
export function getBoundingRectNoTransforms(el) {
|
|
9
|
+
export function getBoundingRectNoTransforms(el, onlyVisible = true) {
|
|
9
10
|
let ta;
|
|
10
|
-
const rect = el.getBoundingClientRect();
|
|
11
|
+
const rect = onlyVisible ? getVisibleRectRecursive(el) : el.getBoundingClientRect();
|
|
11
12
|
const style = getComputedStyle(el);
|
|
12
13
|
const tx = style.transform;
|
|
13
14
|
|
|
@@ -156,3 +157,53 @@ export function isElementOffDocument(el) {
|
|
|
156
157
|
const rect = getAbsoluteRect(el);
|
|
157
158
|
return rect.right < 0 || rect.left > document.documentElement.scrollWidth || rect.bottom < 0 || rect.top > document.documentElement.scrollHeight;
|
|
158
159
|
}
|
|
160
|
+
|
|
161
|
+
function getVisibleRectRecursive(element) {
|
|
162
|
+
let rect = element.getBoundingClientRect();
|
|
163
|
+
let visibleRect = {
|
|
164
|
+
top: rect.top,
|
|
165
|
+
bottom: rect.bottom,
|
|
166
|
+
left: rect.left,
|
|
167
|
+
right: rect.right
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// Traverse up the DOM hierarchy, checking for scrollable ancestors
|
|
171
|
+
let parent = element.parentElement;
|
|
172
|
+
while (parent && parent !== document.body) {
|
|
173
|
+
let parentRect = parent.getBoundingClientRect();
|
|
174
|
+
|
|
175
|
+
// Check if the parent has a scrollable overflow
|
|
176
|
+
const overflowY = window.getComputedStyle(parent).overflowY;
|
|
177
|
+
const overflowX = window.getComputedStyle(parent).overflowX;
|
|
178
|
+
const isScrollableY = overflowY === "scroll" || overflowY === "auto";
|
|
179
|
+
const isScrollableX = overflowX === "scroll" || overflowX === "auto";
|
|
180
|
+
|
|
181
|
+
// Constrain the visible area to the parent's visible area
|
|
182
|
+
if (isScrollableY) {
|
|
183
|
+
visibleRect.top = Math.max(visibleRect.top, parentRect.top);
|
|
184
|
+
visibleRect.bottom = Math.min(visibleRect.bottom, parentRect.bottom);
|
|
185
|
+
}
|
|
186
|
+
if (isScrollableX) {
|
|
187
|
+
visibleRect.left = Math.max(visibleRect.left, parentRect.left);
|
|
188
|
+
visibleRect.right = Math.min(visibleRect.right, parentRect.right);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
parent = parent.parentElement;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Finally, constrain the visible rect to the viewport
|
|
195
|
+
visibleRect.top = Math.max(visibleRect.top, 0);
|
|
196
|
+
visibleRect.bottom = Math.min(visibleRect.bottom, window.innerHeight);
|
|
197
|
+
visibleRect.left = Math.max(visibleRect.left, 0);
|
|
198
|
+
visibleRect.right = Math.min(visibleRect.right, window.innerWidth);
|
|
199
|
+
|
|
200
|
+
// Return the visible rectangle, ensuring that all values are valid
|
|
201
|
+
return {
|
|
202
|
+
top: visibleRect.top,
|
|
203
|
+
bottom: visibleRect.bottom,
|
|
204
|
+
left: visibleRect.left,
|
|
205
|
+
right: visibleRect.right,
|
|
206
|
+
width: Math.max(0, visibleRect.right - visibleRect.left),
|
|
207
|
+
height: Math.max(0, visibleRect.bottom - visibleRect.top)
|
|
208
|
+
};
|
|
209
|
+
}
|
package/src/pointerAction.js
CHANGED
|
@@ -281,7 +281,9 @@ function handleDrop() {
|
|
|
281
281
|
// helper function for handleDrop
|
|
282
282
|
function animateDraggedToFinalPosition(shadowElIdx, callback) {
|
|
283
283
|
const shadowElRect =
|
|
284
|
-
shadowElIdx > -1
|
|
284
|
+
shadowElIdx > -1
|
|
285
|
+
? getBoundingRectNoTransforms(shadowElDropZone.children[shadowElIdx], false)
|
|
286
|
+
: getBoundingRectNoTransforms(shadowElDropZone, false);
|
|
285
287
|
const newTransform = {
|
|
286
288
|
x: shadowElRect.left - parseFloat(draggedEl.style.left),
|
|
287
289
|
y: shadowElRect.top - parseFloat(draggedEl.style.top)
|