svelte-dnd-action 0.9.30 → 0.9.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +34 -14
- package/dist/index.mjs +34 -14
- package/package.json +1 -1
- package/src/action.js +5 -0
- package/src/helpers/svelteNodeClone.js +21 -9
- package/src/keyboardAction.js +6 -3
package/README.md
CHANGED
|
@@ -112,6 +112,7 @@ An options-object with the following attributes:
|
|
|
112
112
|
| `morphDisabled` | Boolean | No | `false` | By default, when dragging over a zone, the dragged element is morphed to look like it would if dropped. You can prevent it by setting this option. |
|
|
113
113
|
| `dropFromOthersDisabled` | Boolean | No | `false` | Setting it to true will make it impossible to drop elements from other dnd-zones of the same type. Can be useful if you want to limit the max number of items for example. You can change it at any time, and the zone will adjust on the fly |
|
|
114
114
|
| `zoneTabIndex` | Number | No | `0` | Allow user to set custom tabindex to the list container when not dragging. Can be useful if you want to make the screen reader to skip the list container. You can change it at any time. |
|
|
115
|
+
| `zoneItemTabIndex` | Number | No | `0` | Allow user to set custom tabindex to the list container items when not dragging. Can be useful if you use [Drag handles](https://github.com/isaacHagoel/svelte-dnd-action#examples-and-recipes). You can change it at any time. |
|
|
115
116
|
| `dropTargetStyle` | Object<String> | No | `{outline: 'rgba(255, 255, 102, 0.7) solid 2px'}` | An object of styles to apply to the dnd-zone when items can be dragged into it. Note: the styles override any inline styles applied to the dnd-zone. When the styles are removed, any original inline styles will be lost |
|
|
116
117
|
| `dropTargetClasses`| Array<String> | No | `[]` | A list of classes to apply to the dnd-zone when items can be dragged into it. Note: make sure the classes you use are global. |
|
|
117
118
|
| `transformDraggedElement` | Function | No | `() => {}` | A function that is invoked when the draggable element enters the dnd-zone or hover overs a new index in the current dnd-zone. <br />Signature:<br />function(element, data, index) {}<br />**element**: The dragged element. <br />**data**: The data of the item from the items array.<br />**index**: The index the dragged element will become in the new dnd-zone.<br /><br />This allows you to override properties on the dragged element, such as innerHTML to change how it displays. If what you are after is altering styles, do it to the children, not to the dragged element itself |
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export interface Options {
|
|
|
27
27
|
morphDisabled?: boolean;
|
|
28
28
|
dropFromOthersDisabled?: boolean;
|
|
29
29
|
zoneTabIndex?: number; // set the tabindex of the list container when not dragging
|
|
30
|
+
zoneItemTabIndex?: number; // set the tabindex of the list container items when not dragging
|
|
30
31
|
dropTargetClasses?: string[];
|
|
31
32
|
dropTargetStyle?: Record<string, string>;
|
|
32
33
|
transformDraggedElement?: TransformDraggedElementFunction;
|
package/dist/index.js
CHANGED
|
@@ -972,16 +972,27 @@
|
|
|
972
972
|
} finally {
|
|
973
973
|
_iterator.f();
|
|
974
974
|
}
|
|
975
|
-
if (selects.length
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
975
|
+
if (selects.length > 0) {
|
|
976
|
+
var clonedSelects = elIsSelect ? [cloned] : _toConsumableArray(cloned.querySelectorAll("select"));
|
|
977
|
+
for (var i = 0; i < clonedSelects.length; i++) {
|
|
978
|
+
var select = clonedSelects[i];
|
|
979
|
+
var value = values[i];
|
|
980
|
+
var optionEl = select.querySelector("option[value=\"".concat(value, "\""));
|
|
981
|
+
if (optionEl) {
|
|
982
|
+
optionEl.setAttribute("selected", true);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
var elIsCanvas = el.tagName === "CANVAS";
|
|
987
|
+
var canvases = elIsCanvas ? [el] : _toConsumableArray(el.querySelectorAll("canvas"));
|
|
988
|
+
if (canvases.length > 0) {
|
|
989
|
+
var clonedCanvases = elIsCanvas ? [cloned] : _toConsumableArray(cloned.querySelectorAll("canvas"));
|
|
990
|
+
for (var _i = 0; _i < clonedCanvases.length; _i++) {
|
|
991
|
+
var canvas = canvases[_i];
|
|
992
|
+
var clonedCanvas = clonedCanvases[_i];
|
|
993
|
+
clonedCanvas.width = canvas.width;
|
|
994
|
+
clonedCanvas.height = canvas.height;
|
|
995
|
+
clonedCanvas.getContext("2d").drawImage(canvas, 0, 0);
|
|
985
996
|
}
|
|
986
997
|
}
|
|
987
998
|
return cloned;
|
|
@@ -2118,6 +2129,7 @@
|
|
|
2118
2129
|
type: undefined,
|
|
2119
2130
|
dragDisabled: false,
|
|
2120
2131
|
zoneTabIndex: 0,
|
|
2132
|
+
zoneItemTabIndex: 0,
|
|
2121
2133
|
dropFromOthersDisabled: false,
|
|
2122
2134
|
dropTargetStyle: DEFAULT_DROP_TARGET_STYLE$1,
|
|
2123
2135
|
dropTargetClasses: [],
|
|
@@ -2247,7 +2259,7 @@
|
|
|
2247
2259
|
var children = Array.from(node.children);
|
|
2248
2260
|
var focusedItemIdx = children.indexOf(draggableEl);
|
|
2249
2261
|
focusedItem = draggableEl;
|
|
2250
|
-
focusedItem.tabIndex =
|
|
2262
|
+
focusedItem.tabIndex = config.zoneItemTabIndex;
|
|
2251
2263
|
focusedItemId = items[focusedItemIdx][ITEM_ID_KEY];
|
|
2252
2264
|
focusedItemLabel = children[focusedItemIdx].getAttribute("aria-label") || "";
|
|
2253
2265
|
}
|
|
@@ -2260,6 +2272,8 @@
|
|
|
2260
2272
|
dragDisabled = _ref2$dragDisabled === void 0 ? false : _ref2$dragDisabled,
|
|
2261
2273
|
_ref2$zoneTabIndex = _ref2.zoneTabIndex,
|
|
2262
2274
|
zoneTabIndex = _ref2$zoneTabIndex === void 0 ? 0 : _ref2$zoneTabIndex,
|
|
2275
|
+
_ref2$zoneItemTabInde = _ref2.zoneItemTabIndex,
|
|
2276
|
+
zoneItemTabIndex = _ref2$zoneItemTabInde === void 0 ? 0 : _ref2$zoneItemTabInde,
|
|
2263
2277
|
_ref2$dropFromOthersD = _ref2.dropFromOthersDisabled,
|
|
2264
2278
|
dropFromOthersDisabled = _ref2$dropFromOthersD === void 0 ? false : _ref2$dropFromOthersD,
|
|
2265
2279
|
_ref2$dropTargetStyle = _ref2.dropTargetStyle,
|
|
@@ -2272,6 +2286,7 @@
|
|
|
2272
2286
|
config.dragDisabled = dragDisabled;
|
|
2273
2287
|
config.dropFromOthersDisabled = dropFromOthersDisabled;
|
|
2274
2288
|
config.zoneTabIndex = zoneTabIndex;
|
|
2289
|
+
config.zoneItemTabIndex = zoneItemTabIndex;
|
|
2275
2290
|
config.dropTargetStyle = dropTargetStyle;
|
|
2276
2291
|
config.dropTargetClasses = dropTargetClasses;
|
|
2277
2292
|
config.autoAriaDisabled = autoAriaDisabled;
|
|
@@ -2295,7 +2310,7 @@
|
|
|
2295
2310
|
var _loop = function _loop(i) {
|
|
2296
2311
|
var draggableEl = node.children[i];
|
|
2297
2312
|
allDragTargets.add(draggableEl);
|
|
2298
|
-
draggableEl.tabIndex = isDragging ? -1 :
|
|
2313
|
+
draggableEl.tabIndex = isDragging ? -1 : config.zoneItemTabIndex;
|
|
2299
2314
|
if (!autoAriaDisabled) {
|
|
2300
2315
|
draggableEl.setAttribute("role", "listitem");
|
|
2301
2316
|
}
|
|
@@ -2316,7 +2331,7 @@
|
|
|
2316
2331
|
});
|
|
2317
2332
|
// if it is a nested dropzone, it was re-rendered and we need to refresh our pointer
|
|
2318
2333
|
focusedItem = draggableEl;
|
|
2319
|
-
focusedItem.tabIndex =
|
|
2334
|
+
focusedItem.tabIndex = config.zoneItemTabIndex;
|
|
2320
2335
|
// without this the element loses focus if it moves backwards in the list
|
|
2321
2336
|
draggableEl.focus();
|
|
2322
2337
|
}
|
|
@@ -2346,7 +2361,7 @@
|
|
|
2346
2361
|
return handles;
|
|
2347
2362
|
}
|
|
2348
2363
|
|
|
2349
|
-
var _excluded = ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "zoneTabIndex", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"];
|
|
2364
|
+
var _excluded = ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "zoneTabIndex", "zoneItemTabIndex", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"];
|
|
2350
2365
|
|
|
2351
2366
|
/**
|
|
2352
2367
|
* A custom action to turn any container to a dnd zone and all of its direct children to draggables
|
|
@@ -2362,6 +2377,7 @@
|
|
|
2362
2377
|
* @property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
|
|
2363
2378
|
* @property {boolean} [dropFromOthersDisabled]
|
|
2364
2379
|
* @property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
|
|
2380
|
+
* @property {number} [zoneItemTabIndex] - set the tabindex of the list container items when not dragging
|
|
2365
2381
|
* @property {object} [dropTargetStyle]
|
|
2366
2382
|
* @property {string[]} [dropTargetClasses]
|
|
2367
2383
|
* @property {function} [transformDraggedElement]
|
|
@@ -2410,6 +2426,7 @@
|
|
|
2410
2426
|
morphDisabled = options.morphDisabled,
|
|
2411
2427
|
dropFromOthersDisabled = options.dropFromOthersDisabled,
|
|
2412
2428
|
zoneTabIndex = options.zoneTabIndex,
|
|
2429
|
+
zoneItemTabIndex = options.zoneItemTabIndex,
|
|
2413
2430
|
dropTargetStyle = options.dropTargetStyle,
|
|
2414
2431
|
dropTargetClasses = options.dropTargetClasses,
|
|
2415
2432
|
transformDraggedElement = options.transformDraggedElement,
|
|
@@ -2435,6 +2452,9 @@
|
|
|
2435
2452
|
if (zoneTabIndex && !isInt(zoneTabIndex)) {
|
|
2436
2453
|
throw new Error("zoneTabIndex should be a number but instead it is a ".concat(_typeof(zoneTabIndex), ", ").concat(toString(zoneTabIndex)));
|
|
2437
2454
|
}
|
|
2455
|
+
if (zoneItemTabIndex && !isInt(zoneItemTabIndex)) {
|
|
2456
|
+
throw new Error("zoneItemTabIndex should be a number but instead it is a ".concat(_typeof(zoneItemTabIndex), ", ").concat(toString(zoneItemTabIndex)));
|
|
2457
|
+
}
|
|
2438
2458
|
}
|
|
2439
2459
|
function isInt(value) {
|
|
2440
2460
|
return !isNaN(value) && function (x) {
|
package/dist/index.mjs
CHANGED
|
@@ -966,16 +966,27 @@ function svelteNodeClone(el) {
|
|
|
966
966
|
} finally {
|
|
967
967
|
_iterator.f();
|
|
968
968
|
}
|
|
969
|
-
if (selects.length
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
969
|
+
if (selects.length > 0) {
|
|
970
|
+
var clonedSelects = elIsSelect ? [cloned] : _toConsumableArray(cloned.querySelectorAll("select"));
|
|
971
|
+
for (var i = 0; i < clonedSelects.length; i++) {
|
|
972
|
+
var select = clonedSelects[i];
|
|
973
|
+
var value = values[i];
|
|
974
|
+
var optionEl = select.querySelector("option[value=\"".concat(value, "\""));
|
|
975
|
+
if (optionEl) {
|
|
976
|
+
optionEl.setAttribute("selected", true);
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
var elIsCanvas = el.tagName === "CANVAS";
|
|
981
|
+
var canvases = elIsCanvas ? [el] : _toConsumableArray(el.querySelectorAll("canvas"));
|
|
982
|
+
if (canvases.length > 0) {
|
|
983
|
+
var clonedCanvases = elIsCanvas ? [cloned] : _toConsumableArray(cloned.querySelectorAll("canvas"));
|
|
984
|
+
for (var _i = 0; _i < clonedCanvases.length; _i++) {
|
|
985
|
+
var canvas = canvases[_i];
|
|
986
|
+
var clonedCanvas = clonedCanvases[_i];
|
|
987
|
+
clonedCanvas.width = canvas.width;
|
|
988
|
+
clonedCanvas.height = canvas.height;
|
|
989
|
+
clonedCanvas.getContext("2d").drawImage(canvas, 0, 0);
|
|
979
990
|
}
|
|
980
991
|
}
|
|
981
992
|
return cloned;
|
|
@@ -2112,6 +2123,7 @@ function dndzone$1(node, options) {
|
|
|
2112
2123
|
type: undefined,
|
|
2113
2124
|
dragDisabled: false,
|
|
2114
2125
|
zoneTabIndex: 0,
|
|
2126
|
+
zoneItemTabIndex: 0,
|
|
2115
2127
|
dropFromOthersDisabled: false,
|
|
2116
2128
|
dropTargetStyle: DEFAULT_DROP_TARGET_STYLE$1,
|
|
2117
2129
|
dropTargetClasses: [],
|
|
@@ -2241,7 +2253,7 @@ function dndzone$1(node, options) {
|
|
|
2241
2253
|
var children = Array.from(node.children);
|
|
2242
2254
|
var focusedItemIdx = children.indexOf(draggableEl);
|
|
2243
2255
|
focusedItem = draggableEl;
|
|
2244
|
-
focusedItem.tabIndex =
|
|
2256
|
+
focusedItem.tabIndex = config.zoneItemTabIndex;
|
|
2245
2257
|
focusedItemId = items[focusedItemIdx][ITEM_ID_KEY];
|
|
2246
2258
|
focusedItemLabel = children[focusedItemIdx].getAttribute("aria-label") || "";
|
|
2247
2259
|
}
|
|
@@ -2254,6 +2266,8 @@ function dndzone$1(node, options) {
|
|
|
2254
2266
|
dragDisabled = _ref2$dragDisabled === void 0 ? false : _ref2$dragDisabled,
|
|
2255
2267
|
_ref2$zoneTabIndex = _ref2.zoneTabIndex,
|
|
2256
2268
|
zoneTabIndex = _ref2$zoneTabIndex === void 0 ? 0 : _ref2$zoneTabIndex,
|
|
2269
|
+
_ref2$zoneItemTabInde = _ref2.zoneItemTabIndex,
|
|
2270
|
+
zoneItemTabIndex = _ref2$zoneItemTabInde === void 0 ? 0 : _ref2$zoneItemTabInde,
|
|
2257
2271
|
_ref2$dropFromOthersD = _ref2.dropFromOthersDisabled,
|
|
2258
2272
|
dropFromOthersDisabled = _ref2$dropFromOthersD === void 0 ? false : _ref2$dropFromOthersD,
|
|
2259
2273
|
_ref2$dropTargetStyle = _ref2.dropTargetStyle,
|
|
@@ -2266,6 +2280,7 @@ function dndzone$1(node, options) {
|
|
|
2266
2280
|
config.dragDisabled = dragDisabled;
|
|
2267
2281
|
config.dropFromOthersDisabled = dropFromOthersDisabled;
|
|
2268
2282
|
config.zoneTabIndex = zoneTabIndex;
|
|
2283
|
+
config.zoneItemTabIndex = zoneItemTabIndex;
|
|
2269
2284
|
config.dropTargetStyle = dropTargetStyle;
|
|
2270
2285
|
config.dropTargetClasses = dropTargetClasses;
|
|
2271
2286
|
config.autoAriaDisabled = autoAriaDisabled;
|
|
@@ -2289,7 +2304,7 @@ function dndzone$1(node, options) {
|
|
|
2289
2304
|
var _loop = function _loop(i) {
|
|
2290
2305
|
var draggableEl = node.children[i];
|
|
2291
2306
|
allDragTargets.add(draggableEl);
|
|
2292
|
-
draggableEl.tabIndex = isDragging ? -1 :
|
|
2307
|
+
draggableEl.tabIndex = isDragging ? -1 : config.zoneItemTabIndex;
|
|
2293
2308
|
if (!autoAriaDisabled) {
|
|
2294
2309
|
draggableEl.setAttribute("role", "listitem");
|
|
2295
2310
|
}
|
|
@@ -2310,7 +2325,7 @@ function dndzone$1(node, options) {
|
|
|
2310
2325
|
});
|
|
2311
2326
|
// if it is a nested dropzone, it was re-rendered and we need to refresh our pointer
|
|
2312
2327
|
focusedItem = draggableEl;
|
|
2313
|
-
focusedItem.tabIndex =
|
|
2328
|
+
focusedItem.tabIndex = config.zoneItemTabIndex;
|
|
2314
2329
|
// without this the element loses focus if it moves backwards in the list
|
|
2315
2330
|
draggableEl.focus();
|
|
2316
2331
|
}
|
|
@@ -2340,7 +2355,7 @@ function dndzone$1(node, options) {
|
|
|
2340
2355
|
return handles;
|
|
2341
2356
|
}
|
|
2342
2357
|
|
|
2343
|
-
var _excluded = ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "zoneTabIndex", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"];
|
|
2358
|
+
var _excluded = ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "zoneTabIndex", "zoneItemTabIndex", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"];
|
|
2344
2359
|
|
|
2345
2360
|
/**
|
|
2346
2361
|
* A custom action to turn any container to a dnd zone and all of its direct children to draggables
|
|
@@ -2356,6 +2371,7 @@ var _excluded = ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabl
|
|
|
2356
2371
|
* @property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
|
|
2357
2372
|
* @property {boolean} [dropFromOthersDisabled]
|
|
2358
2373
|
* @property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
|
|
2374
|
+
* @property {number} [zoneItemTabIndex] - set the tabindex of the list container items when not dragging
|
|
2359
2375
|
* @property {object} [dropTargetStyle]
|
|
2360
2376
|
* @property {string[]} [dropTargetClasses]
|
|
2361
2377
|
* @property {function} [transformDraggedElement]
|
|
@@ -2404,6 +2420,7 @@ function validateOptions(options) {
|
|
|
2404
2420
|
morphDisabled = options.morphDisabled,
|
|
2405
2421
|
dropFromOthersDisabled = options.dropFromOthersDisabled,
|
|
2406
2422
|
zoneTabIndex = options.zoneTabIndex,
|
|
2423
|
+
zoneItemTabIndex = options.zoneItemTabIndex,
|
|
2407
2424
|
dropTargetStyle = options.dropTargetStyle,
|
|
2408
2425
|
dropTargetClasses = options.dropTargetClasses,
|
|
2409
2426
|
transformDraggedElement = options.transformDraggedElement,
|
|
@@ -2429,6 +2446,9 @@ function validateOptions(options) {
|
|
|
2429
2446
|
if (zoneTabIndex && !isInt(zoneTabIndex)) {
|
|
2430
2447
|
throw new Error("zoneTabIndex should be a number but instead it is a ".concat(_typeof(zoneTabIndex), ", ").concat(toString(zoneTabIndex)));
|
|
2431
2448
|
}
|
|
2449
|
+
if (zoneItemTabIndex && !isInt(zoneItemTabIndex)) {
|
|
2450
|
+
throw new Error("zoneItemTabIndex should be a number but instead it is a ".concat(_typeof(zoneItemTabIndex), ", ").concat(toString(zoneItemTabIndex)));
|
|
2451
|
+
}
|
|
2432
2452
|
}
|
|
2433
2453
|
function isInt(value) {
|
|
2434
2454
|
return !isNaN(value) && function (x) {
|
package/package.json
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"dist"
|
|
44
44
|
],
|
|
45
45
|
"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 *",
|
|
46
|
-
"version": "0.9.
|
|
46
|
+
"version": "0.9.32",
|
|
47
47
|
"repository": {
|
|
48
48
|
"type": "git",
|
|
49
49
|
"url": "git+https://github.com/isaacHagoel/svelte-dnd-action.git"
|
package/src/action.js
CHANGED
|
@@ -17,6 +17,7 @@ import {toString} from "./helpers/util";
|
|
|
17
17
|
* @property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
|
|
18
18
|
* @property {boolean} [dropFromOthersDisabled]
|
|
19
19
|
* @property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
|
|
20
|
+
* @property {number} [zoneItemTabIndex] - set the tabindex of the list container items when not dragging
|
|
20
21
|
* @property {object} [dropTargetStyle]
|
|
21
22
|
* @property {string[]} [dropTargetClasses]
|
|
22
23
|
* @property {function} [transformDraggedElement]
|
|
@@ -67,6 +68,7 @@ function validateOptions(options) {
|
|
|
67
68
|
morphDisabled,
|
|
68
69
|
dropFromOthersDisabled,
|
|
69
70
|
zoneTabIndex,
|
|
71
|
+
zoneItemTabIndex,
|
|
70
72
|
dropTargetStyle,
|
|
71
73
|
dropTargetClasses,
|
|
72
74
|
transformDraggedElement,
|
|
@@ -91,6 +93,9 @@ function validateOptions(options) {
|
|
|
91
93
|
if (zoneTabIndex && !isInt(zoneTabIndex)) {
|
|
92
94
|
throw new Error(`zoneTabIndex should be a number but instead it is a ${typeof zoneTabIndex}, ${toString(zoneTabIndex)}`);
|
|
93
95
|
}
|
|
96
|
+
if (zoneItemTabIndex && !isInt(zoneItemTabIndex)) {
|
|
97
|
+
throw new Error(`zoneItemTabIndex should be a number but instead it is a ${typeof zoneItemTabIndex}, ${toString(zoneItemTabIndex)}`);
|
|
98
|
+
}
|
|
94
99
|
}
|
|
95
100
|
|
|
96
101
|
function isInt(value) {
|
|
@@ -17,17 +17,29 @@ export function svelteNodeClone(el) {
|
|
|
17
17
|
values.push(select.value);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
if (selects.length
|
|
21
|
-
|
|
20
|
+
if (selects.length > 0) {
|
|
21
|
+
const clonedSelects = elIsSelect ? [cloned] : [...cloned.querySelectorAll("select")];
|
|
22
|
+
for (let i = 0; i < clonedSelects.length; i++) {
|
|
23
|
+
const select = clonedSelects[i];
|
|
24
|
+
const value = values[i];
|
|
25
|
+
const optionEl = select.querySelector(`option[value="${value}"`);
|
|
26
|
+
if (optionEl) {
|
|
27
|
+
optionEl.setAttribute("selected", true);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
22
30
|
}
|
|
23
31
|
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
const elIsCanvas = el.tagName === "CANVAS";
|
|
33
|
+
const canvases = elIsCanvas ? [el] : [...el.querySelectorAll("canvas")];
|
|
34
|
+
if(canvases.length > 0)
|
|
35
|
+
{
|
|
36
|
+
const clonedCanvases = elIsCanvas ? [cloned] : [...cloned.querySelectorAll("canvas")];
|
|
37
|
+
for (let i = 0; i < clonedCanvases.length; i++) {
|
|
38
|
+
const canvas = canvases[i];
|
|
39
|
+
const clonedCanvas = clonedCanvases[i];
|
|
40
|
+
clonedCanvas.width = canvas.width;
|
|
41
|
+
clonedCanvas.height = canvas.height;
|
|
42
|
+
clonedCanvas.getContext("2d").drawImage(canvas,0,0);
|
|
31
43
|
}
|
|
32
44
|
}
|
|
33
45
|
|
package/src/keyboardAction.js
CHANGED
|
@@ -157,6 +157,7 @@ export function dndzone(node, options) {
|
|
|
157
157
|
type: undefined,
|
|
158
158
|
dragDisabled: false,
|
|
159
159
|
zoneTabIndex: 0,
|
|
160
|
+
zoneItemTabIndex: 0,
|
|
160
161
|
dropFromOthersDisabled: false,
|
|
161
162
|
dropTargetStyle: DEFAULT_DROP_TARGET_STYLE,
|
|
162
163
|
dropTargetClasses: [],
|
|
@@ -261,7 +262,7 @@ export function dndzone(node, options) {
|
|
|
261
262
|
const children = Array.from(node.children);
|
|
262
263
|
const focusedItemIdx = children.indexOf(draggableEl);
|
|
263
264
|
focusedItem = draggableEl;
|
|
264
|
-
focusedItem.tabIndex =
|
|
265
|
+
focusedItem.tabIndex = config.zoneItemTabIndex;
|
|
265
266
|
focusedItemId = items[focusedItemIdx][ITEM_ID_KEY];
|
|
266
267
|
focusedItemLabel = children[focusedItemIdx].getAttribute("aria-label") || "";
|
|
267
268
|
}
|
|
@@ -271,6 +272,7 @@ export function dndzone(node, options) {
|
|
|
271
272
|
type: newType = DEFAULT_DROP_ZONE_TYPE,
|
|
272
273
|
dragDisabled = false,
|
|
273
274
|
zoneTabIndex = 0,
|
|
275
|
+
zoneItemTabIndex = 0,
|
|
274
276
|
dropFromOthersDisabled = false,
|
|
275
277
|
dropTargetStyle = DEFAULT_DROP_TARGET_STYLE,
|
|
276
278
|
dropTargetClasses = [],
|
|
@@ -280,6 +282,7 @@ export function dndzone(node, options) {
|
|
|
280
282
|
config.dragDisabled = dragDisabled;
|
|
281
283
|
config.dropFromOthersDisabled = dropFromOthersDisabled;
|
|
282
284
|
config.zoneTabIndex = zoneTabIndex;
|
|
285
|
+
config.zoneItemTabIndex = zoneItemTabIndex;
|
|
283
286
|
config.dropTargetStyle = dropTargetStyle;
|
|
284
287
|
config.dropTargetClasses = dropTargetClasses;
|
|
285
288
|
config.autoAriaDisabled = autoAriaDisabled;
|
|
@@ -312,7 +315,7 @@ export function dndzone(node, options) {
|
|
|
312
315
|
for (let i = 0; i < node.children.length; i++) {
|
|
313
316
|
const draggableEl = node.children[i];
|
|
314
317
|
allDragTargets.add(draggableEl);
|
|
315
|
-
draggableEl.tabIndex = isDragging ? -1 :
|
|
318
|
+
draggableEl.tabIndex = isDragging ? -1 : config.zoneItemTabIndex;
|
|
316
319
|
if (!autoAriaDisabled) {
|
|
317
320
|
draggableEl.setAttribute("role", "listitem");
|
|
318
321
|
}
|
|
@@ -328,7 +331,7 @@ export function dndzone(node, options) {
|
|
|
328
331
|
printDebug(() => ["focusing on", {i, focusedItemId}]);
|
|
329
332
|
// if it is a nested dropzone, it was re-rendered and we need to refresh our pointer
|
|
330
333
|
focusedItem = draggableEl;
|
|
331
|
-
focusedItem.tabIndex =
|
|
334
|
+
focusedItem.tabIndex = config.zoneItemTabIndex;
|
|
332
335
|
// without this the element loses focus if it moves backwards in the list
|
|
333
336
|
draggableEl.focus();
|
|
334
337
|
}
|