@hkdigital/lib-core 0.3.10 → 0.3.11

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 (421) hide show
  1. package/README.md +149 -149
  2. package/dist/assets/autospuiten/car-paint-picker.d.ts +7 -7
  3. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  4. package/dist/assets/autospuiten/labels.js +7 -7
  5. package/dist/classes/data/IterableTree.d.ts +13 -6
  6. package/dist/classes/data/IterableTree.js +242 -229
  7. package/dist/classes/data/Selector.js +190 -190
  8. package/dist/classes/data/index.js +2 -2
  9. package/dist/classes/data/typedef.js +9 -9
  10. package/dist/classes/event-emitter/EventEmitter.js +273 -273
  11. package/dist/classes/event-emitter/index.js +2 -2
  12. package/dist/classes/index.js +4 -4
  13. package/dist/classes/promise/HkPromise.d.ts +18 -17
  14. package/dist/classes/promise/HkPromise.js +384 -377
  15. package/dist/classes/promise/index.js +1 -1
  16. package/dist/classes/stores/SubscribersCount.js +107 -107
  17. package/dist/classes/stores/index.js +1 -1
  18. package/dist/classes/streams/LogTransformStream.js +19 -19
  19. package/dist/classes/streams/ServerEventsStore.d.ts +2 -3
  20. package/dist/classes/streams/ServerEventsStore.js +111 -110
  21. package/dist/classes/streams/TimeStampSource.js +26 -26
  22. package/dist/classes/streams/index.js +3 -3
  23. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  24. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  25. package/dist/classes/svelte/index.d.ts +0 -8
  26. package/dist/classes/svelte/index.js +11 -14
  27. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  28. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  29. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  30. package/dist/config/README.md +196 -0
  31. package/dist/config/{imagetools-config.js → generators/imagetools.js} +189 -189
  32. package/dist/config/generators/vite.d.ts +47 -0
  33. package/dist/config/generators/vite.js +142 -0
  34. package/dist/config/imagetools.d.ts +72 -72
  35. package/dist/config/vite.d.ts +1 -0
  36. package/dist/config/vite.js +5 -0
  37. package/dist/constants/bases/index.js +13 -13
  38. package/dist/constants/http/headers.js +6 -6
  39. package/dist/constants/http/index.js +2 -2
  40. package/dist/constants/http/methods.js +14 -14
  41. package/dist/constants/index.js +6 -6
  42. package/dist/constants/mime/application.js +5 -5
  43. package/dist/constants/mime/audio.js +13 -13
  44. package/dist/constants/mime/image.js +3 -3
  45. package/dist/constants/mime/index.js +4 -4
  46. package/dist/constants/mime/text.js +2 -2
  47. package/dist/constants/regexp/README.md +95 -0
  48. package/dist/constants/regexp/index.d.ts +1 -1
  49. package/dist/constants/regexp/index.js +31 -31
  50. package/dist/constants/regexp/inspiratie.js__ +95 -95
  51. package/dist/constants/regexp/text.d.ts +3 -3
  52. package/dist/constants/regexp/text.js +49 -49
  53. package/dist/constants/regexp/url.d.ts +1 -0
  54. package/dist/constants/regexp/url.js +3 -0
  55. package/dist/constants/regexp/user.d.ts +0 -1
  56. package/dist/constants/regexp/user.js +29 -33
  57. package/dist/constants/states/drag.js +6 -6
  58. package/dist/constants/states/drop.js +6 -6
  59. package/dist/constants/states/index.js +4 -4
  60. package/dist/constants/states/input.js +11 -11
  61. package/dist/constants/states/submit.js +4 -4
  62. package/dist/constants/time/index.js +28 -28
  63. package/dist/css/utilities.css +43 -43
  64. package/dist/design/README.md +405 -0
  65. package/dist/design/{design-config.js → config/design-config.js} +73 -73
  66. package/dist/{util/design-system/tailwind.js → design/generators/index.js} +288 -288
  67. package/dist/design/index.d.ts +8 -0
  68. package/dist/design/index.js +97 -0
  69. package/dist/{util/design-system → design/plugins}/skeleton.js +208 -208
  70. package/dist/design/tailwind-theme-extend.js +158 -158
  71. package/dist/design/themes/README.md +103 -0
  72. package/dist/{themes → design/themes}/hkdev/components/blocks/text-block.css +34 -34
  73. package/dist/{themes → design/themes}/hkdev/components/boxes/game-box.css +11 -11
  74. package/dist/{themes → design/themes}/hkdev/components/buttons/button-icon-steeze.css +22 -22
  75. package/dist/{themes → design/themes}/hkdev/components/buttons/button-text.css +32 -32
  76. package/dist/{themes → design/themes}/hkdev/components/buttons/button.css +146 -146
  77. package/dist/{themes → design/themes}/hkdev/components/buttons/skip-button.css +5 -5
  78. package/dist/{themes → design/themes}/hkdev/components/drag-drop/draggable.css +73 -73
  79. package/dist/{themes → design/themes}/hkdev/components/drag-drop/drop-zone.css +58 -58
  80. package/dist/{themes → design/themes}/hkdev/components/icons/icon-steeze.css +15 -15
  81. package/dist/{themes → design/themes}/hkdev/components/inputs/text-input.css +102 -102
  82. package/dist/{themes → design/themes}/hkdev/components/panels/panel.css +25 -25
  83. package/dist/{themes → design/themes}/hkdev/components/rows/panel-grid-row.css +4 -4
  84. package/dist/{themes → design/themes}/hkdev/components/rows/panel-row-2.css +5 -5
  85. package/dist/{themes → design/themes}/hkdev/components.css +29 -29
  86. package/dist/design/themes/hkdev/debug.css +2 -0
  87. package/dist/{themes → design/themes}/hkdev/global/layout.css +32 -32
  88. package/dist/{themes → design/themes}/hkdev/global/on-colors.css +32 -32
  89. package/dist/{themes → design/themes}/hkdev/globals.css +3 -3
  90. package/dist/{themes → design/themes}/hkdev/responsive.css +12 -12
  91. package/dist/{themes → design/themes}/hkdev/theme-ext.js +12 -12
  92. package/dist/{themes → design/themes}/hkdev/theme.css +218 -218
  93. package/dist/{util/design-system/css → design/utils}/clamp.js +66 -66
  94. package/dist/{util/design-system/css/root-design-vars.d.ts → design/utils/root-vars.d.ts} +2 -2
  95. package/dist/{util/design-system/css/root-design-vars.js → design/utils/root-vars.js} +102 -102
  96. package/dist/{util/design-system/layout → design/utils}/scaling.js +228 -228
  97. package/dist/{util/design-system/components → design/utils}/states.js +22 -22
  98. package/dist/errors/api.js +9 -9
  99. package/dist/errors/generic.js +20 -20
  100. package/dist/errors/http.js +16 -16
  101. package/dist/errors/index.d.ts +1 -0
  102. package/dist/errors/index.js +5 -4
  103. package/dist/errors/jwt.js +5 -5
  104. package/dist/errors/promise.d.ts +27 -0
  105. package/dist/errors/promise.js +26 -0
  106. package/dist/logging/index.js +7 -7
  107. package/dist/logging/internal/adapters/console.js +114 -114
  108. package/dist/logging/internal/adapters/index.js +2 -2
  109. package/dist/logging/internal/adapters/pino.js +142 -142
  110. package/dist/logging/internal/adapters/typedef.js +10 -10
  111. package/dist/logging/internal/factories/client.js +21 -21
  112. package/dist/logging/internal/factories/server.js +22 -22
  113. package/dist/logging/internal/factories/universal.js +22 -22
  114. package/dist/logging/internal/unified-logger/Logger.js +217 -217
  115. package/dist/logging/internal/unified-logger/constants.js +22 -22
  116. package/dist/logging/internal/unified-logger/index.js +6 -6
  117. package/dist/logging/internal/unified-logger/typedef.js +17 -17
  118. package/dist/network/README.md +173 -0
  119. package/dist/{classes → network}/cache/IndexedDbCache.js +1407 -1407
  120. package/dist/{classes → network}/cache/MemoryResponseCache.js +138 -138
  121. package/dist/{classes → network}/cache/index.js +5 -5
  122. package/dist/{classes → network}/cache/typedef.js +41 -41
  123. package/dist/network/cache.d.ts +3 -0
  124. package/dist/network/cache.js +4 -0
  125. package/dist/{util → network}/http/caching.js +261 -263
  126. package/dist/{util → network}/http/errors.js +97 -97
  127. package/dist/{util → network}/http/headers.js +75 -75
  128. package/dist/{util → network}/http/http-request.js +578 -578
  129. package/dist/{util → network}/http/index.js +22 -22
  130. package/dist/{util → network}/http/json-request.js +224 -224
  131. package/dist/{util → network}/http/mocks.js +65 -65
  132. package/dist/{util → network}/http/response.js +318 -318
  133. package/dist/{util → network}/http/typedef.js +93 -93
  134. package/dist/{util → network}/http/url.js +52 -52
  135. package/dist/network/http.d.ts +6 -0
  136. package/dist/network/http.js +6 -0
  137. package/dist/network/loaders/README.md +255 -0
  138. package/dist/{classes/svelte → network/loaders}/audio/AudioLoader.svelte.d.ts +1 -1
  139. package/dist/{classes/svelte → network/loaders}/audio/AudioLoader.svelte.js +58 -58
  140. package/dist/{classes/svelte → network/loaders}/audio/AudioScene.svelte.js +324 -324
  141. package/dist/{classes/svelte → network/loaders}/audio/mocks.js +35 -35
  142. package/dist/network/loaders/audio.d.ts +2 -0
  143. package/dist/network/loaders/audio.js +2 -0
  144. package/dist/{classes/svelte → network/loaders}/image/ImageLoader.svelte.d.ts +3 -6
  145. package/dist/{classes/svelte → network/loaders}/image/ImageLoader.svelte.js +44 -45
  146. package/dist/{classes/svelte → network/loaders}/image/ImageScene.svelte.d.ts +5 -7
  147. package/dist/{classes/svelte → network/loaders}/image/ImageScene.svelte.js +248 -249
  148. package/dist/{classes/svelte → network/loaders}/image/ImageVariantsLoader.svelte.d.ts +4 -4
  149. package/dist/{classes/svelte → network/loaders}/image/ImageVariantsLoader.svelte.js +150 -152
  150. package/dist/{classes/svelte → network/loaders}/image/index.js +4 -4
  151. package/dist/{classes/svelte → network/loaders}/image/mocks.js +35 -35
  152. package/dist/{classes/svelte → network/loaders}/image/typedef.js +8 -8
  153. package/dist/{util/image → network/loaders/image/utils}/index.d.ts +2 -2
  154. package/dist/{util/image → network/loaders/image/utils}/index.js +86 -86
  155. package/dist/network/loaders/image.d.ts +5 -0
  156. package/dist/network/loaders/image.js +8 -0
  157. package/dist/{typedef/image.js → network/loaders/typedef.js} +38 -38
  158. package/dist/network/loaders.d.ts +2 -0
  159. package/dist/network/loaders.js +2 -0
  160. package/dist/{classes/svelte/network-loader → network/states}/NetworkLoader.svelte.d.ts +1 -1
  161. package/dist/{classes/svelte/network-loader → network/states}/NetworkLoader.svelte.js +338 -338
  162. package/dist/{classes/svelte/network-loader → network/states}/constants.js +3 -3
  163. package/dist/{classes/svelte/network-loader → network/states}/index.js +3 -3
  164. package/dist/{classes/svelte/network-loader → network/states}/mocks.js +30 -30
  165. package/dist/{classes/svelte/network-loader → network/states}/typedef.js +8 -8
  166. package/dist/network/typedef.d.ts +4 -0
  167. package/dist/network/typedef.js +10 -0
  168. package/dist/services/index.js +1 -1
  169. package/dist/services/internal/index.js +8 -8
  170. package/dist/services/internal/service-base/ServiceBase.js +462 -462
  171. package/dist/services/internal/service-base/constants.js +110 -110
  172. package/dist/services/internal/service-base/index.js +3 -3
  173. package/dist/services/internal/service-base/typedef.js +101 -101
  174. package/dist/services/internal/service-manager/ServiceManager.js +608 -608
  175. package/dist/services/internal/service-manager/constants.js +6 -6
  176. package/dist/services/internal/service-manager/typedef.js +90 -90
  177. package/dist/states/index.js +1 -1
  178. package/dist/states/navigation.svelte.js +55 -55
  179. package/dist/stores/index.js +1 -1
  180. package/dist/stores/theme.js +80 -80
  181. package/dist/typedef/context.js +6 -6
  182. package/dist/typedef/drag.js +25 -25
  183. package/dist/typedef/drop.js +12 -12
  184. package/dist/typedef/index.d.ts +0 -1
  185. package/dist/typedef/index.js +4 -4
  186. package/dist/{components → ui/components}/button-group/ButtonGroup.svelte +82 -82
  187. package/dist/{components → ui/components}/button-group/typedef.js +10 -10
  188. package/dist/{components → ui/components}/compare-left-right/CompareLeftRight.svelte +179 -179
  189. package/dist/{components → ui/components}/compare-left-right/index.js +1 -1
  190. package/dist/{components → ui/components}/game-box/GameBox.svelte +577 -577
  191. package/dist/{components → ui/components}/game-box/gamebox.util.js +83 -83
  192. package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.d.ts +6 -0
  193. package/dist/{components → ui/components}/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  194. package/dist/{components → ui/components}/hk-app-layout/HkAppLayout.svelte +251 -251
  195. package/dist/{components → ui/components}/image-box/ImageBox.svelte +210 -210
  196. package/dist/{components → ui/components}/image-box/ImageBox.svelte.d.ts +6 -6
  197. package/dist/ui/components/image-box/index.js +5 -0
  198. package/dist/{components → ui/components}/image-box/typedef.js +32 -32
  199. package/dist/{components → ui/components}/index.js +23 -23
  200. package/dist/{components → ui/components}/presenter/ImageSlide.svelte +64 -64
  201. package/dist/{components → ui/components}/presenter/ImageSlide.svelte.d.ts +2 -2
  202. package/dist/{components → ui/components}/presenter/Presenter.state.svelte.d.ts +1 -1
  203. package/dist/{components → ui/components}/presenter/Presenter.state.svelte.js +638 -638
  204. package/dist/{components → ui/components}/presenter/Presenter.svelte +142 -142
  205. package/dist/{components → ui/components}/presenter/constants.js +7 -7
  206. package/dist/{components → ui/components}/presenter/index.js +10 -10
  207. package/dist/{components → ui/components}/presenter/typedef.js +106 -106
  208. package/dist/{components → ui/components}/presenter/util.js +210 -210
  209. package/dist/{components → ui/components}/virtual-viewport/VirtualViewport.svelte +196 -196
  210. package/dist/{primitives → ui/primitives}/area/HkArea.svelte +49 -49
  211. package/dist/{primitives → ui/primitives}/area/HkGridArea.svelte +77 -77
  212. package/dist/{primitives → ui/primitives}/area/index.js +2 -2
  213. package/dist/{primitives → ui/primitives}/buttons/button/Button.svelte +82 -82
  214. package/dist/{primitives → ui/primitives}/buttons/button/Button.svelte.d.ts +1 -1
  215. package/dist/{primitives → ui/primitives}/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  216. package/dist/{primitives → ui/primitives}/buttons/button-text/TextButton.svelte +21 -21
  217. package/dist/{primitives → ui/primitives}/buttons/index.js +3 -3
  218. package/dist/{primitives → ui/primitives}/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  219. package/dist/{primitives → ui/primitives}/debug/index.js +1 -1
  220. package/dist/{primitives → ui/primitives}/drag-drop/DragController.js +44 -44
  221. package/dist/{primitives → ui/primitives}/drag-drop/DragDropContext.svelte +111 -111
  222. package/dist/{primitives → ui/primitives}/drag-drop/DragDropContext.svelte.d.ts +1 -1
  223. package/dist/{primitives → ui/primitives}/drag-drop/Draggable.svelte +519 -519
  224. package/dist/{primitives → ui/primitives}/drag-drop/Draggable.svelte.d.ts +1 -1
  225. package/dist/{primitives → ui/primitives}/drag-drop/DropZone.svelte +258 -258
  226. package/dist/{primitives → ui/primitives}/drag-drop/DropZone.svelte.d.ts +3 -3
  227. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneArea.svelte +119 -119
  228. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneArea.svelte.d.ts +3 -3
  229. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneList.svelte +125 -125
  230. package/dist/{primitives → ui/primitives}/drag-drop/DropZoneList.svelte.d.ts +3 -3
  231. package/dist/{primitives → ui/primitives}/drag-drop/actions.js +26 -26
  232. package/dist/{primitives → ui/primitives}/drag-drop/drag-state.svelte.d.ts +11 -11
  233. package/dist/{primitives → ui/primitives}/drag-drop/drag-state.svelte.js +322 -322
  234. package/dist/{primitives → ui/primitives}/drag-drop/index.js +7 -7
  235. package/dist/{primitives → ui/primitives}/drag-drop/util.js +85 -85
  236. package/dist/{primitives → ui/primitives}/hkdev/blocks/TextBlock.svelte +46 -46
  237. package/dist/{primitives → ui/primitives}/hkdev/buttons/CheckButton.svelte +62 -62
  238. package/dist/{primitives → ui/primitives}/icons/HkIcon.svelte +86 -86
  239. package/dist/{primitives → ui/primitives}/icons/HkTabIcon.svelte +116 -116
  240. package/dist/{primitives → ui/primitives}/icons/SteezeIcon.svelte +97 -97
  241. package/dist/{primitives → ui/primitives}/icons/index.js +6 -6
  242. package/dist/{primitives → ui/primitives}/icons/typedef.js +16 -16
  243. package/dist/{primitives → ui/primitives}/index.js +2 -2
  244. package/dist/{primitives → ui/primitives}/inputs/index.js +1 -1
  245. package/dist/{primitives → ui/primitives}/inputs/text-input/TextInput.svelte +223 -223
  246. package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconInvalid.svelte +14 -14
  247. package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconValid.svelte +12 -12
  248. package/dist/{primitives → ui/primitives}/layout/grid-layers/GridLayers.svelte +63 -63
  249. package/dist/{primitives → ui/primitives}/layout/grid-layers/util.js +74 -74
  250. package/dist/{primitives → ui/primitives}/layout/index.js +1 -1
  251. package/dist/{primitives → ui/primitives}/panels/index.js +1 -1
  252. package/dist/{primitives → ui/primitives}/panels/panel/Panel.svelte +43 -43
  253. package/dist/{primitives → ui/primitives}/rows/index.js +3 -3
  254. package/dist/{primitives → ui/primitives}/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  255. package/dist/{primitives → ui/primitives}/rows/panel-row-2/PanelRow2.svelte +40 -40
  256. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.state.svelte.d.ts +3 -3
  257. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.state.svelte.js +149 -149
  258. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.svelte +74 -74
  259. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.state.svelte.d.ts +3 -3
  260. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  261. package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.svelte +49 -49
  262. package/dist/{primitives → ui/primitives}/tab-bar/index.js +17 -17
  263. package/dist/{primitives → ui/primitives}/tab-bar/typedef.js +11 -11
  264. package/dist/util/array/index.js +436 -436
  265. package/dist/util/bases/base58.js +262 -262
  266. package/dist/util/bases/index.js +1 -1
  267. package/dist/util/compare/index.js +247 -247
  268. package/dist/util/css/css-vars.js +83 -83
  269. package/dist/util/css/index.js +1 -1
  270. package/dist/util/env/index.js +9 -9
  271. package/dist/util/exceptions/index.js +23 -23
  272. package/dist/util/expect/arrays.js +47 -47
  273. package/dist/util/expect/index.js +259 -259
  274. package/dist/util/expect/primitives.js +55 -55
  275. package/dist/util/expect/url.d.ts +6 -6
  276. package/dist/util/expect/url.js +60 -60
  277. package/dist/util/function/index.js +218 -218
  278. package/dist/util/geo/index.js +26 -26
  279. package/dist/util/index.js +7 -7
  280. package/dist/util/is/index.js +147 -147
  281. package/dist/util/iterate/index.d.ts +4 -4
  282. package/dist/util/iterate/index.js +204 -204
  283. package/dist/util/object/index.js +1345 -1345
  284. package/dist/util/singleton/index.js +97 -97
  285. package/dist/util/string/array-path.js +75 -75
  286. package/dist/util/string/convert.js +54 -54
  287. package/dist/util/string/fs.js +226 -226
  288. package/dist/util/string/index.js +5 -5
  289. package/dist/util/string/interpolate.js +61 -61
  290. package/dist/util/string/pad.js +10 -10
  291. package/dist/util/svelte/index.js +4 -4
  292. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  293. package/dist/util/svelte/observe/index.js +49 -49
  294. package/dist/util/svelte/state-context/index.js +117 -117
  295. package/dist/util/svelte/wait/index.js +38 -38
  296. package/dist/util/sveltekit/index.js +1 -1
  297. package/dist/util/sveltekit/route-folders/index.js +101 -101
  298. package/dist/util/time/index.js +328 -328
  299. package/dist/util/unique/index.js +231 -231
  300. package/dist/valibot/README.md +50 -0
  301. package/dist/valibot/index.d.ts +4 -4
  302. package/dist/valibot/index.js +8 -9
  303. package/dist/valibot/{url.d.ts → parsers/url.d.ts} +13 -5
  304. package/dist/valibot/{url.js → parsers/url.js} +111 -95
  305. package/dist/valibot/{user.js → parsers/user.js} +23 -23
  306. package/dist/valibot/parsers.d.ts +2 -0
  307. package/dist/valibot/parsers.js +4 -0
  308. package/package.json +131 -133
  309. package/dist/components/hk-app-layout/HkAppLayout.state.svelte.d.ts +0 -6
  310. package/dist/components/image-box/index.js +0 -5
  311. package/dist/constants/regexp/web.d.ts +0 -1
  312. package/dist/constants/regexp/web.js +0 -3
  313. package/dist/primitives/inputs/text-input/TestTextInput.svelte__ +0 -102
  314. package/dist/primitives/inputs/text-input/TextInput.svelte___ +0 -83
  315. package/dist/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +0 -372
  316. package/dist/schemas/index.d.ts +0 -1
  317. package/dist/schemas/index.js +0 -1
  318. package/dist/schemas/validate-url.d.ts +0 -30
  319. package/dist/schemas/validate-url.js +0 -180
  320. package/dist/themes/hkdev/debug.css +0 -2
  321. package/dist/themes/index.d.ts +0 -1
  322. package/dist/themes/index.js +0 -1
  323. package/dist/util/design-system/index.d.ts +0 -5
  324. package/dist/util/design-system/index.js +0 -5
  325. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  326. package/dist/valibot/date.js__ +0 -10
  327. package/dist/zod/all.d.ts +0 -6
  328. package/dist/zod/all.js +0 -33
  329. package/dist/zod/generic.d.ts +0 -6
  330. package/dist/zod/generic.js +0 -11
  331. package/dist/zod/javascript.d.ts +0 -8
  332. package/dist/zod/javascript.js +0 -32
  333. package/dist/zod/user.d.ts +0 -9
  334. package/dist/zod/user.js +0 -16
  335. package/dist/zod/web.d.ts +0 -21
  336. package/dist/zod/web.js +0 -52
  337. /package/dist/config/{imagetools-config.d.ts → generators/imagetools.d.ts} +0 -0
  338. /package/dist/design/{design-config.d.ts → config/design-config.d.ts} +0 -0
  339. /package/dist/{util/design-system/tailwind.d.ts → design/generators/index.d.ts} +0 -0
  340. /package/dist/{util/design-system → design/plugins}/skeleton.d.ts +0 -0
  341. /package/dist/{themes → design/themes}/hkdev/theme-ext.d.ts +0 -0
  342. /package/dist/{util/design-system/css → design/utils}/clamp.d.ts +0 -0
  343. /package/dist/{util/design-system/layout → design/utils}/scaling.d.ts +0 -0
  344. /package/dist/{util/design-system/components → design/utils}/states.d.ts +0 -0
  345. /package/dist/{classes → network}/cache/IndexedDbCache.d.ts +0 -0
  346. /package/dist/{classes → network}/cache/MemoryResponseCache.d.ts +0 -0
  347. /package/dist/{classes → network}/cache/index.d.ts +0 -0
  348. /package/dist/{classes → network}/cache/typedef.d.ts +0 -0
  349. /package/dist/{util → network}/http/caching.d.ts +0 -0
  350. /package/dist/{util → network}/http/errors.d.ts +0 -0
  351. /package/dist/{util → network}/http/headers.d.ts +0 -0
  352. /package/dist/{util → network}/http/http-request.d.ts +0 -0
  353. /package/dist/{util → network}/http/index.d.ts +0 -0
  354. /package/dist/{util → network}/http/json-request.d.ts +0 -0
  355. /package/dist/{util → network}/http/mocks.d.ts +0 -0
  356. /package/dist/{util → network}/http/response.d.ts +0 -0
  357. /package/dist/{util → network}/http/typedef.d.ts +0 -0
  358. /package/dist/{util → network}/http/url.d.ts +0 -0
  359. /package/dist/{classes/svelte → network/loaders}/audio/AudioScene.svelte.d.ts +0 -0
  360. /package/dist/{classes/svelte → network/loaders}/audio/mocks.d.ts +0 -0
  361. /package/dist/{classes/svelte → network/loaders}/image/index.d.ts +0 -0
  362. /package/dist/{classes/svelte → network/loaders}/image/mocks.d.ts +0 -0
  363. /package/dist/{classes/svelte → network/loaders}/image/typedef.d.ts +0 -0
  364. /package/dist/{typedef/image.d.ts → network/loaders/typedef.d.ts} +0 -0
  365. /package/dist/{classes/svelte/network-loader → network/states}/constants.d.ts +0 -0
  366. /package/dist/{classes/svelte/network-loader → network/states}/index.d.ts +0 -0
  367. /package/dist/{classes/svelte/network-loader → network/states}/mocks.d.ts +0 -0
  368. /package/dist/{classes/svelte/network-loader → network/states}/typedef.d.ts +0 -0
  369. /package/dist/{components → ui/components}/button-group/ButtonGroup.svelte.d.ts +0 -0
  370. /package/dist/{components → ui/components}/button-group/typedef.d.ts +0 -0
  371. /package/dist/{components → ui/components}/compare-left-right/CompareLeftRight.svelte.d.ts +0 -0
  372. /package/dist/{components → ui/components}/compare-left-right/index.d.ts +0 -0
  373. /package/dist/{components → ui/components}/game-box/GameBox.svelte.d.ts +0 -0
  374. /package/dist/{components → ui/components}/game-box/gamebox.util.d.ts +0 -0
  375. /package/dist/{components → ui/components}/hk-app-layout/HkAppLayout.svelte.d.ts +0 -0
  376. /package/dist/{components → ui/components}/image-box/index.d.ts +0 -0
  377. /package/dist/{components → ui/components}/image-box/typedef.d.ts +0 -0
  378. /package/dist/{components → ui/components}/index.d.ts +0 -0
  379. /package/dist/{components → ui/components}/presenter/Presenter.svelte.d.ts +0 -0
  380. /package/dist/{components → ui/components}/presenter/constants.d.ts +0 -0
  381. /package/dist/{components → ui/components}/presenter/index.d.ts +0 -0
  382. /package/dist/{components → ui/components}/presenter/typedef.d.ts +0 -0
  383. /package/dist/{components → ui/components}/presenter/util.d.ts +0 -0
  384. /package/dist/{components → ui/components}/virtual-viewport/VirtualViewport.svelte.d.ts +0 -0
  385. /package/dist/{primitives → ui/primitives}/area/HkArea.svelte.d.ts +0 -0
  386. /package/dist/{primitives → ui/primitives}/area/HkGridArea.svelte.d.ts +0 -0
  387. /package/dist/{primitives → ui/primitives}/area/index.d.ts +0 -0
  388. /package/dist/{primitives → ui/primitives}/buttons/button-icon-steeze/SteezeIconButton.svelte.d.ts +0 -0
  389. /package/dist/{primitives → ui/primitives}/buttons/button-text/TextButton.svelte.d.ts +0 -0
  390. /package/dist/{primitives → ui/primitives}/buttons/index.d.ts +0 -0
  391. /package/dist/{primitives → ui/primitives}/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte.d.ts +0 -0
  392. /package/dist/{primitives → ui/primitives}/debug/index.d.ts +0 -0
  393. /package/dist/{primitives → ui/primitives}/drag-drop/DragController.d.ts +0 -0
  394. /package/dist/{primitives → ui/primitives}/drag-drop/actions.d.ts +0 -0
  395. /package/dist/{primitives → ui/primitives}/drag-drop/index.d.ts +0 -0
  396. /package/dist/{primitives → ui/primitives}/drag-drop/util.d.ts +0 -0
  397. /package/dist/{primitives → ui/primitives}/hkdev/blocks/TextBlock.svelte.d.ts +0 -0
  398. /package/dist/{primitives → ui/primitives}/hkdev/buttons/CheckButton.svelte.d.ts +0 -0
  399. /package/dist/{primitives → ui/primitives}/icons/HkIcon.svelte.d.ts +0 -0
  400. /package/dist/{primitives → ui/primitives}/icons/HkTabIcon.svelte.d.ts +0 -0
  401. /package/dist/{primitives → ui/primitives}/icons/SteezeIcon.svelte.d.ts +0 -0
  402. /package/dist/{primitives → ui/primitives}/icons/index.d.ts +0 -0
  403. /package/dist/{primitives → ui/primitives}/icons/typedef.d.ts +0 -0
  404. /package/dist/{primitives → ui/primitives}/index.d.ts +0 -0
  405. /package/dist/{primitives → ui/primitives}/inputs/index.d.ts +0 -0
  406. /package/dist/{primitives → ui/primitives}/inputs/text-input/TextInput.svelte.d.ts +0 -0
  407. /package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconInvalid.svelte.d.ts +0 -0
  408. /package/dist/{primitives → ui/primitives}/inputs/text-input/assets/IconValid.svelte.d.ts +0 -0
  409. /package/dist/{primitives → ui/primitives}/layout/grid-layers/GridLayers.svelte.d.ts +0 -0
  410. /package/dist/{primitives → ui/primitives}/layout/grid-layers/util.d.ts +0 -0
  411. /package/dist/{primitives → ui/primitives}/layout/index.d.ts +0 -0
  412. /package/dist/{primitives → ui/primitives}/panels/index.d.ts +0 -0
  413. /package/dist/{primitives → ui/primitives}/panels/panel/Panel.svelte.d.ts +0 -0
  414. /package/dist/{primitives → ui/primitives}/rows/index.d.ts +0 -0
  415. /package/dist/{primitives → ui/primitives}/rows/panel-grid-row/PanelGridRow.svelte.d.ts +0 -0
  416. /package/dist/{primitives → ui/primitives}/rows/panel-row-2/PanelRow2.svelte.d.ts +0 -0
  417. /package/dist/{primitives → ui/primitives}/tab-bar/HkTabBar.svelte.d.ts +0 -0
  418. /package/dist/{primitives → ui/primitives}/tab-bar/HkTabBarSelector.svelte.d.ts +0 -0
  419. /package/dist/{primitives → ui/primitives}/tab-bar/index.d.ts +0 -0
  420. /package/dist/{primitives → ui/primitives}/tab-bar/typedef.d.ts +0 -0
  421. /package/dist/valibot/{user.d.ts → parsers/user.d.ts} +0 -0
