@marianmeres/stuic 1.66.0 → 1.68.0
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/actions/drag-drop.d.ts +4 -2
- package/dist/actions/drag-drop.js +43 -24
- package/package.json +1 -1
|
@@ -7,7 +7,8 @@ export interface DraggableOptions {
|
|
|
7
7
|
enabled?: boolean;
|
|
8
8
|
payload?: any;
|
|
9
9
|
effectAllowed?: EffectAllowed;
|
|
10
|
-
isDragged?: Writable<
|
|
10
|
+
isDragged?: Writable<string | null>;
|
|
11
|
+
logger?: (...args: any[]) => void;
|
|
11
12
|
}
|
|
12
13
|
export declare const draggable: (node: HTMLElement, options: DraggableOptions) => {
|
|
13
14
|
update(newOptions?: DraggableOptions): void;
|
|
@@ -19,7 +20,8 @@ export interface DroppableOptions {
|
|
|
19
20
|
onDrop: (data: any, e: DragEvent) => void;
|
|
20
21
|
onDragover?: (data: any) => void;
|
|
21
22
|
dropEffect?: DropEffect;
|
|
22
|
-
isDraggedOver?: Writable<
|
|
23
|
+
isDraggedOver?: Writable<string | null>;
|
|
24
|
+
logger?: (...args: any[]) => void;
|
|
23
25
|
}
|
|
24
26
|
export declare const droppable: (node: HTMLElement, options: DroppableOptions) => {
|
|
25
27
|
update(newOptions?: DroppableOptions): void;
|
|
@@ -8,43 +8,56 @@ export const draggable = (node, options) => {
|
|
|
8
8
|
effectAllowed: 'all',
|
|
9
9
|
};
|
|
10
10
|
options = { ...DEFAULT_OPTIONS, ...options };
|
|
11
|
-
|
|
12
|
-
const _init = (_opts) => {
|
|
13
|
-
if (_opts.enabled) {
|
|
14
|
-
node.setAttribute('draggable', 'true');
|
|
15
|
-
node.setAttribute('aria-grabbed', 'false');
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
node.removeAttribute('draggable');
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
// init now
|
|
22
|
-
_init(options);
|
|
11
|
+
const _log = (...args) => options.logger?.apply(null, args);
|
|
23
12
|
const _payload = () => (_isFn(options?.payload) ? options.payload() : options.payload);
|
|
24
13
|
//
|
|
25
14
|
const onDragstart = (e) => {
|
|
15
|
+
_log('onDragstart', e.dataTransfer);
|
|
26
16
|
const pld = _payload();
|
|
27
17
|
if (pld !== undefined) {
|
|
28
18
|
// add "stuic" as a custom data format
|
|
29
19
|
e.dataTransfer?.setData('stuic', JSON.stringify({ id: options.id, payload: pld }));
|
|
30
20
|
e.dataTransfer.effectAllowed = options.effectAllowed;
|
|
31
21
|
}
|
|
32
|
-
options?.isDragged?.update((old) => ({ ...old, [options.id]: true }));
|
|
22
|
+
// options?.isDragged?.update((old) => ({ ...old, [options.id!]: true }));
|
|
23
|
+
options?.isDragged?.set(options.id);
|
|
33
24
|
node.setAttribute('aria-grabbed', 'true');
|
|
34
25
|
};
|
|
35
26
|
const onDrag = (e) => {
|
|
27
|
+
// _log('onDrag', e.dataTransfer); // too much spam
|
|
36
28
|
// const el: HTMLElement = e.currentTarget as HTMLElement;
|
|
37
29
|
// clog(el);
|
|
38
30
|
// ?
|
|
39
31
|
};
|
|
40
32
|
const onDragend = (e) => {
|
|
33
|
+
_log('onDragend', e.dataTransfer);
|
|
41
34
|
// e.preventDefault();
|
|
42
|
-
options?.isDragged?.update((old) => ({ ...old, [options.id]: false }));
|
|
35
|
+
// options?.isDragged?.update((old) => ({ ...old, [options.id!]: false }));
|
|
36
|
+
options?.isDragged?.set(null);
|
|
43
37
|
node.setAttribute('aria-grabbed', 'false');
|
|
44
38
|
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
const _removeListeners = () => {
|
|
40
|
+
node.removeEventListener('dragstart', onDragstart);
|
|
41
|
+
node.removeEventListener('drag', onDrag);
|
|
42
|
+
node.removeEventListener('dragend', onDragend);
|
|
43
|
+
};
|
|
44
|
+
// initalizer
|
|
45
|
+
const _init = (_opts) => {
|
|
46
|
+
_log('_init', _opts);
|
|
47
|
+
_removeListeners();
|
|
48
|
+
if (_opts.enabled) {
|
|
49
|
+
node.setAttribute('draggable', 'true');
|
|
50
|
+
node.setAttribute('aria-grabbed', 'false');
|
|
51
|
+
node.addEventListener('dragstart', onDragstart);
|
|
52
|
+
node.addEventListener('drag', onDrag);
|
|
53
|
+
node.addEventListener('dragend', onDragend);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
node.removeAttribute('draggable');
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
// init now
|
|
60
|
+
_init(options);
|
|
48
61
|
return {
|
|
49
62
|
update(newOptions) {
|
|
50
63
|
options = { ...options, ...(newOptions || {}) };
|
|
@@ -52,9 +65,7 @@ export const draggable = (node, options) => {
|
|
|
52
65
|
_init(options);
|
|
53
66
|
},
|
|
54
67
|
destroy() {
|
|
55
|
-
|
|
56
|
-
node.removeEventListener('drag', onDrag);
|
|
57
|
-
node.removeEventListener('dragend', onDragend);
|
|
68
|
+
_removeListeners();
|
|
58
69
|
},
|
|
59
70
|
};
|
|
60
71
|
};
|
|
@@ -65,27 +76,34 @@ export const droppable = (node, options) => {
|
|
|
65
76
|
dropEffect: 'move',
|
|
66
77
|
};
|
|
67
78
|
options = { ...DEFAULT_OPTIONS, ...options };
|
|
79
|
+
const _log = (...args) => options.logger?.apply(null, args);
|
|
68
80
|
//
|
|
69
81
|
const onDragenter = (e) => {
|
|
70
82
|
// e.preventDefault();
|
|
71
|
-
|
|
83
|
+
_log('onDragenter', e.dataTransfer);
|
|
72
84
|
e.dataTransfer.dropEffect = options.dropEffect;
|
|
73
|
-
options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: true }));
|
|
85
|
+
// options?.isDraggedOver?.update((old) => ({ ...old, [options.id!]: true }));
|
|
86
|
+
options?.isDraggedOver?.set(options.id);
|
|
74
87
|
};
|
|
75
88
|
const onDragover = (e) => {
|
|
89
|
+
// _log('onDragover', e.dataTransfer); // too much spam
|
|
76
90
|
// prevent default to allow drop
|
|
77
91
|
// this alse prevents animation (todo: really?)
|
|
78
92
|
e.preventDefault();
|
|
79
93
|
};
|
|
80
94
|
const onDragleave = (e) => {
|
|
95
|
+
_log('onDragleave', e.dataTransfer);
|
|
81
96
|
// e.preventDefault();
|
|
82
|
-
options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: false }));
|
|
97
|
+
// options?.isDraggedOver?.update((old) => ({ ...old, [options.id!]: false }));
|
|
98
|
+
options?.isDraggedOver?.set(null);
|
|
83
99
|
};
|
|
84
100
|
const onDrop = (e) => {
|
|
101
|
+
_log('onDrop', e.dataTransfer);
|
|
85
102
|
e.preventDefault();
|
|
86
103
|
const target = e.target;
|
|
87
104
|
e.dataTransfer.dropEffect = options.dropEffect;
|
|
88
|
-
options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: false }));
|
|
105
|
+
// options?.isDraggedOver?.update((old) => ({ ...old, [options.id!]: false }));
|
|
106
|
+
options?.isDraggedOver?.set(null);
|
|
89
107
|
if (_isFn(options.onDrop)) {
|
|
90
108
|
let stuicData = e.dataTransfer?.getData('stuic');
|
|
91
109
|
// prettier-ignore
|
|
@@ -104,6 +122,7 @@ export const droppable = (node, options) => {
|
|
|
104
122
|
};
|
|
105
123
|
//
|
|
106
124
|
const _init = (_opts) => {
|
|
125
|
+
_log('_init', _opts);
|
|
107
126
|
_removeListeners();
|
|
108
127
|
if (_opts.enabled) {
|
|
109
128
|
node.addEventListener('dragenter', onDragenter);
|