@hkdigital/lib-sveltekit 0.1.77 → 0.1.78

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.
Files changed (32) hide show
  1. package/dist/components/drag-drop/DragDropContext.svelte +26 -0
  2. package/dist/components/drag-drop/DragDropContext.svelte.d.ts +18 -0
  3. package/dist/components/drag-drop/Draggable.svelte +16 -6
  4. package/dist/components/drag-drop/Draggable.svelte.d.ts +2 -0
  5. package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +147 -90
  6. package/dist/components/drag-drop/{Dropzone.svelte.d.ts → DropZone.svelte.d.ts} +5 -3
  7. package/dist/components/drag-drop/drag-state.svelte.d.ts +29 -5
  8. package/dist/components/drag-drop/drag-state.svelte.js +48 -17
  9. package/dist/components/drag-drop/index.d.ts +2 -0
  10. package/dist/components/drag-drop/index.js +3 -0
  11. package/dist/components/drag-drop/util.d.ts +32 -0
  12. package/dist/components/drag-drop/util.js +85 -0
  13. package/dist/components/tab-bar/HkTabBar.state.svelte.d.ts +4 -4
  14. package/dist/components/tab-bar/HkTabBar.svelte +3 -3
  15. package/dist/components/tab-bar/HkTabBar.svelte.d.ts +2 -2
  16. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.d.ts +3 -3
  17. package/dist/components/tab-bar/HkTabBarSelector.svelte +3 -3
  18. package/dist/components/tab-bar/HkTabBarSelector.svelte.d.ts +2 -2
  19. package/dist/components/tab-bar/index.d.ts +1 -0
  20. package/dist/components/tab-bar/typedef.d.ts +3 -1
  21. package/dist/components/tab-bar/typedef.js +3 -0
  22. package/dist/typedef/context.d.ts +3 -0
  23. package/dist/typedef/context.js +6 -0
  24. package/dist/typedef/index.d.ts +1 -0
  25. package/dist/typedef/index.js +1 -0
  26. package/dist/util/svelte/state-context/index.d.ts +2 -1
  27. package/dist/util/svelte/state-context/index.js +46 -12
  28. package/dist/widgets/game-box/GameBox.svelte +1 -0
  29. package/dist/widgets/hk-app-layout/HkAppLayout.state.svelte.d.ts +3 -3
  30. package/dist/widgets/image-box/ImageBox.svelte +2 -4
  31. package/package.json +3 -1
  32. package/dist/components/drag-drop/Dropzone.svelte__ +0 -282