@@ -1,519 +1,519 @@
1
- <script>
2
- import { browser } from '$app/environment';
3
-
4
- import { toStateClasses } from '../../util/design-system/index.js';
5
- import { createOrGetDragState } from './drag-state.svelte.js';
6
- import { DragController } from './DragController.js';
7
- import { onDestroy } from 'svelte';
8
- import {
9
- IDLE,
10
- DRAGGING,
11
- DRAG_PREVIEW,
12
- DROPPING
13
- } from '../../constants/states/drag.js';
14
-
15
- /** @typedef {import('../../typedef').SimulatedDragEvent} SimulatedDragEvent */
16
-
17
- /**
18
- * @type {{
19
- * item: any,
20
- * group?: string,
21
- * source?: string,
22
- * disabled?: boolean,
23
- * dragDelay?: number,
24
- * base?: string,
25
- * classes?: string,
26
- * children: import('svelte').Snippet<[{
27
- * element: HTMLElement,
28
- * rect: DOMRect,
29
- * isDragging: boolean
30
- * }]>,
31
- * draggingSnippet?: import('svelte').Snippet<[{
32
- * element: HTMLElement,
33
- * rect: DOMRect
34
- * }]>,
35
- * contextKey?: import('../../typedef').ContextKey,
36
- * isDragging?: boolean,
37
- * isDropping?: boolean,
38
- * isDragPreview?: boolean,
39
- * onDragStart?: (detail: {
40
- * event: DragEvent,
41
- * item: any,
42
- * source: string,
43
- * group: string,
44
- * getController: () => DragController
45
- * }) => void,
46
- * onDragging?: (detail: {
47
- * event: DragEvent,
48
- * item: any
49
- * }) => void,
50
- * onDragEnd?: (detail: {
51
- * event: DragEvent,
52
- * item: any,
53
- * wasDropped: boolean
54
- * }) => void,
55
- * onDrop?: (detail: {
56
- * event: DragEvent,
57
- * item: any,
58
- * wasDropped: boolean
59
- * }) => void,
60
- * canDrag?: (item: any) => boolean,
61
- * [key: string]: any
62
- * }}
63
- */
64
- let {
65
- item,
66
- group = 'default',
67
- source = 'default',
68
- disabled = false,
69
- dragDelay = 0,
70
- base = '',
71
- classes = '',
72
- children,
73
- draggingSnippet,
74
- contextKey,
75
- isDragging = $bindable(false),
76
- isDropping = $bindable(false),
77
- isDragPreview = $bindable(false),
78
- onDragStart,
79
- onDragging,
80
- onDragEnd,
81
- onDrop,
82
- canDrag = () => true,
83
- ...attrs
84
- } = $props();
85
-
86
- const dragState = createOrGetDragState(contextKey);
87
-
88
- const draggableId = dragState.newDraggableId();
89
-
90
- // svelte-ignore non_reactive_update
91
- let draggableElement;
92
-
93
- let dragTimeout = null;
94
- let currentState = $state(IDLE);
95
-
96
- // Custom preview follower state
97
- let showPreview = $state(false);
98
- let previewX = $state(0);
99
- let previewY = $state(0);
100
- let dragOffsetX = $state(0);
101
- let dragOffsetY = $state(0);
102
- let customPreviewSet = $state(false);
103
- let elementRect = $state(null);
104
-
105
- // Track if current draggable can drop in the active zone
106
- let canDropInActiveZone = $derived.by(() => {
107
- if (currentState !== DRAGGING || !dragState.activeDropZone) return false;
108
-
109
- const activeZone = dragState.dropZones.get(dragState.activeDropZone);
110
- return activeZone?.canDrop || false;
111
- });
112
-
113
- // Computed state object for CSS classes
114
- let stateObject = $derived({
115
- idle: currentState === IDLE,
116
- dragging: currentState === DRAGGING,
117
- 'drag-preview': currentState === DRAG_PREVIEW,
118
- dropping: currentState === DROPPING,
119
- 'drag-disabled': disabled || !canDrag(item),
120
- 'can-drop': currentState === DRAGGING && canDropInActiveZone,
121
- 'cannot-drop':
122
- currentState === DRAGGING &&
123
- dragState.activeDropZone &&
124
- !canDropInActiveZone
125
- });
126
-
127
- let stateClasses = $derived(toStateClasses(stateObject));
128
-
129
- // Update bindable props
130
- $effect(() => {
131
- isDragging = currentState === DRAGGING;
132
- isDropping = currentState === DROPPING;
133
- isDragPreview = currentState === DRAG_PREVIEW;
134
- });
135
-
136
- // Clean up on component destroy
137
- onDestroy(() => {
138
- if (showPreview) {
139
- document.removeEventListener('dragover', handleDocumentDragOver);
140
- }
141
- });
142
-
143
- /**
144
- * Handle document level dragover to ensure we get position updates
145
- * @param {DragEvent} event
146
- */
147
- function handleDocumentDragOver(event) {
148
- if (showPreview && currentState === DRAGGING) {
149
- // Update position for the custom preview
150
- previewX = event.clientX - dragOffsetX;
151
- previewY = event.clientY - dragOffsetY;
152
-
153
- // Prevent default to allow drop
154
- event.preventDefault();
155
- }
156
- }
157
-
158
- /**
159
- * Handle drag start
160
- * @param {DragEvent} event
161
- */
162
- function handleDragStart(event) {
163
- if (disabled || !canDrag(item)) {
164
- event.preventDefault();
165
- return;
166
- }
167
-
168
- // Handle drag delay
169
- if (dragDelay > 0) {
170
- event.preventDefault();
171
- currentState = DRAG_PREVIEW;
172
-
173
- dragTimeout = setTimeout(() => {
174
- currentState = DRAGGING;
175
- startDrag(event);
176
- }, dragDelay);
177
- return;
178
- }
179
-
180
- currentState = DRAGGING;
181
- startDrag(event);
182
- }
183
-
184
- let transparentPixel;
185
-
186
- if (browser) {
187
- transparentPixel = new Image();
188
- transparentPixel.src =
189
- 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
190
- }
191
-
192
- /**
193
- * Start the drag operation
194
- * @param {DragEvent} event - The drag event
195
- */
196
- function startDrag(event) {
197
- // Set a transparent 1x1 pixel image to hide browser's default preview
198
- event.dataTransfer.setDragImage(transparentPixel, 0, 0);
199
-
200
- // Get the element's bounding rectangle
201
- const rect = draggableElement.getBoundingClientRect();
202
-
203
- // Calculate grab offsets - this is where the user grabbed the element
204
- dragOffsetX = event.clientX - rect.left;
205
- dragOffsetY = event.clientY - rect.top;
206
-
207
- // Create drag data with draggableId included
208
- const dragData = {
209
- draggableId,
210
- offsetX: dragOffsetX,
211
- offsetY: dragOffsetY,
212
- item,
213
- source,
214
- group
215
- };
216
-
217
- // console.debug('handleDragStart:', draggableId, dragData);
218
-
219
- // Set shared drag state
220
- dragState.start(draggableId, dragData);
221
-
222
- // Set minimal data transfer for browser drag and drop API
223
- event.dataTransfer.effectAllowed = 'move';
224
-
225
- // Set draggableId as custom mime type, since that value is availabe
226
- // during all event types (dragstart, dragenter, dragover, dragleave,
227
- // drop and dragend)
228
- event.dataTransfer.setData(`application/x-draggable-${draggableId}`, '1');
229
-
230
- // Also keep text/plain for browser compatibility
231
- event.dataTransfer.setData('text/plain', draggableId);
232
-
233
- // Create the preview controller
234
- const previewController = new DragController(event);
235
-
236
- // Function to get the preview controller
237
- const getController = () => previewController;
238
-
239
- // Call onDragStart with the getController function
240
- onDragStart?.({ event, item, source, group, getController });
241
-
242
- // Store rectangle information for the snippet
243
- elementRect = rect;
244
-
245
- // These offsets represent where the user grabbed the element relative to its top-left corner
246
- dragOffsetX = event.clientX - rect.left;
247
- dragOffsetY = event.clientY - rect.top;
248
-
249
- // Set initial position - this places the preview at the element's original position
250
- previewX = rect.left;
251
- previewY = rect.top;
252
-
253
- // Add document level event listener to track mouse movement
254
- document.addEventListener('dragover', handleDocumentDragOver);
255
-
256
- // Show custom preview
257
- showPreview = true;
258
- customPreviewSet = true;
259
- }
260
-
261
- /**
262
- * Handle during drag
263
- * @param {DragEvent} event
264
- */
265
- function handleDrag(event) {
266
- if (currentState === DRAGGING) {
267
- onDragging?.({ event, item });
268
- }
269
- }
270
-
271
- /**
272
- * Handle drag end
273
- * @param {DragEvent} event
274
- */
275
- function handleDragEnd(event) {
276
- clearTimeout(dragTimeout);
277
-
278
- // Clear global drag state
279
- dragState.end(draggableId);
280
-
281
- // Clean up document event listener
282
- if (customPreviewSet) {
283
- document.removeEventListener('dragover', handleDocumentDragOver);
284
- showPreview = false;
285
- customPreviewSet = false;
286
- elementRect = null;
287
- }
288
-
289
- // Check if drop was successful
290
- const wasDropped = event.dataTransfer.dropEffect !== 'none';
291
-
292
- if (wasDropped) {
293
- currentState = DROPPING;
294
- onDrop?.({ event, item, wasDropped: true });
295
-
296
- // Brief dropping state before returning to idle
297
- setTimeout(() => {
298
- currentState = IDLE;
299
- }, 100);
300
- } else {
301
- currentState = IDLE;
302
- }
303
-
304
- onDragEnd?.({ event, item, wasDropped });
305
- }
306
-
307
- /**
308
- * Handle mouse down for drag delay
309
- * @param {MouseEvent} event
310
- */
311
- function handleMouseDown(event) {
312
- if (dragDelay > 0 && !disabled && canDrag(item)) {
313
- // Could add visual feedback here
314
- }
315
- }
316
-
317
- /**
318
- * Handle mouse up to cancel drag delay
319
- * @param {MouseEvent} event
320
- */
321
- function handleMouseUp(event) {
322
- if (dragTimeout) {
323
- clearTimeout(dragTimeout);
324
- currentState = IDLE;
325
- }
326
- }
327
-
328
- // Add these variables for touch handling
329
- let touchDragging = $state(false);
330
- let touchStartX = 0;
331
- let touchStartY = 0;
332
- let touchPreviewElement = null;
333
-
334
- /**
335
- * Handle touch start
336
- * @param {TouchEvent} event
337
- */
338
- function handleTouchStart(event) {
339
- if (disabled || !canDrag(item)) return;
340
-
341
- const touch = event.touches[0];
342
- touchStartX = touch.clientX;
343
- touchStartY = touch.clientY;
344
-
345
- // Start drag after a small delay to distinguish from scrolling
346
- dragTimeout = setTimeout(() => {
347
- touchDragging = true;
348
- currentState = DRAGGING;
349
-
350
- // Create drag data
351
- const rect = draggableElement.getBoundingClientRect();
352
- dragOffsetX = touch.clientX - rect.left;
353
- dragOffsetY = touch.clientY - rect.top;
354
-
355
- const dragData = {
356
- draggableId,
357
- offsetX: dragOffsetX,
358
- offsetY: dragOffsetY,
359
- item,
360
- source,
361
- group
362
- };
363
-
364
- dragState.start(draggableId, dragData);
365
-
366
- // Show preview
367
- // if (draggingSnippet) {
368
- elementRect = rect;
369
- previewX = rect.left;
370
- previewY = rect.top;
371
- showPreview = true;
372
- // }
373
-
374
- // Prevent scrolling while dragging
375
- event.preventDefault();
376
-
377
- // Add document-level touch handlers
378
- document.addEventListener('touchmove', handleTouchMove, {
379
- passive: false
380
- });
381
-
382
- document.addEventListener('touchend', handleTouchEnd);
383
- }, 150); // 150ms delay to distinguish from scrolling
384
- }
385
-
386
- /**
387
- * Handle touch move
388
- * @param {TouchEvent} event
389
- */
390
- function handleTouchMove(event) {
391
- if (!touchDragging) return;
392
-
393
- event.preventDefault();
394
- const touch = event.touches[0];
395
-
396
- // Update preview position
397
- if (showPreview) {
398
- previewX = touch.clientX - dragOffsetX;
399
- previewY = touch.clientY - dragOffsetY;
400
- }
401
-
402
- /** @type {SimulatedDragEvent} */
403
- const simulatedEvent = {
404
- type: 'dragover',
405
- clientX: touch.clientX,
406
- clientY: touch.clientY,
407
- dataTransfer: {
408
- types: [`application/x-draggable-${draggableId}`, 'text/plain'],
409
- getData: () => 1,
410
- dropEffect: 'move',
411
- effectAllowed: 'move',
412
- files: []
413
- },
414
-
415
- preventDefault: () => {},
416
- stopPropagation: () => {}
417
- };
418
-
419
- // Update active dropzone in drag state
420
- dragState.updateActiveDropZone(
421
- touch.clientX,
422
- touch.clientY,
423
- simulatedEvent
424
- );
425
- }
426
-
427
- /**
428
- * Handle touch end
429
- * @param {TouchEvent} event
430
- */
431
- function handleTouchEnd(event) {
432
- clearTimeout(dragTimeout);
433
-
434
- if (!touchDragging) return;
435
-
436
- const touch = event.changedTouches[0];
437
-
438
- /** @type {SimulatedDragEvent} */
439
- const simulatedEvent = {
440
- type: 'drop',
441
- clientX: touch.clientX,
442
- clientY: touch.clientY,
443
- dataTransfer: {
444
- types: [`application/x-draggable-${draggableId}`, 'text/plain'],
445
- getData: () => 1,
446
- dropEffect: 'move',
447
- effectAllowed: 'move',
448
- files: []
449
- },
450
- preventDefault: () => {}, // Add this!
451
- stopPropagation: () => {} // And this!
452
- };
453
-
454
- // Trigger drop at final touch position
455
- dragState.handleDropAtPoint(touch.clientX, touch.clientY, simulatedEvent);
456
-
457
- // Clean up
458
- touchDragging = false;
459
- currentState = IDLE;
460
- showPreview = false;
461
- dragState.end(draggableId);
462
-
463
- // Remove document handlers
464
- document.removeEventListener('touchmove', handleTouchMove);
465
- document.removeEventListener('touchend', handleTouchEnd);
466
- }
467
- </script>
468
-
469
- <div
470
- data-component="draggable"
471
- bind:this={draggableElement}
472
- draggable={!disabled && canDrag(item)}
473
- ondragstart={handleDragStart}
474
- ondrag={handleDrag}
475
- ondragend={handleDragEnd}
476
- onmousedown={handleMouseDown}
477
- onmouseup={handleMouseUp}
478
- ontouchstart={handleTouchStart}
479
- class="{base} {classes} {stateClasses}"
480
- style="touch-action: none;"
481
- {...attrs}
482
- >
483
- {@render children({
484
- element: draggableElement,
485
- rect: elementRect,
486
- isDragging: false
487
- })}
488
- </div>
489
-
490
- {#if showPreview && elementRect}
491
- <div
492
- data-companion="drag-preview-follower"
493
- class={stateClasses}
494
- style="position: fixed; z-index: 9999; pointer-events: none;"
495
- style:left="{previewX}px"
496
- style:top="{previewY}px"
497
- >
498
- {#if draggingSnippet}
499
- {@render draggingSnippet({
500
- element: draggableElement,
501
- rect: elementRect
502
- })}
503
- {:else}
504
- {@render children({
505
- element: draggableElement,
506
- rect: elementRect,
507
- isDragging: true
508
- })}
509
- {/if}
510
- </div>
511
- {/if}
512
-
513
- <style>
514
- [data-component='draggable'] {
515
- -webkit-touch-callout: none;
516
- -webkit-user-select: none;
517
- user-select: none;
518
- }
519
- </style>
1
+ <script>
2
+ import { browser } from '$app/environment';
3
+
4
+ import { toStateClasses } from '../../../design/index.js';
5
+ import { createOrGetDragState } from './drag-state.svelte.js';
6
+ import { DragController } from './DragController.js';
7
+ import { onDestroy } from 'svelte';
8
+ import {
9
+ IDLE,
10
+ DRAGGING,
11
+ DRAG_PREVIEW,
12
+ DROPPING
13
+ } from '../../../constants/states/drag.js';
14
+
15
+ /** @typedef {import('../../../typedef').SimulatedDragEvent} SimulatedDragEvent */
16
+
17
+ /**
18
+ * @type {{
19
+ * item: any,
20
+ * group?: string,
21
+ * source?: string,
22
+ * disabled?: boolean,
23
+ * dragDelay?: number,
24
+ * base?: string,
25
+ * classes?: string,
26
+ * children: import('svelte').Snippet<[{
27
+ * element: HTMLElement,
28
+ * rect: DOMRect,
29
+ * isDragging: boolean
30
+ * }]>,
31
+ * draggingSnippet?: import('svelte').Snippet<[{
32
+ * element: HTMLElement,
33
+ * rect: DOMRect
34
+ * }]>,
35
+ * contextKey?: import('../../../typedef').ContextKey,
36
+ * isDragging?: boolean,
37
+ * isDropping?: boolean,
38
+ * isDragPreview?: boolean,
39
+ * onDragStart?: (detail: {
40
+ * event: DragEvent,
41
+ * item: any,
42
+ * source: string,
43
+ * group: string,
44
+ * getController: () => DragController
45
+ * }) => void,
46
+ * onDragging?: (detail: {
47
+ * event: DragEvent,
48
+ * item: any
49
+ * }) => void,
50
+ * onDragEnd?: (detail: {
51
+ * event: DragEvent,
52
+ * item: any,
53
+ * wasDropped: boolean
54
+ * }) => void,
55
+ * onDrop?: (detail: {
56
+ * event: DragEvent,
57
+ * item: any,
58
+ * wasDropped: boolean
59
+ * }) => void,
60
+ * canDrag?: (item: any) => boolean,
61
+ * [key: string]: any
62
+ * }}
63
+ */
64
+ let {
65
+ item,
66
+ group = 'default',
67
+ source = 'default',
68
+ disabled = false,
69
+ dragDelay = 0,
70
+ base = '',
71
+ classes = '',
72
+ children,
73
+ draggingSnippet,
74
+ contextKey,
75
+ isDragging = $bindable(false),
76
+ isDropping = $bindable(false),
77
+ isDragPreview = $bindable(false),
78
+ onDragStart,
79
+ onDragging,
80
+ onDragEnd,
81
+ onDrop,
82
+ canDrag = () => true,
83
+ ...attrs
84
+ } = $props();
85
+
86
+ const dragState = createOrGetDragState(contextKey);
87
+
88
+ const draggableId = dragState.newDraggableId();
89
+
90
+ // svelte-ignore non_reactive_update
91
+ let draggableElement;
92
+
93
+ let dragTimeout = null;
94
+ let currentState = $state(IDLE);
95
+
96
+ // Custom preview follower state
97
+ let showPreview = $state(false);
98
+ let previewX = $state(0);
99
+ let previewY = $state(0);
100
+ let dragOffsetX = $state(0);
101
+ let dragOffsetY = $state(0);
102
+ let customPreviewSet = $state(false);
103
+ let elementRect = $state(null);
104
+
105
+ // Track if current draggable can drop in the active zone
106
+ let canDropInActiveZone = $derived.by(() => {
107
+ if (currentState !== DRAGGING || !dragState.activeDropZone) return false;
108
+
109
+ const activeZone = dragState.dropZones.get(dragState.activeDropZone);
110
+ return activeZone?.canDrop || false;
111
+ });
112
+
113
+ // Computed state object for CSS classes
114
+ let stateObject = $derived({
115
+ idle: currentState === IDLE,
116
+ dragging: currentState === DRAGGING,
117
+ 'drag-preview': currentState === DRAG_PREVIEW,
118
+ dropping: currentState === DROPPING,
119
+ 'drag-disabled': disabled || !canDrag(item),
120
+ 'can-drop': currentState === DRAGGING && canDropInActiveZone,
121
+ 'cannot-drop':
122
+ currentState === DRAGGING &&
123
+ dragState.activeDropZone &&
124
+ !canDropInActiveZone
125
+ });
126
+
127
+ let stateClasses = $derived(toStateClasses(stateObject));
128
+
129
+ // Update bindable props
130
+ $effect(() => {
131
+ isDragging = currentState === DRAGGING;
132
+ isDropping = currentState === DROPPING;
133
+ isDragPreview = currentState === DRAG_PREVIEW;
134
+ });
135
+
136
+ // Clean up on component destroy
137
+ onDestroy(() => {
138
+ if (showPreview) {
139
+ document.removeEventListener('dragover', handleDocumentDragOver);
140
+ }
141
+ });
142
+
143
+ /**
144
+ * Handle document level dragover to ensure we get position updates
145
+ * @param {DragEvent} event
146
+ */
147
+ function handleDocumentDragOver(event) {
148
+ if (showPreview && currentState === DRAGGING) {
149
+ // Update position for the custom preview
150
+ previewX = event.clientX - dragOffsetX;
151
+ previewY = event.clientY - dragOffsetY;
152
+
153
+ // Prevent default to allow drop
154
+ event.preventDefault();
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Handle drag start
160
+ * @param {DragEvent} event
161
+ */
162
+ function handleDragStart(event) {
163
+ if (disabled || !canDrag(item)) {
164
+ event.preventDefault();
165
+ return;
166
+ }
167
+
168
+ // Handle drag delay
169
+ if (dragDelay > 0) {
170
+ event.preventDefault();
171
+ currentState = DRAG_PREVIEW;
172
+
173
+ dragTimeout = setTimeout(() => {
174
+ currentState = DRAGGING;
175
+ startDrag(event);
176
+ }, dragDelay);
177
+ return;
178
+ }
179
+
180
+ currentState = DRAGGING;
181
+ startDrag(event);
182
+ }
183
+
184
+ let transparentPixel;
185
+
186
+ if (browser) {
187
+ transparentPixel = new Image();
188
+ transparentPixel.src =
189
+ 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
190
+ }
191
+
192
+ /**
193
+ * Start the drag operation
194
+ * @param {DragEvent} event - The drag event
195
+ */
196
+ function startDrag(event) {
197
+ // Set a transparent 1x1 pixel image to hide browser's default preview
198
+ event.dataTransfer.setDragImage(transparentPixel, 0, 0);
199
+
200
+ // Get the element's bounding rectangle
201
+ const rect = draggableElement.getBoundingClientRect();
202
+
203
+ // Calculate grab offsets - this is where the user grabbed the element
204
+ dragOffsetX = event.clientX - rect.left;
205
+ dragOffsetY = event.clientY - rect.top;
206
+
207
+ // Create drag data with draggableId included
208
+ const dragData = {
209
+ draggableId,
210
+ offsetX: dragOffsetX,
211
+ offsetY: dragOffsetY,
212
+ item,
213
+ source,
214
+ group
215
+ };
216
+
217
+ // console.debug('handleDragStart:', draggableId, dragData);
218
+
219
+ // Set shared drag state
220
+ dragState.start(draggableId, dragData);
221
+
222
+ // Set minimal data transfer for browser drag and drop API
223
+ event.dataTransfer.effectAllowed = 'move';
224
+
225
+ // Set draggableId as custom mime type, since that value is availabe
226
+ // during all event types (dragstart, dragenter, dragover, dragleave,
227
+ // drop and dragend)
228
+ event.dataTransfer.setData(`application/x-draggable-${draggableId}`, '1');
229
+
230
+ // Also keep text/plain for browser compatibility
231
+ event.dataTransfer.setData('text/plain', draggableId);
232
+
233
+ // Create the preview controller
234
+ const previewController = new DragController(event);
235
+
236
+ // Function to get the preview controller
237
+ const getController = () => previewController;
238
+
239
+ // Call onDragStart with the getController function
240
+ onDragStart?.({ event, item, source, group, getController });
241
+
242
+ // Store rectangle information for the snippet
243
+ elementRect = rect;
244
+
245
+ // These offsets represent where the user grabbed the element relative to its top-left corner
246
+ dragOffsetX = event.clientX - rect.left;
247
+ dragOffsetY = event.clientY - rect.top;
248
+
249
+ // Set initial position - this places the preview at the element's original position
250
+ previewX = rect.left;
251
+ previewY = rect.top;
252
+
253
+ // Add document level event listener to track mouse movement
254
+ document.addEventListener('dragover', handleDocumentDragOver);
255
+
256
+ // Show custom preview
257
+ showPreview = true;
258
+ customPreviewSet = true;
259
+ }
260
+
261
+ /**
262
+ * Handle during drag
263
+ * @param {DragEvent} event
264
+ */
265
+ function handleDrag(event) {
266
+ if (currentState === DRAGGING) {
267
+ onDragging?.({ event, item });
268
+ }
269
+ }
270
+
271
+ /**
272
+ * Handle drag end
273
+ * @param {DragEvent} event
274
+ */
275
+ function handleDragEnd(event) {
276
+ clearTimeout(dragTimeout);
277
+
278
+ // Clear global drag state
279
+ dragState.end(draggableId);
280
+
281
+ // Clean up document event listener
282
+ if (customPreviewSet) {
283
+ document.removeEventListener('dragover', handleDocumentDragOver);
284
+ showPreview = false;
285
+ customPreviewSet = false;
286
+ elementRect = null;
287
+ }
288
+
289
+ // Check if drop was successful
290
+ const wasDropped = event.dataTransfer.dropEffect !== 'none';
291
+
292
+ if (wasDropped) {
293
+ currentState = DROPPING;
294
+ onDrop?.({ event, item, wasDropped: true });
295
+
296
+ // Brief dropping state before returning to idle
297
+ setTimeout(() => {
298
+ currentState = IDLE;
299
+ }, 100);
300
+ } else {
301
+ currentState = IDLE;
302
+ }
303
+
304
+ onDragEnd?.({ event, item, wasDropped });
305
+ }
306
+
307
+ /**
308
+ * Handle mouse down for drag delay
309
+ * @param {MouseEvent} event
310
+ */
311
+ function handleMouseDown(event) {
312
+ if (dragDelay > 0 && !disabled && canDrag(item)) {
313
+ // Could add visual feedback here
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Handle mouse up to cancel drag delay
319
+ * @param {MouseEvent} event
320
+ */
321
+ function handleMouseUp(event) {
322
+ if (dragTimeout) {
323
+ clearTimeout(dragTimeout);
324
+ currentState = IDLE;
325
+ }
326
+ }
327
+
328
+ // Add these variables for touch handling
329
+ let touchDragging = $state(false);
330
+ let touchStartX = 0;
331
+ let touchStartY = 0;
332
+ let touchPreviewElement = null;
333
+
334
+ /**
335
+ * Handle touch start
336
+ * @param {TouchEvent} event
337
+ */
338
+ function handleTouchStart(event) {
339
+ if (disabled || !canDrag(item)) return;
340
+
341
+ const touch = event.touches[0];
342
+ touchStartX = touch.clientX;
343
+ touchStartY = touch.clientY;
344
+
345
+ // Start drag after a small delay to distinguish from scrolling
346
+ dragTimeout = setTimeout(() => {
347
+ touchDragging = true;
348
+ currentState = DRAGGING;
349
+
350
+ // Create drag data
351
+ const rect = draggableElement.getBoundingClientRect();
352
+ dragOffsetX = touch.clientX - rect.left;
353
+ dragOffsetY = touch.clientY - rect.top;
354
+
355
+ const dragData = {
356
+ draggableId,
357
+ offsetX: dragOffsetX,
358
+ offsetY: dragOffsetY,
359
+ item,
360
+ source,
361
+ group
362
+ };
363
+
364
+ dragState.start(draggableId, dragData);
365
+
366
+ // Show preview
367
+ // if (draggingSnippet) {
368
+ elementRect = rect;
369
+ previewX = rect.left;
370
+ previewY = rect.top;
371
+ showPreview = true;
372
+ // }
373
+
374
+ // Prevent scrolling while dragging
375
+ event.preventDefault();
376
+
377
+ // Add document-level touch handlers
378
+ document.addEventListener('touchmove', handleTouchMove, {
379
+ passive: false
380
+ });
381
+
382
+ document.addEventListener('touchend', handleTouchEnd);
383
+ }, 150); // 150ms delay to distinguish from scrolling
384
+ }
385
+
386
+ /**
387
+ * Handle touch move
388
+ * @param {TouchEvent} event
389
+ */
390
+ function handleTouchMove(event) {
391
+ if (!touchDragging) return;
392
+
393
+ event.preventDefault();
394
+ const touch = event.touches[0];
395
+
396
+ // Update preview position
397
+ if (showPreview) {
398
+ previewX = touch.clientX - dragOffsetX;
399
+ previewY = touch.clientY - dragOffsetY;
400
+ }
401
+
402
+ /** @type {SimulatedDragEvent} */
403
+ const simulatedEvent = {
404
+ type: 'dragover',
405
+ clientX: touch.clientX,
406
+ clientY: touch.clientY,
407
+ dataTransfer: {
408
+ types: [`application/x-draggable-${draggableId}`, 'text/plain'],
409
+ getData: () => 1,
410
+ dropEffect: 'move',
411
+ effectAllowed: 'move',
412
+ files: []
413
+ },
414
+
415
+ preventDefault: () => {},
416
+ stopPropagation: () => {}
417
+ };
418
+
419
+ // Update active dropzone in drag state
420
+ dragState.updateActiveDropZone(
421
+ touch.clientX,
422
+ touch.clientY,
423
+ simulatedEvent
424
+ );
425
+ }
426
+
427
+ /**
428
+ * Handle touch end
429
+ * @param {TouchEvent} event
430
+ */
431
+ function handleTouchEnd(event) {
432
+ clearTimeout(dragTimeout);
433
+
434
+ if (!touchDragging) return;
435
+
436
+ const touch = event.changedTouches[0];
437
+
438
+ /** @type {SimulatedDragEvent} */
439
+ const simulatedEvent = {
440
+ type: 'drop',
441
+ clientX: touch.clientX,
442
+ clientY: touch.clientY,
443
+ dataTransfer: {
444
+ types: [`application/x-draggable-${draggableId}`, 'text/plain'],
445
+ getData: () => 1,
446
+ dropEffect: 'move',
447
+ effectAllowed: 'move',
448
+ files: []
449
+ },
450
+ preventDefault: () => {}, // Add this!
451
+ stopPropagation: () => {} // And this!
452
+ };
453
+
454
+ // Trigger drop at final touch position
455
+ dragState.handleDropAtPoint(touch.clientX, touch.clientY, simulatedEvent);
456
+
457
+ // Clean up
458
+ touchDragging = false;
459
+ currentState = IDLE;
460
+ showPreview = false;
461
+ dragState.end(draggableId);
462
+
463
+ // Remove document handlers
464
+ document.removeEventListener('touchmove', handleTouchMove);
465
+ document.removeEventListener('touchend', handleTouchEnd);
466
+ }
467
+ </script>
468
+
469
+ <div
470
+ data-component="draggable"
471
+ bind:this={draggableElement}
472
+ draggable={!disabled && canDrag(item)}
473
+ ondragstart={handleDragStart}
474
+ ondrag={handleDrag}
475
+ ondragend={handleDragEnd}
476
+ onmousedown={handleMouseDown}
477
+ onmouseup={handleMouseUp}
478
+ ontouchstart={handleTouchStart}
479
+ class="{base} {classes} {stateClasses}"
480
+ style="touch-action: none;"
481
+ {...attrs}
482
+ >
483
+ {@render children({
484
+ element: draggableElement,
485
+ rect: elementRect,
486
+ isDragging: false
487
+ })}
488
+ </div>
489
+
490
+ {#if showPreview && elementRect}
491
+ <div
492
+ data-companion="drag-preview-follower"
493
+ class={stateClasses}
494
+ style="position: fixed; z-index: 9999; pointer-events: none;"
495
+ style:left="{previewX}px"
496
+ style:top="{previewY}px"
497
+ >
498
+ {#if draggingSnippet}
499
+ {@render draggingSnippet({
500
+ element: draggableElement,
501
+ rect: elementRect
502
+ })}
503
+ {:else}
504
+ {@render children({
505
+ element: draggableElement,
506
+ rect: elementRect,
507
+ isDragging: true
508
+ })}
509
+ {/if}
510
+ </div>
511
+ {/if}
512
+
513
+ <style>
514
+ [data-component='draggable'] {
515
+ -webkit-touch-callout: none;
516
+ -webkit-user-select: none;
517
+ user-select: none;
518
+ }
519
+ </style>