@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.
@@ -7,7 +7,8 @@ export interface DraggableOptions {
7
7
  enabled?: boolean;
8
8
  payload?: any;
9
9
  effectAllowed?: EffectAllowed;
10
- isDragged?: Writable<Record<string, boolean>>;
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<Record<string, boolean>>;
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
- // 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
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
- node.addEventListener('dragstart', onDragstart);
46
- node.addEventListener('drag', onDrag);
47
- node.addEventListener('dragend', onDragend);
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
- node.removeEventListener('dragstart', onDragstart);
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
- // console.log('dragover', e.dataTransfer);
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marianmeres/stuic",
3
- "version": "1.66.0",
3
+ "version": "1.68.0",
4
4
  "scripts": {
5
5
  "dev": "vite dev",
6
6
  "build": "vite build && npm run package && node ./scripts/date.js",