@marianmeres/stuic 1.66.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,23 +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) => {
86
+ // _log('onDragover', e.dataTransfer); // too much spam
76
87
  // prevent default to allow drop
77
88
  // this alse prevents animation (todo: really?)
78
89
  e.preventDefault();
79
90
  };
80
91
  const onDragleave = (e) => {
92
+ _log('onDragleave', e.dataTransfer);
81
93
  // e.preventDefault();
82
94
  options?.isDraggedOver?.update((old) => ({ ...old, [options.id]: false }));
83
95
  };
84
96
  const onDrop = (e) => {
97
+ _log('onDrop', e.dataTransfer);
85
98
  e.preventDefault();
86
99
  const target = e.target;
87
100
  e.dataTransfer.dropEffect = options.dropEffect;
@@ -104,6 +117,7 @@ export const droppable = (node, options) => {
104
117
  };
105
118
  //
106
119
  const _init = (_opts) => {
120
+ _log('_init', _opts);
107
121
  _removeListeners();
108
122
  if (_opts.enabled) {
109
123
  node.addEventListener('dragenter', onDragenter);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marianmeres/stuic",
3
- "version": "1.66.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",