svelte-dnd-action 0.9.15 → 0.9.18
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 +122 -32
- package/dist/index.mjs +122 -32
- package/package.json +1 -1
- package/src/helpers/styler.js +3 -2
- package/src/helpers/svelteNodeClone.js +35 -0
- package/src/pointerAction.js +36 -7
package/dist/index.js
CHANGED
|
@@ -1054,6 +1054,54 @@
|
|
|
1054
1054
|
resetScrolling$1();
|
|
1055
1055
|
}
|
|
1056
1056
|
|
|
1057
|
+
/**
|
|
1058
|
+
* Fixes svelte issue when cloning node containing (or being) <select> which will loose it's value.
|
|
1059
|
+
* Since svelte manages select value internally.
|
|
1060
|
+
* @see https://github.com/sveltejs/svelte/issues/6717
|
|
1061
|
+
* @see https://github.com/isaacHagoel/svelte-dnd-action/issues/306
|
|
1062
|
+
*
|
|
1063
|
+
* @param {HTMLElement} el
|
|
1064
|
+
* @returns
|
|
1065
|
+
*/
|
|
1066
|
+
function svelteNodeClone(el) {
|
|
1067
|
+
var cloned = el.cloneNode(true);
|
|
1068
|
+
var values = [];
|
|
1069
|
+
var elIsSelect = el.tagName === "SELECT";
|
|
1070
|
+
var selects = elIsSelect ? [el] : _toConsumableArray(el.querySelectorAll('select'));
|
|
1071
|
+
|
|
1072
|
+
var _iterator = _createForOfIteratorHelper(selects),
|
|
1073
|
+
_step;
|
|
1074
|
+
|
|
1075
|
+
try {
|
|
1076
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1077
|
+
var _select = _step.value;
|
|
1078
|
+
values.push(_select.value);
|
|
1079
|
+
}
|
|
1080
|
+
} catch (err) {
|
|
1081
|
+
_iterator.e(err);
|
|
1082
|
+
} finally {
|
|
1083
|
+
_iterator.f();
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
if (selects.length <= 0) {
|
|
1087
|
+
return cloned;
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
var clonedSelects = elIsSelect ? [cloned] : _toConsumableArray(cloned.querySelectorAll('select'));
|
|
1091
|
+
|
|
1092
|
+
for (var i = 0; i < clonedSelects.length; i++) {
|
|
1093
|
+
var select = clonedSelects[i];
|
|
1094
|
+
var value = values[i];
|
|
1095
|
+
var optionEl = select.querySelector("option[value=\"".concat(value, "\""));
|
|
1096
|
+
|
|
1097
|
+
if (optionEl) {
|
|
1098
|
+
optionEl.setAttribute('selected', true);
|
|
1099
|
+
}
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
return cloned;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1057
1105
|
var TRANSITION_DURATION_SECONDS = 0.2;
|
|
1058
1106
|
/**
|
|
1059
1107
|
* private helper function - creates a transition string for a property
|
|
@@ -1074,7 +1122,7 @@
|
|
|
1074
1122
|
|
|
1075
1123
|
function createDraggedElementFrom(originalElement, positionCenterOnXY) {
|
|
1076
1124
|
var rect = originalElement.getBoundingClientRect();
|
|
1077
|
-
var draggedEl = originalElement
|
|
1125
|
+
var draggedEl = svelteNodeClone(originalElement);
|
|
1078
1126
|
copyStylesFromTo(originalElement, draggedEl);
|
|
1079
1127
|
draggedEl.id = DRAGGED_ELEMENT_ID;
|
|
1080
1128
|
draggedEl.style.position = "fixed";
|
|
@@ -1187,7 +1235,7 @@
|
|
|
1187
1235
|
* @param {HTMLElement} dragTarget
|
|
1188
1236
|
*/
|
|
1189
1237
|
|
|
1190
|
-
function
|
|
1238
|
+
function hideElement(dragTarget) {
|
|
1191
1239
|
dragTarget.style.display = "none";
|
|
1192
1240
|
dragTarget.style.position = "fixed";
|
|
1193
1241
|
dragTarget.style.zIndex = "-5";
|
|
@@ -1290,7 +1338,8 @@
|
|
|
1290
1338
|
var isWorkingOnPreviousDrag = false;
|
|
1291
1339
|
var finalizingPreviousDrag = false;
|
|
1292
1340
|
var unlockOriginDzMinDimensions;
|
|
1293
|
-
var isDraggedOutsideOfAnyDz = false;
|
|
1341
|
+
var isDraggedOutsideOfAnyDz = false;
|
|
1342
|
+
var scheduledForRemovalAfterDrop = []; // a map from type to a set of drop-zones
|
|
1294
1343
|
|
|
1295
1344
|
var typeToDropZones = new Map(); // important - this is needed because otherwise the config that would be used for everyone is the config of the element that created the event listeners
|
|
1296
1345
|
|
|
@@ -1626,12 +1675,37 @@
|
|
|
1626
1675
|
draggedEl.style.transform = "translate3d(".concat(newTransform.x, "px, ").concat(newTransform.y, "px, 0)");
|
|
1627
1676
|
window.setTimeout(callback, dropAnimationDurationMs);
|
|
1628
1677
|
}
|
|
1678
|
+
|
|
1679
|
+
function scheduleDZForRemovalAfterDrop(dz, destroy) {
|
|
1680
|
+
scheduledForRemovalAfterDrop.push({
|
|
1681
|
+
dz: dz,
|
|
1682
|
+
destroy: destroy
|
|
1683
|
+
});
|
|
1684
|
+
window.requestAnimationFrame(function () {
|
|
1685
|
+
hideElement(dz);
|
|
1686
|
+
document.body.appendChild(dz);
|
|
1687
|
+
});
|
|
1688
|
+
}
|
|
1629
1689
|
/* cleanup */
|
|
1630
1690
|
|
|
1631
1691
|
|
|
1632
1692
|
function cleanupPostDrop() {
|
|
1633
1693
|
draggedEl.remove();
|
|
1634
1694
|
originalDragTarget.remove();
|
|
1695
|
+
|
|
1696
|
+
if (scheduledForRemovalAfterDrop.length) {
|
|
1697
|
+
printDebug(function () {
|
|
1698
|
+
return ["will destroy zones that were removed during drag", scheduledForRemovalAfterDrop];
|
|
1699
|
+
});
|
|
1700
|
+
scheduledForRemovalAfterDrop.forEach(function (_ref) {
|
|
1701
|
+
var dz = _ref.dz,
|
|
1702
|
+
destroy = _ref.destroy;
|
|
1703
|
+
destroy();
|
|
1704
|
+
dz.remove();
|
|
1705
|
+
});
|
|
1706
|
+
scheduledForRemovalAfterDrop = [];
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1635
1709
|
draggedEl = undefined;
|
|
1636
1710
|
originalDragTarget = undefined;
|
|
1637
1711
|
draggedElData = undefined;
|
|
@@ -1649,6 +1723,7 @@
|
|
|
1649
1723
|
}
|
|
1650
1724
|
|
|
1651
1725
|
function dndzone(node, options) {
|
|
1726
|
+
var initialized = false;
|
|
1652
1727
|
var config = {
|
|
1653
1728
|
items: undefined,
|
|
1654
1729
|
type: undefined,
|
|
@@ -1778,7 +1853,7 @@
|
|
|
1778
1853
|
|
|
1779
1854
|
draggedEl.focus();
|
|
1780
1855
|
watchDraggedElement();
|
|
1781
|
-
|
|
1856
|
+
hideElement(originalDragTarget);
|
|
1782
1857
|
originDropZoneRoot.appendChild(originalDragTarget);
|
|
1783
1858
|
} else {
|
|
1784
1859
|
window.requestAnimationFrame(keepOriginalElementInDom);
|
|
@@ -1817,27 +1892,27 @@
|
|
|
1817
1892
|
});
|
|
1818
1893
|
}
|
|
1819
1894
|
|
|
1820
|
-
function configure(
|
|
1821
|
-
var
|
|
1822
|
-
items =
|
|
1823
|
-
|
|
1824
|
-
dropAnimationDurationMs =
|
|
1825
|
-
|
|
1826
|
-
newType =
|
|
1827
|
-
|
|
1828
|
-
dragDisabled =
|
|
1829
|
-
|
|
1830
|
-
morphDisabled =
|
|
1831
|
-
|
|
1832
|
-
dropFromOthersDisabled =
|
|
1833
|
-
|
|
1834
|
-
dropTargetStyle =
|
|
1835
|
-
|
|
1836
|
-
dropTargetClasses =
|
|
1837
|
-
|
|
1838
|
-
transformDraggedElement =
|
|
1839
|
-
|
|
1840
|
-
centreDraggedOnCursor =
|
|
1895
|
+
function configure(_ref2) {
|
|
1896
|
+
var _ref2$items = _ref2.items,
|
|
1897
|
+
items = _ref2$items === void 0 ? undefined : _ref2$items,
|
|
1898
|
+
_ref2$flipDurationMs = _ref2.flipDurationMs,
|
|
1899
|
+
dropAnimationDurationMs = _ref2$flipDurationMs === void 0 ? 0 : _ref2$flipDurationMs,
|
|
1900
|
+
_ref2$type = _ref2.type,
|
|
1901
|
+
newType = _ref2$type === void 0 ? DEFAULT_DROP_ZONE_TYPE : _ref2$type,
|
|
1902
|
+
_ref2$dragDisabled = _ref2.dragDisabled,
|
|
1903
|
+
dragDisabled = _ref2$dragDisabled === void 0 ? false : _ref2$dragDisabled,
|
|
1904
|
+
_ref2$morphDisabled = _ref2.morphDisabled,
|
|
1905
|
+
morphDisabled = _ref2$morphDisabled === void 0 ? false : _ref2$morphDisabled,
|
|
1906
|
+
_ref2$dropFromOthersD = _ref2.dropFromOthersDisabled,
|
|
1907
|
+
dropFromOthersDisabled = _ref2$dropFromOthersD === void 0 ? false : _ref2$dropFromOthersD,
|
|
1908
|
+
_ref2$dropTargetStyle = _ref2.dropTargetStyle,
|
|
1909
|
+
dropTargetStyle = _ref2$dropTargetStyle === void 0 ? DEFAULT_DROP_TARGET_STYLE : _ref2$dropTargetStyle,
|
|
1910
|
+
_ref2$dropTargetClass = _ref2.dropTargetClasses,
|
|
1911
|
+
dropTargetClasses = _ref2$dropTargetClass === void 0 ? [] : _ref2$dropTargetClass,
|
|
1912
|
+
_ref2$transformDragge = _ref2.transformDraggedElement,
|
|
1913
|
+
transformDraggedElement = _ref2$transformDragge === void 0 ? function () {} : _ref2$transformDragge,
|
|
1914
|
+
_ref2$centreDraggedOn = _ref2.centreDraggedOnCursor,
|
|
1915
|
+
centreDraggedOnCursor = _ref2$centreDraggedOn === void 0 ? false : _ref2$centreDraggedOn;
|
|
1841
1916
|
config.dropAnimationDurationMs = dropAnimationDurationMs;
|
|
1842
1917
|
|
|
1843
1918
|
if (config.type && newType !== config.type) {
|
|
@@ -1852,7 +1927,7 @@
|
|
|
1852
1927
|
config.transformDraggedElement = transformDraggedElement;
|
|
1853
1928
|
config.centreDraggedOnCursor = centreDraggedOnCursor; // realtime update for dropTargetStyle
|
|
1854
1929
|
|
|
1855
|
-
if (isWorkingOnPreviousDrag && !finalizingPreviousDrag && (!areObjectsShallowEqual(dropTargetStyle, config.dropTargetStyle) || !areArraysShallowEqualSameOrder(dropTargetClasses, config.dropTargetClasses))) {
|
|
1930
|
+
if (initialized && isWorkingOnPreviousDrag && !finalizingPreviousDrag && (!areObjectsShallowEqual(dropTargetStyle, config.dropTargetStyle) || !areArraysShallowEqualSameOrder(dropTargetClasses, config.dropTargetClasses))) {
|
|
1856
1931
|
styleInactiveDropZones([node], function () {
|
|
1857
1932
|
return config.dropTargetStyle;
|
|
1858
1933
|
}, function () {
|
|
@@ -1872,7 +1947,7 @@
|
|
|
1872
1947
|
return dzToConfig.get(dz) ? dzToConfig.get(dz)[propName] : config[propName];
|
|
1873
1948
|
}
|
|
1874
1949
|
|
|
1875
|
-
if (isWorkingOnPreviousDrag && config.dropFromOthersDisabled !== dropFromOthersDisabled) {
|
|
1950
|
+
if (initialized && isWorkingOnPreviousDrag && config.dropFromOthersDisabled !== dropFromOthersDisabled) {
|
|
1876
1951
|
if (dropFromOthersDisabled) {
|
|
1877
1952
|
styleInactiveDropZones([node], function (dz) {
|
|
1878
1953
|
return getConfigProp(dz, "dropTargetStyle");
|
|
@@ -1918,6 +1993,10 @@
|
|
|
1918
1993
|
|
|
1919
1994
|
|
|
1920
1995
|
elToIdx.set(draggableEl, idx);
|
|
1996
|
+
|
|
1997
|
+
if (!initialized) {
|
|
1998
|
+
initialized = true;
|
|
1999
|
+
}
|
|
1921
2000
|
};
|
|
1922
2001
|
|
|
1923
2002
|
for (var idx = 0; idx < node.children.length; idx++) {
|
|
@@ -1936,11 +2015,22 @@
|
|
|
1936
2015
|
configure(newOptions);
|
|
1937
2016
|
},
|
|
1938
2017
|
destroy: function destroy() {
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
2018
|
+
function destroyDz() {
|
|
2019
|
+
printDebug(function () {
|
|
2020
|
+
return "pointer dndzone will destroy";
|
|
2021
|
+
});
|
|
2022
|
+
unregisterDropZone(node, dzToConfig.get(node).type);
|
|
2023
|
+
dzToConfig["delete"](node);
|
|
2024
|
+
}
|
|
2025
|
+
|
|
2026
|
+
if (isWorkingOnPreviousDrag) {
|
|
2027
|
+
printDebug(function () {
|
|
2028
|
+
return "pointer dndzone will be scheduled for destruction";
|
|
2029
|
+
});
|
|
2030
|
+
scheduleDZForRemovalAfterDrop(node, destroyDz);
|
|
2031
|
+
} else {
|
|
2032
|
+
destroyDz();
|
|
2033
|
+
}
|
|
1944
2034
|
}
|
|
1945
2035
|
};
|
|
1946
2036
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1048,6 +1048,54 @@ function disarmWindowScroller() {
|
|
|
1048
1048
|
resetScrolling$1();
|
|
1049
1049
|
}
|
|
1050
1050
|
|
|
1051
|
+
/**
|
|
1052
|
+
* Fixes svelte issue when cloning node containing (or being) <select> which will loose it's value.
|
|
1053
|
+
* Since svelte manages select value internally.
|
|
1054
|
+
* @see https://github.com/sveltejs/svelte/issues/6717
|
|
1055
|
+
* @see https://github.com/isaacHagoel/svelte-dnd-action/issues/306
|
|
1056
|
+
*
|
|
1057
|
+
* @param {HTMLElement} el
|
|
1058
|
+
* @returns
|
|
1059
|
+
*/
|
|
1060
|
+
function svelteNodeClone(el) {
|
|
1061
|
+
var cloned = el.cloneNode(true);
|
|
1062
|
+
var values = [];
|
|
1063
|
+
var elIsSelect = el.tagName === "SELECT";
|
|
1064
|
+
var selects = elIsSelect ? [el] : _toConsumableArray(el.querySelectorAll('select'));
|
|
1065
|
+
|
|
1066
|
+
var _iterator = _createForOfIteratorHelper(selects),
|
|
1067
|
+
_step;
|
|
1068
|
+
|
|
1069
|
+
try {
|
|
1070
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1071
|
+
var _select = _step.value;
|
|
1072
|
+
values.push(_select.value);
|
|
1073
|
+
}
|
|
1074
|
+
} catch (err) {
|
|
1075
|
+
_iterator.e(err);
|
|
1076
|
+
} finally {
|
|
1077
|
+
_iterator.f();
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
if (selects.length <= 0) {
|
|
1081
|
+
return cloned;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
var clonedSelects = elIsSelect ? [cloned] : _toConsumableArray(cloned.querySelectorAll('select'));
|
|
1085
|
+
|
|
1086
|
+
for (var i = 0; i < clonedSelects.length; i++) {
|
|
1087
|
+
var select = clonedSelects[i];
|
|
1088
|
+
var value = values[i];
|
|
1089
|
+
var optionEl = select.querySelector("option[value=\"".concat(value, "\""));
|
|
1090
|
+
|
|
1091
|
+
if (optionEl) {
|
|
1092
|
+
optionEl.setAttribute('selected', true);
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
return cloned;
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1051
1099
|
var TRANSITION_DURATION_SECONDS = 0.2;
|
|
1052
1100
|
/**
|
|
1053
1101
|
* private helper function - creates a transition string for a property
|
|
@@ -1068,7 +1116,7 @@ function trs(property) {
|
|
|
1068
1116
|
|
|
1069
1117
|
function createDraggedElementFrom(originalElement, positionCenterOnXY) {
|
|
1070
1118
|
var rect = originalElement.getBoundingClientRect();
|
|
1071
|
-
var draggedEl = originalElement
|
|
1119
|
+
var draggedEl = svelteNodeClone(originalElement);
|
|
1072
1120
|
copyStylesFromTo(originalElement, draggedEl);
|
|
1073
1121
|
draggedEl.id = DRAGGED_ELEMENT_ID;
|
|
1074
1122
|
draggedEl.style.position = "fixed";
|
|
@@ -1181,7 +1229,7 @@ function styleDraggable(draggableEl, dragDisabled) {
|
|
|
1181
1229
|
* @param {HTMLElement} dragTarget
|
|
1182
1230
|
*/
|
|
1183
1231
|
|
|
1184
|
-
function
|
|
1232
|
+
function hideElement(dragTarget) {
|
|
1185
1233
|
dragTarget.style.display = "none";
|
|
1186
1234
|
dragTarget.style.position = "fixed";
|
|
1187
1235
|
dragTarget.style.zIndex = "-5";
|
|
@@ -1284,7 +1332,8 @@ var currentMousePosition;
|
|
|
1284
1332
|
var isWorkingOnPreviousDrag = false;
|
|
1285
1333
|
var finalizingPreviousDrag = false;
|
|
1286
1334
|
var unlockOriginDzMinDimensions;
|
|
1287
|
-
var isDraggedOutsideOfAnyDz = false;
|
|
1335
|
+
var isDraggedOutsideOfAnyDz = false;
|
|
1336
|
+
var scheduledForRemovalAfterDrop = []; // a map from type to a set of drop-zones
|
|
1288
1337
|
|
|
1289
1338
|
var typeToDropZones = new Map(); // important - this is needed because otherwise the config that would be used for everyone is the config of the element that created the event listeners
|
|
1290
1339
|
|
|
@@ -1620,12 +1669,37 @@ function animateDraggedToFinalPosition(shadowElIdx, callback) {
|
|
|
1620
1669
|
draggedEl.style.transform = "translate3d(".concat(newTransform.x, "px, ").concat(newTransform.y, "px, 0)");
|
|
1621
1670
|
window.setTimeout(callback, dropAnimationDurationMs);
|
|
1622
1671
|
}
|
|
1672
|
+
|
|
1673
|
+
function scheduleDZForRemovalAfterDrop(dz, destroy) {
|
|
1674
|
+
scheduledForRemovalAfterDrop.push({
|
|
1675
|
+
dz: dz,
|
|
1676
|
+
destroy: destroy
|
|
1677
|
+
});
|
|
1678
|
+
window.requestAnimationFrame(function () {
|
|
1679
|
+
hideElement(dz);
|
|
1680
|
+
document.body.appendChild(dz);
|
|
1681
|
+
});
|
|
1682
|
+
}
|
|
1623
1683
|
/* cleanup */
|
|
1624
1684
|
|
|
1625
1685
|
|
|
1626
1686
|
function cleanupPostDrop() {
|
|
1627
1687
|
draggedEl.remove();
|
|
1628
1688
|
originalDragTarget.remove();
|
|
1689
|
+
|
|
1690
|
+
if (scheduledForRemovalAfterDrop.length) {
|
|
1691
|
+
printDebug(function () {
|
|
1692
|
+
return ["will destroy zones that were removed during drag", scheduledForRemovalAfterDrop];
|
|
1693
|
+
});
|
|
1694
|
+
scheduledForRemovalAfterDrop.forEach(function (_ref) {
|
|
1695
|
+
var dz = _ref.dz,
|
|
1696
|
+
destroy = _ref.destroy;
|
|
1697
|
+
destroy();
|
|
1698
|
+
dz.remove();
|
|
1699
|
+
});
|
|
1700
|
+
scheduledForRemovalAfterDrop = [];
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1629
1703
|
draggedEl = undefined;
|
|
1630
1704
|
originalDragTarget = undefined;
|
|
1631
1705
|
draggedElData = undefined;
|
|
@@ -1643,6 +1717,7 @@ function cleanupPostDrop() {
|
|
|
1643
1717
|
}
|
|
1644
1718
|
|
|
1645
1719
|
function dndzone(node, options) {
|
|
1720
|
+
var initialized = false;
|
|
1646
1721
|
var config = {
|
|
1647
1722
|
items: undefined,
|
|
1648
1723
|
type: undefined,
|
|
@@ -1772,7 +1847,7 @@ function dndzone(node, options) {
|
|
|
1772
1847
|
|
|
1773
1848
|
draggedEl.focus();
|
|
1774
1849
|
watchDraggedElement();
|
|
1775
|
-
|
|
1850
|
+
hideElement(originalDragTarget);
|
|
1776
1851
|
originDropZoneRoot.appendChild(originalDragTarget);
|
|
1777
1852
|
} else {
|
|
1778
1853
|
window.requestAnimationFrame(keepOriginalElementInDom);
|
|
@@ -1811,27 +1886,27 @@ function dndzone(node, options) {
|
|
|
1811
1886
|
});
|
|
1812
1887
|
}
|
|
1813
1888
|
|
|
1814
|
-
function configure(
|
|
1815
|
-
var
|
|
1816
|
-
items =
|
|
1817
|
-
|
|
1818
|
-
dropAnimationDurationMs =
|
|
1819
|
-
|
|
1820
|
-
newType =
|
|
1821
|
-
|
|
1822
|
-
dragDisabled =
|
|
1823
|
-
|
|
1824
|
-
morphDisabled =
|
|
1825
|
-
|
|
1826
|
-
dropFromOthersDisabled =
|
|
1827
|
-
|
|
1828
|
-
dropTargetStyle =
|
|
1829
|
-
|
|
1830
|
-
dropTargetClasses =
|
|
1831
|
-
|
|
1832
|
-
transformDraggedElement =
|
|
1833
|
-
|
|
1834
|
-
centreDraggedOnCursor =
|
|
1889
|
+
function configure(_ref2) {
|
|
1890
|
+
var _ref2$items = _ref2.items,
|
|
1891
|
+
items = _ref2$items === void 0 ? undefined : _ref2$items,
|
|
1892
|
+
_ref2$flipDurationMs = _ref2.flipDurationMs,
|
|
1893
|
+
dropAnimationDurationMs = _ref2$flipDurationMs === void 0 ? 0 : _ref2$flipDurationMs,
|
|
1894
|
+
_ref2$type = _ref2.type,
|
|
1895
|
+
newType = _ref2$type === void 0 ? DEFAULT_DROP_ZONE_TYPE : _ref2$type,
|
|
1896
|
+
_ref2$dragDisabled = _ref2.dragDisabled,
|
|
1897
|
+
dragDisabled = _ref2$dragDisabled === void 0 ? false : _ref2$dragDisabled,
|
|
1898
|
+
_ref2$morphDisabled = _ref2.morphDisabled,
|
|
1899
|
+
morphDisabled = _ref2$morphDisabled === void 0 ? false : _ref2$morphDisabled,
|
|
1900
|
+
_ref2$dropFromOthersD = _ref2.dropFromOthersDisabled,
|
|
1901
|
+
dropFromOthersDisabled = _ref2$dropFromOthersD === void 0 ? false : _ref2$dropFromOthersD,
|
|
1902
|
+
_ref2$dropTargetStyle = _ref2.dropTargetStyle,
|
|
1903
|
+
dropTargetStyle = _ref2$dropTargetStyle === void 0 ? DEFAULT_DROP_TARGET_STYLE : _ref2$dropTargetStyle,
|
|
1904
|
+
_ref2$dropTargetClass = _ref2.dropTargetClasses,
|
|
1905
|
+
dropTargetClasses = _ref2$dropTargetClass === void 0 ? [] : _ref2$dropTargetClass,
|
|
1906
|
+
_ref2$transformDragge = _ref2.transformDraggedElement,
|
|
1907
|
+
transformDraggedElement = _ref2$transformDragge === void 0 ? function () {} : _ref2$transformDragge,
|
|
1908
|
+
_ref2$centreDraggedOn = _ref2.centreDraggedOnCursor,
|
|
1909
|
+
centreDraggedOnCursor = _ref2$centreDraggedOn === void 0 ? false : _ref2$centreDraggedOn;
|
|
1835
1910
|
config.dropAnimationDurationMs = dropAnimationDurationMs;
|
|
1836
1911
|
|
|
1837
1912
|
if (config.type && newType !== config.type) {
|
|
@@ -1846,7 +1921,7 @@ function dndzone(node, options) {
|
|
|
1846
1921
|
config.transformDraggedElement = transformDraggedElement;
|
|
1847
1922
|
config.centreDraggedOnCursor = centreDraggedOnCursor; // realtime update for dropTargetStyle
|
|
1848
1923
|
|
|
1849
|
-
if (isWorkingOnPreviousDrag && !finalizingPreviousDrag && (!areObjectsShallowEqual(dropTargetStyle, config.dropTargetStyle) || !areArraysShallowEqualSameOrder(dropTargetClasses, config.dropTargetClasses))) {
|
|
1924
|
+
if (initialized && isWorkingOnPreviousDrag && !finalizingPreviousDrag && (!areObjectsShallowEqual(dropTargetStyle, config.dropTargetStyle) || !areArraysShallowEqualSameOrder(dropTargetClasses, config.dropTargetClasses))) {
|
|
1850
1925
|
styleInactiveDropZones([node], function () {
|
|
1851
1926
|
return config.dropTargetStyle;
|
|
1852
1927
|
}, function () {
|
|
@@ -1866,7 +1941,7 @@ function dndzone(node, options) {
|
|
|
1866
1941
|
return dzToConfig.get(dz) ? dzToConfig.get(dz)[propName] : config[propName];
|
|
1867
1942
|
}
|
|
1868
1943
|
|
|
1869
|
-
if (isWorkingOnPreviousDrag && config.dropFromOthersDisabled !== dropFromOthersDisabled) {
|
|
1944
|
+
if (initialized && isWorkingOnPreviousDrag && config.dropFromOthersDisabled !== dropFromOthersDisabled) {
|
|
1870
1945
|
if (dropFromOthersDisabled) {
|
|
1871
1946
|
styleInactiveDropZones([node], function (dz) {
|
|
1872
1947
|
return getConfigProp(dz, "dropTargetStyle");
|
|
@@ -1912,6 +1987,10 @@ function dndzone(node, options) {
|
|
|
1912
1987
|
|
|
1913
1988
|
|
|
1914
1989
|
elToIdx.set(draggableEl, idx);
|
|
1990
|
+
|
|
1991
|
+
if (!initialized) {
|
|
1992
|
+
initialized = true;
|
|
1993
|
+
}
|
|
1915
1994
|
};
|
|
1916
1995
|
|
|
1917
1996
|
for (var idx = 0; idx < node.children.length; idx++) {
|
|
@@ -1930,11 +2009,22 @@ function dndzone(node, options) {
|
|
|
1930
2009
|
configure(newOptions);
|
|
1931
2010
|
},
|
|
1932
2011
|
destroy: function destroy() {
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
2012
|
+
function destroyDz() {
|
|
2013
|
+
printDebug(function () {
|
|
2014
|
+
return "pointer dndzone will destroy";
|
|
2015
|
+
});
|
|
2016
|
+
unregisterDropZone(node, dzToConfig.get(node).type);
|
|
2017
|
+
dzToConfig["delete"](node);
|
|
2018
|
+
}
|
|
2019
|
+
|
|
2020
|
+
if (isWorkingOnPreviousDrag) {
|
|
2021
|
+
printDebug(function () {
|
|
2022
|
+
return "pointer dndzone will be scheduled for destruction";
|
|
2023
|
+
});
|
|
2024
|
+
scheduleDZForRemovalAfterDrop(node, destroyDz);
|
|
2025
|
+
} else {
|
|
2026
|
+
destroyDz();
|
|
2027
|
+
}
|
|
1938
2028
|
}
|
|
1939
2029
|
};
|
|
1940
2030
|
}
|
package/package.json
CHANGED
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"dist"
|
|
41
41
|
],
|
|
42
42
|
"description": "*An awesome drag and drop library for Svelte 3 (not using the browser's built-in dnd, thanks god): Rich animations, nested containers, touch support and more *",
|
|
43
|
-
"version": "0.9.
|
|
43
|
+
"version": "0.9.18",
|
|
44
44
|
"repository": {
|
|
45
45
|
"type": "git",
|
|
46
46
|
"url": "git+https://github.com/isaacHagoel/svelte-dnd-action.git"
|
package/src/helpers/styler.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {SHADOW_ELEMENT_ATTRIBUTE_NAME, DRAGGED_ELEMENT_ID} from "../constants";
|
|
2
2
|
import {findCenter} from "./intersection";
|
|
3
|
+
import { svelteNodeClone } from "./svelteNodeClone";
|
|
3
4
|
|
|
4
5
|
const TRANSITION_DURATION_SECONDS = 0.2;
|
|
5
6
|
|
|
@@ -19,7 +20,7 @@ function trs(property) {
|
|
|
19
20
|
*/
|
|
20
21
|
export function createDraggedElementFrom(originalElement, positionCenterOnXY) {
|
|
21
22
|
const rect = originalElement.getBoundingClientRect();
|
|
22
|
-
const draggedEl = originalElement
|
|
23
|
+
const draggedEl = svelteNodeClone(originalElement);
|
|
23
24
|
copyStylesFromTo(originalElement, draggedEl);
|
|
24
25
|
draggedEl.id = DRAGGED_ELEMENT_ID;
|
|
25
26
|
draggedEl.style.position = "fixed";
|
|
@@ -135,7 +136,7 @@ export function styleDraggable(draggableEl, dragDisabled) {
|
|
|
135
136
|
* Hides the provided element so that it can stay in the dom without interrupting
|
|
136
137
|
* @param {HTMLElement} dragTarget
|
|
137
138
|
*/
|
|
138
|
-
export function
|
|
139
|
+
export function hideElement(dragTarget) {
|
|
139
140
|
dragTarget.style.display = "none";
|
|
140
141
|
dragTarget.style.position = "fixed";
|
|
141
142
|
dragTarget.style.zIndex = "-5";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fixes svelte issue when cloning node containing (or being) <select> which will loose it's value.
|
|
3
|
+
* Since svelte manages select value internally.
|
|
4
|
+
* @see https://github.com/sveltejs/svelte/issues/6717
|
|
5
|
+
* @see https://github.com/isaacHagoel/svelte-dnd-action/issues/306
|
|
6
|
+
*
|
|
7
|
+
* @param {HTMLElement} el
|
|
8
|
+
* @returns
|
|
9
|
+
*/
|
|
10
|
+
export function svelteNodeClone(el) {
|
|
11
|
+
const cloned = el.cloneNode(true);
|
|
12
|
+
|
|
13
|
+
const values = [];
|
|
14
|
+
const elIsSelect = el.tagName === "SELECT";
|
|
15
|
+
const selects = elIsSelect ? [el] : [...el.querySelectorAll('select')];
|
|
16
|
+
for (const select of selects) {
|
|
17
|
+
values.push(select.value);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (selects.length <= 0) {
|
|
21
|
+
return cloned;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const clonedSelects = elIsSelect ? [cloned] : [...cloned.querySelectorAll('select')];
|
|
25
|
+
for (let i = 0; i < clonedSelects.length; i++) {
|
|
26
|
+
const select = clonedSelects[i];
|
|
27
|
+
const value = values[i];
|
|
28
|
+
const optionEl = select.querySelector(`option[value="${value}"`);
|
|
29
|
+
if (optionEl) {
|
|
30
|
+
optionEl.setAttribute('selected', true);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return cloned;
|
|
35
|
+
}
|
package/src/pointerAction.js
CHANGED
|
@@ -13,7 +13,7 @@ import {armWindowScroller, disarmWindowScroller} from "./helpers/windowScroller"
|
|
|
13
13
|
import {
|
|
14
14
|
createDraggedElementFrom,
|
|
15
15
|
decorateShadowEl,
|
|
16
|
-
|
|
16
|
+
hideElement,
|
|
17
17
|
morphDraggedElementToBeLike,
|
|
18
18
|
moveDraggedElementToWasDroppedState,
|
|
19
19
|
preventShrinking,
|
|
@@ -55,6 +55,7 @@ let isWorkingOnPreviousDrag = false;
|
|
|
55
55
|
let finalizingPreviousDrag = false;
|
|
56
56
|
let unlockOriginDzMinDimensions;
|
|
57
57
|
let isDraggedOutsideOfAnyDz = false;
|
|
58
|
+
let scheduledForRemovalAfterDrop = [];
|
|
58
59
|
|
|
59
60
|
// a map from type to a set of drop-zones
|
|
60
61
|
const typeToDropZones = new Map();
|
|
@@ -280,10 +281,25 @@ function animateDraggedToFinalPosition(shadowElIdx, callback) {
|
|
|
280
281
|
window.setTimeout(callback, dropAnimationDurationMs);
|
|
281
282
|
}
|
|
282
283
|
|
|
284
|
+
function scheduleDZForRemovalAfterDrop(dz, destroy) {
|
|
285
|
+
scheduledForRemovalAfterDrop.push({dz, destroy});
|
|
286
|
+
window.requestAnimationFrame(() => {
|
|
287
|
+
hideElement(dz);
|
|
288
|
+
document.body.appendChild(dz);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
283
291
|
/* cleanup */
|
|
284
292
|
function cleanupPostDrop() {
|
|
285
293
|
draggedEl.remove();
|
|
286
294
|
originalDragTarget.remove();
|
|
295
|
+
if (scheduledForRemovalAfterDrop.length) {
|
|
296
|
+
printDebug(() => ["will destroy zones that were removed during drag", scheduledForRemovalAfterDrop]);
|
|
297
|
+
scheduledForRemovalAfterDrop.forEach(({dz, destroy}) => {
|
|
298
|
+
destroy();
|
|
299
|
+
dz.remove();
|
|
300
|
+
})
|
|
301
|
+
scheduledForRemovalAfterDrop = [];
|
|
302
|
+
}
|
|
287
303
|
draggedEl = undefined;
|
|
288
304
|
originalDragTarget = undefined;
|
|
289
305
|
draggedElData = undefined;
|
|
@@ -301,6 +317,7 @@ function cleanupPostDrop() {
|
|
|
301
317
|
}
|
|
302
318
|
|
|
303
319
|
export function dndzone(node, options) {
|
|
320
|
+
let initialized = false;
|
|
304
321
|
const config = {
|
|
305
322
|
items: undefined,
|
|
306
323
|
type: undefined,
|
|
@@ -397,7 +414,7 @@ export function dndzone(node, options) {
|
|
|
397
414
|
// to prevent the outline from disappearing
|
|
398
415
|
draggedEl.focus();
|
|
399
416
|
watchDraggedElement();
|
|
400
|
-
|
|
417
|
+
hideElement(originalDragTarget);
|
|
401
418
|
originDropZoneRoot.appendChild(originalDragTarget);
|
|
402
419
|
} else {
|
|
403
420
|
window.requestAnimationFrame(keepOriginalElementInDom);
|
|
@@ -442,7 +459,6 @@ export function dndzone(node, options) {
|
|
|
442
459
|
}
|
|
443
460
|
config.type = newType;
|
|
444
461
|
registerDropZone(node, newType);
|
|
445
|
-
|
|
446
462
|
config.items = [...items];
|
|
447
463
|
config.dragDisabled = dragDisabled;
|
|
448
464
|
config.morphDisabled = morphDisabled;
|
|
@@ -451,6 +467,7 @@ export function dndzone(node, options) {
|
|
|
451
467
|
|
|
452
468
|
// realtime update for dropTargetStyle
|
|
453
469
|
if (
|
|
470
|
+
initialized &&
|
|
454
471
|
isWorkingOnPreviousDrag &&
|
|
455
472
|
!finalizingPreviousDrag &&
|
|
456
473
|
(!areObjectsShallowEqual(dropTargetStyle, config.dropTargetStyle) ||
|
|
@@ -474,7 +491,7 @@ export function dndzone(node, options) {
|
|
|
474
491
|
function getConfigProp(dz, propName) {
|
|
475
492
|
return dzToConfig.get(dz) ? dzToConfig.get(dz)[propName] : config[propName];
|
|
476
493
|
}
|
|
477
|
-
if (isWorkingOnPreviousDrag && config.dropFromOthersDisabled !== dropFromOthersDisabled) {
|
|
494
|
+
if (initialized && isWorkingOnPreviousDrag && config.dropFromOthersDisabled !== dropFromOthersDisabled) {
|
|
478
495
|
if (dropFromOthersDisabled) {
|
|
479
496
|
styleInactiveDropZones(
|
|
480
497
|
[node],
|
|
@@ -514,6 +531,10 @@ export function dndzone(node, options) {
|
|
|
514
531
|
}
|
|
515
532
|
// updating the idx
|
|
516
533
|
elToIdx.set(draggableEl, idx);
|
|
534
|
+
|
|
535
|
+
if (!initialized) {
|
|
536
|
+
initialized = true;
|
|
537
|
+
}
|
|
517
538
|
}
|
|
518
539
|
}
|
|
519
540
|
configure(options);
|
|
@@ -524,9 +545,17 @@ export function dndzone(node, options) {
|
|
|
524
545
|
configure(newOptions);
|
|
525
546
|
},
|
|
526
547
|
destroy: () => {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
548
|
+
function destroyDz() {
|
|
549
|
+
printDebug(() => "pointer dndzone will destroy");
|
|
550
|
+
unregisterDropZone(node, dzToConfig.get(node).type);
|
|
551
|
+
dzToConfig.delete(node);
|
|
552
|
+
}
|
|
553
|
+
if (isWorkingOnPreviousDrag) {
|
|
554
|
+
printDebug(() => "pointer dndzone will be scheduled for destruction");
|
|
555
|
+
scheduleDZForRemovalAfterDrop(node, destroyDz);
|
|
556
|
+
} else {
|
|
557
|
+
destroyDz();
|
|
558
|
+
}
|
|
530
559
|
}
|
|
531
560
|
};
|
|
532
561
|
}
|