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 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 <= 0) {
976
- return cloned;
977
- }
978
- var clonedSelects = elIsSelect ? [cloned] : _toConsumableArray(cloned.querySelectorAll("select"));
979
- for (var i = 0; i < clonedSelects.length; i++) {
980
- var select = clonedSelects[i];
981
- var value = values[i];
982
- var optionEl = select.querySelector("option[value=\"".concat(value, "\""));
983
- if (optionEl) {
984
- optionEl.setAttribute("selected", true);
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 = 0;
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 : 0;
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 = 0;
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 <= 0) {
970
- return cloned;
971
- }
972
- var clonedSelects = elIsSelect ? [cloned] : _toConsumableArray(cloned.querySelectorAll("select"));
973
- for (var i = 0; i < clonedSelects.length; i++) {
974
- var select = clonedSelects[i];
975
- var value = values[i];
976
- var optionEl = select.querySelector("option[value=\"".concat(value, "\""));
977
- if (optionEl) {
978
- optionEl.setAttribute("selected", true);
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 = 0;
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 : 0;
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 = 0;
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.30",
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 <= 0) {
21
- return cloned;
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 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);
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
 
@@ -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 = 0;
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 : 0;
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 = 0;
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
  }