@marianmeres/stuic 1.65.0 → 1.67.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.
@@ -8,6 +8,7 @@ export interface DraggableOptions {
8
8
  payload?: any;
9
9
  effectAllowed?: EffectAllowed;
10
10
  isDragged?: Writable<Record<string, boolean>>;
11
+ logger?: (...args: any[]) => void;
11
12
  }
12
13
  export declare const draggable: (node: HTMLElement, options: DraggableOptions) => {
13
14
  update(newOptions?: DraggableOptions): void;
@@ -20,6 +21,7 @@ export interface DroppableOptions {
20
21
  onDragover?: (data: any) => void;
21
22
  dropEffect?: DropEffect;
22
23
  isDraggedOver?: Writable<Record<string, boolean>>;
24
+ logger?: (...args: any[]) => void;
23
25
  }
24
26
  export declare const droppable: (node: HTMLElement, options: DroppableOptions) => {
25
27
  update(newOptions?: DroppableOptions): void;
@@ -8,21 +8,11 @@ export const draggable = (node, options) => {
8
8
  effectAllowed: 'all',
9
9
  };
10
10
  options = { ...DEFAULT_OPTIONS, ...options };
11
- // initalizer
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
@@ -33,18 +23,39 @@ export const draggable = (node, options) => {
33
23
  node.setAttribute('aria-grabbed', 'true');
34
24
  };
35
25
  const onDrag = (e) => {
26
+ // _log('onDrag', e.dataTransfer); // too much spam
36
27
  // const el: HTMLElement = e.currentTarget as HTMLElement;
37
28
  // clog(el);
38
29
  // ?
39
30
  };
40
31
  const onDragend = (e) => {
32
+ _log('onDragend', e.dataTransfer);
41
33
  // e.preventDefault();
42
34
  options?.isDragged?.update((old) => ({ ...old, [options.id]: false }));
43
35
  node.setAttribute('aria-grabbed', 'false');
44
36
  };
45
- node.addEventListener('dragstart', onDragstart);
46
- node.addEventListener('drag', onDrag);
47
- node.addEventListener('dragend', onDragend);
37
+ const _removeListeners = () => {
38
+ node.removeEventListener('dragstart', onDragstart);
39
+ node.removeEventListener('drag', onDrag);
40
+ node.removeEventListener('dragend', onDragend);
41
+ };
42
+ // initalizer
43
+ const _init = (_opts) => {
44
+ _log('_init', _opts);
45
+ _removeListeners();
46
+ if (_opts.enabled) {
47
+ node.setAttribute('draggable', 'true');
48
+ node.setAttribute('aria-grabbed', 'false');
49
+ node.addEventListener('dragstart', onDragstart);
50
+ node.addEventListener('drag', onDrag);
51
+ node.addEventListener('dragend', onDragend);
52
+ }
53
+ else {
54
+ node.removeAttribute('draggable');
55
+ }
56
+ };
57
+ // init now
58
+ _init(options);
48
59
  return {
49
60
  update(newOptions) {
50
61
  options = { ...options, ...(newOptions || {}) };
@@ -52,9 +63,7 @@ export const draggable = (node, options) => {
52
63
  _init(options);
53
64
  },
54
65
  destroy() {
55
- node.removeEventListener('dragstart', onDragstart);
56
- node.removeEventListener('drag', onDrag);
57
- node.removeEventListener('dragend', onDragend);
66
+ _removeListeners();
58
67
  },
59
68
  };
60
69
  };
@@ -65,21 +74,27 @@ export const droppable = (node, options) => {
65
74
  dropEffect: 'move',
66
75
  };
67
76
  options = { ...DEFAULT_OPTIONS, ...options };
77
+ const _log = (...args) => options.logger?.apply(null, args);
68
78
  //
69
79
  const onDragenter = (e) => {
70
80
  // e.preventDefault();
71
- // console.log('dragover', e.dataTransfer);
81
+ _log('onDragenter', e.dataTransfer);
72
82
  e.dataTransfer.dropEffect = options.dropEffect;
73
83
  options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: true }));
74
84
  };
75
85
  const onDragover = (e) => {
76
- e.preventDefault(); // this prevents animation
86
+ // _log('onDragover', e.dataTransfer); // too much spam
87
+ // prevent default to allow drop
88
+ // this alse prevents animation (todo: really?)
89
+ e.preventDefault();
77
90
  };
78
91
  const onDragleave = (e) => {
92
+ _log('onDragleave', e.dataTransfer);
79
93
  // e.preventDefault();
80
94
  options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: false }));
81
95
  };
82
96
  const onDrop = (e) => {
97
+ _log('onDrop', e.dataTransfer);
83
98
  e.preventDefault();
84
99
  const target = e.target;
85
100
  e.dataTransfer.dropEffect = options.dropEffect;
@@ -101,18 +116,14 @@ export const droppable = (node, options) => {
101
116
  node.removeEventListener('drop', onDrop);
102
117
  };
103
118
  //
104
- let _listens = false;
105
119
  const _init = (_opts) => {
106
- if (_opts.enabled && !_listens) {
120
+ _log('_init', _opts);
121
+ _removeListeners();
122
+ if (_opts.enabled) {
107
123
  node.addEventListener('dragenter', onDragenter);
108
124
  node.addEventListener('dragover', onDragover);
109
125
  node.addEventListener('dragleave', onDragleave);
110
126
  node.addEventListener('drop', onDrop);
111
- _listens = true;
112
- }
113
- else if (!_opts.enabled && _listens) {
114
- _removeListeners();
115
- _listens = false;
116
127
  }
117
128
  };
118
129
  // init now
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marianmeres/stuic",
3
- "version": "1.65.0",
3
+ "version": "1.67.0",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build && npm run package && node ./scripts/date.js",