svelte-dnd-action 0.9.9 → 0.9.13
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 +2 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +24 -2
- package/dist/index.mjs +24 -2
- package/package.json +1 -1
- package/src/action.js +9 -0
- package/src/keyboardAction.js +11 -4
package/README.md
CHANGED
|
@@ -111,6 +111,7 @@ An options-object with the following attributes:
|
|
|
111
111
|
| `dragDisabled` | Boolean | No | `false` | Setting it to true will make it impossible to drag elements out of the dnd-zone. You can change it at any time, and the zone will adjust on the fly |
|
|
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
|
+
| `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. |
|
|
114
115
|
| `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 |
|
|
115
116
|
| `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. |
|
|
116
117
|
| `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 |
|
|
@@ -188,6 +189,7 @@ If you want to implement your own custom screen-reader alerts, roles and instruc
|
|
|
188
189
|
- [Generic List Component (Alternative to Slots)](https://svelte.dev/repl/028674733f67409c94bd52995d5906f1?version=3.31.0)
|
|
189
190
|
- [Maitaining internal scroll poisition on scrollable dragabble](https://svelte.dev/repl/eb2f5988bd2f46488810606c1fb13392?version=3.29.4)
|
|
190
191
|
- [Scrabble like board using over a 100 single slot dnd-zones](https://svelte.dev/repl/ed2e138417094281be6db1aef23d7859?version=3.37.0)
|
|
192
|
+
- [Select multiple elements to drag (multi-drag) with mouse or keyboard](https://svelte.dev/repl/c4eb917bb8df42c4b17402a7dda54856?version=3.24.1)
|
|
191
193
|
|
|
192
194
|
- [Fade in/out but without using Svelte transitions](https://svelte.dev/repl/3f1e68203ef140969a8240eba3475a8d?version=3.24.1)
|
|
193
195
|
- [Nested fade in/out without using Svelte transitions](https://svelte.dev/repl/49b09aedfe0543b4bc8f575c8dbf9a53?version=3.24.1)
|
package/dist/index.d.ts
CHANGED
|
@@ -26,7 +26,8 @@ export interface Options {
|
|
|
26
26
|
dragDisabled?: boolean;
|
|
27
27
|
morphDisabled?: boolean;
|
|
28
28
|
dropFromOthersDisabled?: boolean;
|
|
29
|
-
|
|
29
|
+
zoneTabIndex?: number; // set the tabindex of the list container when not dragging
|
|
30
|
+
dropTargetClasses?: string[];
|
|
30
31
|
dropTargetStyle?: Record<string, string>;
|
|
31
32
|
transformDraggedElement?: TransformDraggedElementFunction;
|
|
32
33
|
autoAriaDisabled?: boolean;
|
package/dist/index.js
CHANGED
|
@@ -2207,6 +2207,7 @@
|
|
|
2207
2207
|
items: undefined,
|
|
2208
2208
|
type: undefined,
|
|
2209
2209
|
dragDisabled: false,
|
|
2210
|
+
zoneTabIndex: 0,
|
|
2210
2211
|
dropFromOthersDisabled: false,
|
|
2211
2212
|
dropTargetStyle: DEFAULT_DROP_TARGET_STYLE$1,
|
|
2212
2213
|
dropTargetClasses: [],
|
|
@@ -2379,6 +2380,8 @@
|
|
|
2379
2380
|
newType = _ref2$type === void 0 ? DEFAULT_DROP_ZONE_TYPE$1 : _ref2$type,
|
|
2380
2381
|
_ref2$dragDisabled = _ref2.dragDisabled,
|
|
2381
2382
|
dragDisabled = _ref2$dragDisabled === void 0 ? false : _ref2$dragDisabled,
|
|
2383
|
+
_ref2$zoneTabIndex = _ref2.zoneTabIndex,
|
|
2384
|
+
zoneTabIndex = _ref2$zoneTabIndex === void 0 ? 0 : _ref2$zoneTabIndex,
|
|
2382
2385
|
_ref2$dropFromOthersD = _ref2.dropFromOthersDisabled,
|
|
2383
2386
|
dropFromOthersDisabled = _ref2$dropFromOthersD === void 0 ? false : _ref2$dropFromOthersD,
|
|
2384
2387
|
_ref2$dropTargetStyle = _ref2.dropTargetStyle,
|
|
@@ -2390,6 +2393,7 @@
|
|
|
2390
2393
|
config.items = _toConsumableArray(items);
|
|
2391
2394
|
config.dragDisabled = dragDisabled;
|
|
2392
2395
|
config.dropFromOthersDisabled = dropFromOthersDisabled;
|
|
2396
|
+
config.zoneTabIndex = zoneTabIndex;
|
|
2393
2397
|
config.dropTargetStyle = dropTargetStyle;
|
|
2394
2398
|
config.dropTargetClasses = dropTargetClasses;
|
|
2395
2399
|
config.autoAriaDisabled = autoAriaDisabled;
|
|
@@ -2407,7 +2411,13 @@
|
|
|
2407
2411
|
config.type = newType;
|
|
2408
2412
|
registerDropZone$1(node, newType);
|
|
2409
2413
|
dzToConfig$1.set(node, config);
|
|
2410
|
-
|
|
2414
|
+
|
|
2415
|
+
if (isDragging) {
|
|
2416
|
+
node.tabIndex = node === focusedDz || focusedItem.contains(node) || config.dropFromOthersDisabled || focusedDz && config.type !== dzToConfig$1.get(focusedDz).type ? -1 : 0;
|
|
2417
|
+
} else {
|
|
2418
|
+
node.tabIndex = config.zoneTabIndex;
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2411
2421
|
node.addEventListener("focus", handleZoneFocus);
|
|
2412
2422
|
|
|
2413
2423
|
var _loop = function _loop(i) {
|
|
@@ -2483,6 +2493,7 @@
|
|
|
2483
2493
|
* @property {boolean} [dragDisabled]
|
|
2484
2494
|
* @property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
|
|
2485
2495
|
* @property {boolean} [dropFromOthersDisabled]
|
|
2496
|
+
* @property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
|
|
2486
2497
|
* @property {object} [dropTargetStyle]
|
|
2487
2498
|
* @property {string[]} [dropTargetClasses]
|
|
2488
2499
|
* @property {function} [transformDraggedElement]
|
|
@@ -2516,12 +2527,13 @@
|
|
|
2516
2527
|
dragDisabled = options.dragDisabled,
|
|
2517
2528
|
morphDisabled = options.morphDisabled,
|
|
2518
2529
|
dropFromOthersDisabled = options.dropFromOthersDisabled,
|
|
2530
|
+
zoneTabIndex = options.zoneTabIndex,
|
|
2519
2531
|
dropTargetStyle = options.dropTargetStyle,
|
|
2520
2532
|
dropTargetClasses = options.dropTargetClasses,
|
|
2521
2533
|
transformDraggedElement = options.transformDraggedElement,
|
|
2522
2534
|
autoAriaDisabled = options.autoAriaDisabled,
|
|
2523
2535
|
centreDraggedOnCursor = options.centreDraggedOnCursor,
|
|
2524
|
-
rest = _objectWithoutProperties(options, ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"]);
|
|
2536
|
+
rest = _objectWithoutProperties(options, ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "zoneTabIndex", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"]);
|
|
2525
2537
|
/*eslint-enable*/
|
|
2526
2538
|
|
|
2527
2539
|
|
|
@@ -2544,6 +2556,16 @@
|
|
|
2544
2556
|
if (dropTargetClasses && !Array.isArray(dropTargetClasses)) {
|
|
2545
2557
|
throw new Error("dropTargetClasses should be an array but instead it is a ".concat(_typeof(dropTargetClasses), ", ").concat(toString(dropTargetClasses)));
|
|
2546
2558
|
}
|
|
2559
|
+
|
|
2560
|
+
if (zoneTabIndex && !isInt(zoneTabIndex)) {
|
|
2561
|
+
throw new Error("zoneTabIndex should be a number but instead it is a ".concat(_typeof(zoneTabIndex), ", ").concat(toString(zoneTabIndex)));
|
|
2562
|
+
}
|
|
2563
|
+
}
|
|
2564
|
+
|
|
2565
|
+
function isInt(value) {
|
|
2566
|
+
return !isNaN(value) && function (x) {
|
|
2567
|
+
return (x | 0) === x;
|
|
2568
|
+
}(parseFloat(value));
|
|
2547
2569
|
}
|
|
2548
2570
|
|
|
2549
2571
|
exports.DRAGGED_ELEMENT_ID = DRAGGED_ELEMENT_ID;
|
package/dist/index.mjs
CHANGED
|
@@ -2201,6 +2201,7 @@ function dndzone$1(node, options) {
|
|
|
2201
2201
|
items: undefined,
|
|
2202
2202
|
type: undefined,
|
|
2203
2203
|
dragDisabled: false,
|
|
2204
|
+
zoneTabIndex: 0,
|
|
2204
2205
|
dropFromOthersDisabled: false,
|
|
2205
2206
|
dropTargetStyle: DEFAULT_DROP_TARGET_STYLE$1,
|
|
2206
2207
|
dropTargetClasses: [],
|
|
@@ -2373,6 +2374,8 @@ function dndzone$1(node, options) {
|
|
|
2373
2374
|
newType = _ref2$type === void 0 ? DEFAULT_DROP_ZONE_TYPE$1 : _ref2$type,
|
|
2374
2375
|
_ref2$dragDisabled = _ref2.dragDisabled,
|
|
2375
2376
|
dragDisabled = _ref2$dragDisabled === void 0 ? false : _ref2$dragDisabled,
|
|
2377
|
+
_ref2$zoneTabIndex = _ref2.zoneTabIndex,
|
|
2378
|
+
zoneTabIndex = _ref2$zoneTabIndex === void 0 ? 0 : _ref2$zoneTabIndex,
|
|
2376
2379
|
_ref2$dropFromOthersD = _ref2.dropFromOthersDisabled,
|
|
2377
2380
|
dropFromOthersDisabled = _ref2$dropFromOthersD === void 0 ? false : _ref2$dropFromOthersD,
|
|
2378
2381
|
_ref2$dropTargetStyle = _ref2.dropTargetStyle,
|
|
@@ -2384,6 +2387,7 @@ function dndzone$1(node, options) {
|
|
|
2384
2387
|
config.items = _toConsumableArray(items);
|
|
2385
2388
|
config.dragDisabled = dragDisabled;
|
|
2386
2389
|
config.dropFromOthersDisabled = dropFromOthersDisabled;
|
|
2390
|
+
config.zoneTabIndex = zoneTabIndex;
|
|
2387
2391
|
config.dropTargetStyle = dropTargetStyle;
|
|
2388
2392
|
config.dropTargetClasses = dropTargetClasses;
|
|
2389
2393
|
config.autoAriaDisabled = autoAriaDisabled;
|
|
@@ -2401,7 +2405,13 @@ function dndzone$1(node, options) {
|
|
|
2401
2405
|
config.type = newType;
|
|
2402
2406
|
registerDropZone$1(node, newType);
|
|
2403
2407
|
dzToConfig$1.set(node, config);
|
|
2404
|
-
|
|
2408
|
+
|
|
2409
|
+
if (isDragging) {
|
|
2410
|
+
node.tabIndex = node === focusedDz || focusedItem.contains(node) || config.dropFromOthersDisabled || focusedDz && config.type !== dzToConfig$1.get(focusedDz).type ? -1 : 0;
|
|
2411
|
+
} else {
|
|
2412
|
+
node.tabIndex = config.zoneTabIndex;
|
|
2413
|
+
}
|
|
2414
|
+
|
|
2405
2415
|
node.addEventListener("focus", handleZoneFocus);
|
|
2406
2416
|
|
|
2407
2417
|
var _loop = function _loop(i) {
|
|
@@ -2477,6 +2487,7 @@ function dndzone$1(node, options) {
|
|
|
2477
2487
|
* @property {boolean} [dragDisabled]
|
|
2478
2488
|
* @property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
|
|
2479
2489
|
* @property {boolean} [dropFromOthersDisabled]
|
|
2490
|
+
* @property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
|
|
2480
2491
|
* @property {object} [dropTargetStyle]
|
|
2481
2492
|
* @property {string[]} [dropTargetClasses]
|
|
2482
2493
|
* @property {function} [transformDraggedElement]
|
|
@@ -2510,12 +2521,13 @@ function validateOptions(options) {
|
|
|
2510
2521
|
dragDisabled = options.dragDisabled,
|
|
2511
2522
|
morphDisabled = options.morphDisabled,
|
|
2512
2523
|
dropFromOthersDisabled = options.dropFromOthersDisabled,
|
|
2524
|
+
zoneTabIndex = options.zoneTabIndex,
|
|
2513
2525
|
dropTargetStyle = options.dropTargetStyle,
|
|
2514
2526
|
dropTargetClasses = options.dropTargetClasses,
|
|
2515
2527
|
transformDraggedElement = options.transformDraggedElement,
|
|
2516
2528
|
autoAriaDisabled = options.autoAriaDisabled,
|
|
2517
2529
|
centreDraggedOnCursor = options.centreDraggedOnCursor,
|
|
2518
|
-
rest = _objectWithoutProperties(options, ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"]);
|
|
2530
|
+
rest = _objectWithoutProperties(options, ["items", "flipDurationMs", "type", "dragDisabled", "morphDisabled", "dropFromOthersDisabled", "zoneTabIndex", "dropTargetStyle", "dropTargetClasses", "transformDraggedElement", "autoAriaDisabled", "centreDraggedOnCursor"]);
|
|
2519
2531
|
/*eslint-enable*/
|
|
2520
2532
|
|
|
2521
2533
|
|
|
@@ -2538,6 +2550,16 @@ function validateOptions(options) {
|
|
|
2538
2550
|
if (dropTargetClasses && !Array.isArray(dropTargetClasses)) {
|
|
2539
2551
|
throw new Error("dropTargetClasses should be an array but instead it is a ".concat(_typeof(dropTargetClasses), ", ").concat(toString(dropTargetClasses)));
|
|
2540
2552
|
}
|
|
2553
|
+
|
|
2554
|
+
if (zoneTabIndex && !isInt(zoneTabIndex)) {
|
|
2555
|
+
throw new Error("zoneTabIndex should be a number but instead it is a ".concat(_typeof(zoneTabIndex), ", ").concat(toString(zoneTabIndex)));
|
|
2556
|
+
}
|
|
2557
|
+
}
|
|
2558
|
+
|
|
2559
|
+
function isInt(value) {
|
|
2560
|
+
return !isNaN(value) && function (x) {
|
|
2561
|
+
return (x | 0) === x;
|
|
2562
|
+
}(parseFloat(value));
|
|
2541
2563
|
}
|
|
2542
2564
|
|
|
2543
2565
|
export { DRAGGED_ELEMENT_ID, SHADOW_ITEM_MARKER_PROPERTY_NAME, SHADOW_PLACEHOLDER_ITEM_ID, SOURCES, TRIGGERS, alertToScreenReader, dndzone$2 as dndzone, overrideItemIdKeyNameBeforeInitialisingDndZones, setDebugMode };
|
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.13",
|
|
44
44
|
"repository": {
|
|
45
45
|
"type": "git",
|
|
46
46
|
"url": "git+https://github.com/isaacHagoel/svelte-dnd-action.git"
|
package/src/action.js
CHANGED
|
@@ -16,6 +16,7 @@ import {toString} from "./helpers/util";
|
|
|
16
16
|
* @property {boolean} [dragDisabled]
|
|
17
17
|
* @property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
|
|
18
18
|
* @property {boolean} [dropFromOthersDisabled]
|
|
19
|
+
* @property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
|
|
19
20
|
* @property {object} [dropTargetStyle]
|
|
20
21
|
* @property {string[]} [dropTargetClasses]
|
|
21
22
|
* @property {function} [transformDraggedElement]
|
|
@@ -49,6 +50,7 @@ function validateOptions(options) {
|
|
|
49
50
|
dragDisabled,
|
|
50
51
|
morphDisabled,
|
|
51
52
|
dropFromOthersDisabled,
|
|
53
|
+
zoneTabIndex,
|
|
52
54
|
dropTargetStyle,
|
|
53
55
|
dropTargetClasses,
|
|
54
56
|
transformDraggedElement,
|
|
@@ -70,4 +72,11 @@ function validateOptions(options) {
|
|
|
70
72
|
if (dropTargetClasses && !Array.isArray(dropTargetClasses)) {
|
|
71
73
|
throw new Error(`dropTargetClasses should be an array but instead it is a ${typeof dropTargetClasses}, ${toString(dropTargetClasses)}`);
|
|
72
74
|
}
|
|
75
|
+
if (zoneTabIndex && !isInt(zoneTabIndex)) {
|
|
76
|
+
throw new Error(`zoneTabIndex should be a number but instead it is a ${typeof zoneTabIndex}, ${toString(zoneTabIndex)}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function isInt(value) {
|
|
81
|
+
return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value));
|
|
73
82
|
}
|
package/src/keyboardAction.js
CHANGED
|
@@ -153,6 +153,7 @@ export function dndzone(node, options) {
|
|
|
153
153
|
items: undefined,
|
|
154
154
|
type: undefined,
|
|
155
155
|
dragDisabled: false,
|
|
156
|
+
zoneTabIndex: 0,
|
|
156
157
|
dropFromOthersDisabled: false,
|
|
157
158
|
dropTargetStyle: DEFAULT_DROP_TARGET_STYLE,
|
|
158
159
|
dropTargetClasses: [],
|
|
@@ -266,6 +267,7 @@ export function dndzone(node, options) {
|
|
|
266
267
|
items = [],
|
|
267
268
|
type: newType = DEFAULT_DROP_ZONE_TYPE,
|
|
268
269
|
dragDisabled = false,
|
|
270
|
+
zoneTabIndex = 0,
|
|
269
271
|
dropFromOthersDisabled = false,
|
|
270
272
|
dropTargetStyle = DEFAULT_DROP_TARGET_STYLE,
|
|
271
273
|
dropTargetClasses = [],
|
|
@@ -274,6 +276,7 @@ export function dndzone(node, options) {
|
|
|
274
276
|
config.items = [...items];
|
|
275
277
|
config.dragDisabled = dragDisabled;
|
|
276
278
|
config.dropFromOthersDisabled = dropFromOthersDisabled;
|
|
279
|
+
config.zoneTabIndex = zoneTabIndex;
|
|
277
280
|
config.dropTargetStyle = dropTargetStyle;
|
|
278
281
|
config.dropTargetClasses = dropTargetClasses;
|
|
279
282
|
config.autoAriaDisabled = autoAriaDisabled;
|
|
@@ -289,14 +292,18 @@ export function dndzone(node, options) {
|
|
|
289
292
|
registerDropZone(node, newType);
|
|
290
293
|
dzToConfig.set(node, config);
|
|
291
294
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
+
if (isDragging) {
|
|
296
|
+
node.tabIndex =
|
|
297
|
+
node === focusedDz ||
|
|
295
298
|
focusedItem.contains(node) ||
|
|
296
299
|
config.dropFromOthersDisabled ||
|
|
297
|
-
(focusedDz && config.type !== dzToConfig.get(focusedDz).type)
|
|
300
|
+
(focusedDz && config.type !== dzToConfig.get(focusedDz).type)
|
|
298
301
|
? -1
|
|
299
302
|
: 0;
|
|
303
|
+
} else {
|
|
304
|
+
node.tabIndex = config.zoneTabIndex;
|
|
305
|
+
}
|
|
306
|
+
|
|
300
307
|
node.addEventListener("focus", handleZoneFocus);
|
|
301
308
|
|
|
302
309
|
for (let i = 0; i < node.children.length; i++) {
|