@@ -1,282 +0,0 @@
1
- <script>
2
- import { onMount, onDestroy } from 'svelte';
3
- import { toStateClasses } from '$lib/util/design-system/index.js';
4
- import { useDragState } from './drag-state.svelte.js';
5
-
6
- import {
7
- READY,
8
- DRAG_OVER,
9
- CAN_DROP,
10
- CANNOT_DROP,
11
- DROP_DISABLED,
12
- ACTIVE_DROP
13
- } from '$lib/constants/state-labels/drop-states.js';
14
-
15
- const dragState = useDragState();
16
-
17
- /**
18
- * @type {{
19
- * zone?: string,
20
- * group?: string,
21
- * disabled?: boolean,
22
- * accepts?: (item: any) => boolean,
23
- * maxItems?: number,
24
- * base?: string,
25
- * classes?: string,
26
- * children?: import('svelte').Snippet,
27
- * empty?: import('svelte').Snippet,
28
- * preview?: import('svelte').Snippet<[{
29
- * item: any,
30
- * source: string,
31
- * group: string,
32
- * metadata?: any
33
- * }]>,
34
- * isDragOver?: boolean,
35
- * canDrop?: boolean,
36
- * isDropping?: boolean,
37
- * itemCount?: number,
38
- * onDragEnter?: (detail: {
39
- * event: DragEvent,
40
- * zone: string,
41
- * canDrop: boolean
42
- * }) => void,
43
- * onDragOver?: (detail: {
44
- * event: DragEvent,
45
- * zone: string
46
- * }) => void,
47
- * onDragLeave?: (detail: {
48
- * event: DragEvent,
49
- * zone: string
50
- * }) => void,
51
- * onDrop?: (detail: {
52
- * event: DragEvent,
53
- * zone: string,
54
- * item: any,
55
- * source: string,
56
- * metadata?: any
57
- * }) => any | Promise<any>,
58
- * onDropStart?: (detail: {
59
- * event: DragEvent,
60
- * zone: string,
61
- * data: any
62
- * }) => void,
63
- * onDropEnd?: (detail: {
64
- * event: DragEvent,
65
- * zone: string,
66
- * data: any,
67
- * success: boolean,
68
- * error?: Error
69
- * }) => void,
70
- * [key: string]: any
71
- * }}
72
- */
73
- let {
74
- zone = 'default',
75
- group = 'default',
76
- disabled = false,
77
- accepts = () => true,
78
- maxItems = Infinity,
79
- base = '',
80
- classes = '',
81
- children,
82
- empty,
83
- preview,
84
- isDragOver = $bindable(false),
85
- canDrop = $bindable(false),
86
- isDropping = $bindable(false),
87
- itemCount = $bindable(0),
88
- onDragEnter,
89
- onDragOver,
90
- onDragLeave,
91
- onDrop,
92
- onDropStart,
93
- onDropEnd,
94
- ...attrs
95
- } = $props();
96
-
97
- let currentState = $state(READY);
98
- let dragCounter = 0;
99
-
100
- // Cleanup function
101
- let cleanup;
102
-
103
- onMount(() => {
104
- // Global dragend listener to ensure state cleanup
105
- const handleGlobalDragEnd = () => {
106
- dragCounter = 0;
107
- currentState = READY;
108
- };
109
-
110
- document.addEventListener('dragend', handleGlobalDragEnd);
111
-
112
- cleanup = () => {
113
- document.removeEventListener('dragend', handleGlobalDragEnd);
114
- };
115
- });
116
-
117
- onDestroy(() => {
118
- cleanup?.();
119
- });
120
-
121
- // Computed state object for CSS classes
122
- let stateObject = $derived({
123
- ready: currentState === READY,
124
- 'drag-over': currentState === DRAG_OVER,
125
- 'can-drop': currentState === CAN_DROP,
126
- 'cannot-drop': currentState === CANNOT_DROP,
127
- 'drop-disabled': disabled,
128
- 'active-drop': currentState === ACTIVE_DROP
129
- });
130
-
131
- let stateClasses = $derived(toStateClasses(stateObject));
132
-
133
- // Update bindable props
134
- $effect(() => {
135
- isDragOver = [
136
- DRAG_OVER,
137
- CAN_DROP,
138
- CANNOT_DROP
139
- ].includes(currentState);
140
-
141
- canDrop = currentState === CAN_DROP;
142
- isDropping = currentState === ACTIVE_DROP;
143
- });
144
-
145
- /**
146
- * Check if we can accept the dragged item
147
- * @param {Object} data
148
- * @returns {boolean}
149
- */
150
- function canAcceptDrop(data) {
151
- if (disabled) return false;
152
- if (!data) return false;
153
- if (data.group !== group) return false;
154
- if (!accepts(data.item)) return false;
155
- if (itemCount >= maxItems) return false;
156
- return true;
157
- }
158
-
159
- /**
160
- * Handle drag enter
161
- * @param {DragEvent} event
162
- */
163
- function handleDragEnter(event) {
164
- event.preventDefault();
165
- dragCounter++;
166
-
167
- if (dragCounter === 1) {
168
- const dragData = dragState.current;
169
-
170
- if (dragData) {
171
- currentState = canAcceptDrop(dragData)
172
- ? CAN_DROP
173
- : CANNOT_DROP;
174
- } else {
175
- currentState = DRAG_OVER;
176
- }
177
-
178
- onDragEnter?.({ event, zone, canDrop: currentState === CAN_DROP });
179
- }
180
- }
181
-
182
- /**
183
- * Handle drag over
184
- * @param {DragEvent} event
185
- */
186
- function handleDragOver(event) {
187
- event.preventDefault();
188
-
189
- // Re-evaluate on each dragover in case state changed
190
- const dragData = dragState.current;
191
-
192
- if (dragData && currentState === DRAG_OVER) {
193
- currentState = canAcceptDrop(dragData)
194
- ? CAN_DROP
195
- : CANNOT_DROP;
196
- }
197
-
198
- if (currentState === CAN_DROP) {
199
- event.dataTransfer.dropEffect = 'move';
200
- } else if (currentState === CANNOT_DROP) {
201
- event.dataTransfer.dropEffect = 'none';
202
- }
203
-
204
- onDragOver?.({ event, zone });
205
- }
206
-
207
- /**
208
- * Handle drag leave
209
- * @param {DragEvent} event
210
- */
211
- function handleDragLeave(event) {
212
- if (!event.currentTarget.contains(event.relatedTarget)) {
213
- dragCounter--;
214
-
215
- if (dragCounter <= 0) {
216
- dragCounter = 0;
217
- currentState = READY;
218
- onDragLeave?.({ event, zone });
219
- }
220
- }
221
- }
222
-
223
- /**
224
- * Handle drop
225
- * @param {DragEvent} event
226
- */
227
- function handleDrop(event) {
228
- event.preventDefault();
229
- dragCounter = 0;
230
-
231
- try {
232
- const data = JSON.parse(event.dataTransfer.getData('application/json'));
233
-
234
- if (canAcceptDrop(data)) {
235
- currentState = ACTIVE_DROP;
236
- onDropStart?.({ event, zone, data });
237
-
238
- const dropResult = onDrop?.({
239
- event,
240
- zone,
241
- item: data.item,
242
- source: data.source,
243
- metadata: data.metadata
244
- });
245
-
246
- Promise.resolve(dropResult).then(() => {
247
- currentState = READY;
248
- onDropEnd?.({ event, zone, data, success: true });
249
- }).catch((error) => {
250
- currentState = READY;
251
- onDropEnd?.({ event, zone, data, success: false, error });
252
- });
253
- } else {
254
- currentState = READY;
255
- }
256
- } catch (error) {
257
- console.error('Drop error:', error);
258
- currentState = READY;
259
- }
260
- }
261
- </script>
262
-
263
- <div
264
- data-component="dropzone"
265
- ondragenter={handleDragEnter}
266
- ondragover={handleDragOver}
267
- ondragleave={handleDragLeave}
268
- ondrop={handleDrop}
269
- class="{base} {classes} {stateClasses}"
270
- data-zone={zone}
271
- {...attrs}
272
- >
273
- {#if children}
274
- {@render children()}
275
- {:else if currentState === CAN_DROP && preview}
276
- {@render preview(dragState.current)}
277
- {:else if itemCount === 0 && empty}
278
- {@render empty()}
279
- {:else}
280
- <div data-element="drop-zone-empty">Drop items here</div>
281
- {/if}
282
- </div>