@hkdigital/lib-sveltekit 0.2.8 → 0.2.10

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 (246) hide show
  1. package/README.md +135 -135
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/cache/IndexedDbCache.js +1407 -1407
  5. package/dist/classes/cache/MemoryResponseCache.js +138 -138
  6. package/dist/classes/cache/index.js +5 -5
  7. package/dist/classes/cache/typedef.js +41 -41
  8. package/dist/classes/data/IterableTree.js +243 -243
  9. package/dist/classes/data/Selector.js +190 -190
  10. package/dist/classes/data/index.js +2 -2
  11. package/dist/classes/events/EventEmitter.js +275 -275
  12. package/dist/classes/events/index.js +2 -2
  13. package/dist/classes/index.js +4 -4
  14. package/dist/classes/logging/Logger.js +158 -158
  15. package/dist/classes/logging/constants.js +18 -18
  16. package/dist/classes/logging/index.js +4 -4
  17. package/dist/classes/promise/HkPromise.js +377 -377
  18. package/dist/classes/promise/index.js +1 -1
  19. package/dist/classes/services/ServiceBase.js +409 -409
  20. package/dist/classes/services/ServiceManager.js +1114 -1114
  21. package/dist/classes/services/constants.js +12 -12
  22. package/dist/classes/services/index.js +5 -5
  23. package/dist/classes/stores/SubscribersCount.js +107 -107
  24. package/dist/classes/stores/index.js +1 -1
  25. package/dist/classes/streams/LogTransformStream.js +19 -19
  26. package/dist/classes/streams/ServerEventsStore.js +110 -110
  27. package/dist/classes/streams/TimeStampSource.js +26 -26
  28. package/dist/classes/streams/index.js +3 -3
  29. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  30. package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
  31. package/dist/classes/svelte/audio/mocks.js +35 -35
  32. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  33. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  34. package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
  35. package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
  36. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  37. package/dist/classes/svelte/image/index.js +4 -4
  38. package/dist/classes/svelte/image/mocks.js +35 -35
  39. package/dist/classes/svelte/image/typedef.js +8 -8
  40. package/dist/classes/svelte/index.js +14 -14
  41. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  42. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  43. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  44. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
  45. package/dist/classes/svelte/network-loader/constants.js +3 -3
  46. package/dist/classes/svelte/network-loader/index.js +3 -3
  47. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  48. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  49. package/dist/components/area/HkArea.svelte +49 -49
  50. package/dist/components/area/HkGridArea.svelte +77 -77
  51. package/dist/components/area/index.js +2 -2
  52. package/dist/components/buttons/button/Button.svelte +82 -82
  53. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  54. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  55. package/dist/components/buttons/index.js +3 -3
  56. package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  57. package/dist/components/debug/index.js +1 -1
  58. package/dist/components/drag-drop/DragController.js +44 -44
  59. package/dist/components/drag-drop/DragDropContext.svelte +111 -110
  60. package/dist/components/drag-drop/Draggable.svelte +502 -512
  61. package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
  62. package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
  63. package/dist/components/drag-drop/DropZoneList.svelte +125 -125
  64. package/dist/components/drag-drop/actions.d.ts +9 -0
  65. package/dist/components/drag-drop/actions.js +26 -0
  66. package/dist/components/drag-drop/drag-state.svelte.d.ts +3 -1
  67. package/dist/components/drag-drop/drag-state.svelte.js +322 -319
  68. package/dist/components/drag-drop/drag-state.svelte.js__ +319 -0
  69. package/dist/components/drag-drop/index.js +7 -7
  70. package/dist/components/drag-drop/util.d.ts +0 -32
  71. package/dist/components/drag-drop/util.js +85 -85
  72. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  73. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  74. package/dist/components/icons/HkIcon.svelte +86 -86
  75. package/dist/components/icons/HkTabIcon.svelte +116 -116
  76. package/dist/components/icons/SteezeIcon.svelte +97 -97
  77. package/dist/components/icons/index.js +6 -6
  78. package/dist/components/icons/typedef.js +16 -16
  79. package/dist/components/index.js +2 -2
  80. package/dist/components/inputs/index.js +1 -1
  81. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  82. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  83. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  84. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  85. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  86. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  87. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  88. package/dist/components/layout/grid-layers/util.js +74 -74
  89. package/dist/components/layout/index.js +1 -1
  90. package/dist/components/panels/index.js +1 -1
  91. package/dist/components/panels/panel/Panel.svelte +43 -43
  92. package/dist/components/rows/index.js +3 -3
  93. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  94. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  95. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  96. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  97. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  98. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  99. package/dist/components/tab-bar/index.js +17 -17
  100. package/dist/components/tab-bar/typedef.js +11 -11
  101. package/dist/config/imagetools-config.js +189 -189
  102. package/dist/config/imagetools.d.ts +72 -72
  103. package/dist/constants/bases.js +13 -13
  104. package/dist/constants/errors/api.js +9 -9
  105. package/dist/constants/errors/generic.js +5 -5
  106. package/dist/constants/errors/index.js +3 -3
  107. package/dist/constants/errors/jwt.js +5 -5
  108. package/dist/constants/http/headers.js +6 -6
  109. package/dist/constants/http/index.js +2 -2
  110. package/dist/constants/http/methods.js +2 -2
  111. package/dist/constants/index.js +3 -3
  112. package/dist/constants/mime/application.js +5 -5
  113. package/dist/constants/mime/audio.js +13 -13
  114. package/dist/constants/mime/image.js +3 -3
  115. package/dist/constants/mime/index.js +4 -4
  116. package/dist/constants/mime/text.js +2 -2
  117. package/dist/constants/regexp/index.js +31 -31
  118. package/dist/constants/regexp/inspiratie.js__ +95 -95
  119. package/dist/constants/regexp/text.js +49 -49
  120. package/dist/constants/regexp/user.js +32 -32
  121. package/dist/constants/regexp/web.js +3 -3
  122. package/dist/constants/state-labels/drag-states.js +6 -6
  123. package/dist/constants/state-labels/drop-states.js +6 -6
  124. package/dist/constants/state-labels/input-states.js +11 -11
  125. package/dist/constants/state-labels/submit-states.js +4 -4
  126. package/dist/constants/time.js +28 -28
  127. package/dist/css/utilities.css +43 -43
  128. package/dist/design/design-config.js +73 -73
  129. package/dist/design/tailwind-theme-extend.js +158 -158
  130. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  131. package/dist/features/button-group/typedef.js +10 -10
  132. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  133. package/dist/features/compare-left-right/index.js +1 -1
  134. package/dist/features/game-box/GameBox.svelte +577 -577
  135. package/dist/features/game-box/gamebox.util.js +83 -83
  136. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  137. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  138. package/dist/features/image-box/ImageBox.svelte +210 -210
  139. package/dist/features/image-box/index.js +5 -5
  140. package/dist/features/image-box/typedef.js +32 -32
  141. package/dist/features/index.js +23 -23
  142. package/dist/features/presenter/ImageSlide.svelte +64 -64
  143. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  144. package/dist/features/presenter/Presenter.svelte +142 -142
  145. package/dist/features/presenter/constants.js +7 -7
  146. package/dist/features/presenter/index.js +10 -10
  147. package/dist/features/presenter/typedef.js +106 -106
  148. package/dist/features/presenter/util.js +210 -210
  149. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  150. package/dist/schemas/index.js +1 -1
  151. package/dist/schemas/validate-url.js +180 -180
  152. package/dist/server/index.js +1 -1
  153. package/dist/server/logger.js +94 -94
  154. package/dist/states/index.js +1 -1
  155. package/dist/states/navigation.svelte.js +55 -55
  156. package/dist/stores/index.js +1 -1
  157. package/dist/stores/theme.js +80 -80
  158. package/dist/themes/hkdev/components/blocks/text-block.css +41 -41
  159. package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
  160. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  161. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  162. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  163. package/dist/themes/hkdev/components/buttons/skip-button.css +6 -6
  164. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  165. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +48 -48
  166. package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
  167. package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
  168. package/dist/themes/hkdev/components/panels/panel.css +27 -27
  169. package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
  170. package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
  171. package/dist/themes/hkdev/components.css +53 -53
  172. package/dist/themes/hkdev/debug.css +1 -1
  173. package/dist/themes/hkdev/global/layout.css +39 -39
  174. package/dist/themes/hkdev/global/on-colors.css +53 -53
  175. package/dist/themes/hkdev/globals.css +11 -11
  176. package/dist/themes/hkdev/responsive.css +12 -12
  177. package/dist/themes/hkdev/theme-ext.js +15 -15
  178. package/dist/themes/hkdev/theme.js +235 -235
  179. package/dist/themes/index.js +1 -1
  180. package/dist/typedef/context.js +6 -6
  181. package/dist/typedef/drag.js +25 -25
  182. package/dist/typedef/drop.js +12 -12
  183. package/dist/typedef/image.js +38 -38
  184. package/dist/typedef/index.js +4 -4
  185. package/dist/util/array/index.js +436 -436
  186. package/dist/util/bases/base58.js +262 -262
  187. package/dist/util/bases/index.js +1 -1
  188. package/dist/util/compare/index.js +247 -247
  189. package/dist/util/css/css-vars.js +83 -83
  190. package/dist/util/css/index.js +1 -1
  191. package/dist/util/design-system/components/states.js +22 -22
  192. package/dist/util/design-system/css/clamp.js +66 -66
  193. package/dist/util/design-system/css/root-design-vars.js +102 -102
  194. package/dist/util/design-system/index.js +5 -5
  195. package/dist/util/design-system/layout/scaling.js +228 -228
  196. package/dist/util/design-system/skeleton.js +208 -208
  197. package/dist/util/design-system/tailwind.js +288 -288
  198. package/dist/util/env/index.js +9 -9
  199. package/dist/util/expect/arrays.js +47 -47
  200. package/dist/util/expect/index.js +259 -259
  201. package/dist/util/expect/primitives.js +55 -55
  202. package/dist/util/expect/url.js +60 -60
  203. package/dist/util/function/index.js +218 -218
  204. package/dist/util/geo/index.js +26 -26
  205. package/dist/util/http/caching.js +263 -263
  206. package/dist/util/http/errors.js +97 -97
  207. package/dist/util/http/headers.js +75 -75
  208. package/dist/util/http/http-request.js +379 -379
  209. package/dist/util/http/index.js +22 -22
  210. package/dist/util/http/json-request.js +224 -224
  211. package/dist/util/http/mocks.js +65 -65
  212. package/dist/util/http/response.js +294 -294
  213. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  214. package/dist/util/http/typedef.js +93 -93
  215. package/dist/util/http/url.js +52 -52
  216. package/dist/util/image/index.js +86 -86
  217. package/dist/util/index.js +2 -2
  218. package/dist/util/is/index.js +140 -140
  219. package/dist/util/iterate/index.js +234 -234
  220. package/dist/util/object/index.js +1361 -1361
  221. package/dist/util/singleton/index.js +97 -97
  222. package/dist/util/string/array-path.js +75 -75
  223. package/dist/util/string/convert.js +54 -54
  224. package/dist/util/string/fs.js +226 -226
  225. package/dist/util/string/index.js +5 -5
  226. package/dist/util/string/interpolate.js +61 -61
  227. package/dist/util/string/pad.js +10 -10
  228. package/dist/util/svelte/index.js +4 -4
  229. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  230. package/dist/util/svelte/observe/index.js +49 -49
  231. package/dist/util/svelte/state-context/index.js +117 -117
  232. package/dist/util/svelte/wait/index.js +38 -38
  233. package/dist/util/sveltekit/index.js +1 -1
  234. package/dist/util/sveltekit/route-folders/index.js +101 -101
  235. package/dist/util/time/index.js +323 -323
  236. package/dist/util/unique/index.js +249 -249
  237. package/dist/valibot/date.js__ +10 -10
  238. package/dist/valibot/index.js +9 -9
  239. package/dist/valibot/url.js +95 -95
  240. package/dist/valibot/user.js +23 -23
  241. package/dist/zod/all.js +33 -33
  242. package/dist/zod/generic.js +11 -11
  243. package/dist/zod/javascript.js +32 -32
  244. package/dist/zod/user.js +16 -16
  245. package/dist/zod/web.js +52 -52
  246. package/package.json +112 -112
@@ -1,35 +1,35 @@
1
- import { CONTENT_TYPE, CONTENT_LENGTH } from '../../../constants/http/index.js';
2
-
3
- import { AUDIO_WAV } from '../../../constants/mime/audio.js';
4
-
5
- // import MockWav from './tiny-silence.wav?raw';
6
-
7
- const BASE64_WAV =
8
- 'UklGRnwAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
9
-
10
- /**
11
- * Create a response value that can be used by a mocked
12
- * fetch function
13
- *
14
- * @returns {Response}
15
- */
16
- export function createWavResponse(/* data , options */) {
17
- // @note encode as Uint8Array to get the proper byte size of data
18
- // const bytes = new TextEncoder().encode(MockWav);
19
-
20
- const binaryString = atob(BASE64_WAV);
21
- const bytes = new Uint8Array(binaryString.length);
22
-
23
- for (let i = 0; i < binaryString.length; i++) {
24
- bytes[i] = binaryString.charCodeAt(i);
25
- }
26
-
27
- const response = new Response(bytes, {
28
- headers: new Headers({
29
- [CONTENT_TYPE]: AUDIO_WAV,
30
- [CONTENT_LENGTH]: String(bytes.length)
31
- })
32
- });
33
-
34
- return response;
35
- }
1
+ import { CONTENT_TYPE, CONTENT_LENGTH } from '../../../constants/http/index.js';
2
+
3
+ import { AUDIO_WAV } from '../../../constants/mime/audio.js';
4
+
5
+ // import MockWav from './tiny-silence.wav?raw';
6
+
7
+ const BASE64_WAV =
8
+ 'UklGRnwAAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
9
+
10
+ /**
11
+ * Create a response value that can be used by a mocked
12
+ * fetch function
13
+ *
14
+ * @returns {Response}
15
+ */
16
+ export function createWavResponse(/* data , options */) {
17
+ // @note encode as Uint8Array to get the proper byte size of data
18
+ // const bytes = new TextEncoder().encode(MockWav);
19
+
20
+ const binaryString = atob(BASE64_WAV);
21
+ const bytes = new Uint8Array(binaryString.length);
22
+
23
+ for (let i = 0; i < binaryString.length; i++) {
24
+ bytes[i] = binaryString.charCodeAt(i);
25
+ }
26
+
27
+ const response = new Response(bytes, {
28
+ headers: new Headers({
29
+ [CONTENT_TYPE]: AUDIO_WAV,
30
+ [CONTENT_LENGTH]: String(bytes.length)
31
+ })
32
+ });
33
+
34
+ return response;
35
+ }
@@ -1,133 +1,133 @@
1
- /**
2
- * Initial code borrowed from:
3
- *
4
- * @see {@link https://runed.dev/docs/utilities/finite-state-machine}
5
- */
6
-
7
- /**
8
- * Check if the value is valid meta data
9
- *
10
- * @param {any} meta
11
- */
12
- export function isLifecycleFnMeta(meta) {
13
- return (
14
- !!meta &&
15
- typeof meta === 'object' &&
16
- 'to' in meta &&
17
- 'from' in meta &&
18
- 'event' in meta &&
19
- 'args' in meta
20
- );
21
- }
22
-
23
- /**
24
- * Defines a Finite State Machine
25
- */
26
- export default class FiniteStateMachine {
27
- #current = $state();
28
- states;
29
- #timeout = {};
30
-
31
- /**
32
- * Constructor
33
- *
34
- * @param {string} initial
35
- * @param {{ [key: string]: { [key: string]: (string|((...args: any[])=>void)) } }} states
36
- */
37
- constructor(initial, states) {
38
- this.#current = initial;
39
- this.states = states;
40
-
41
- // synthetically trigger _enter for the initial state.
42
- this.#dispatch('_enter', {
43
- from: null,
44
- to: initial,
45
- event: null,
46
- args: []
47
- });
48
- }
49
-
50
- /**
51
- * Transition to new state
52
- *
53
- * @param {string} newState
54
- * @param {string} event
55
- * @param {any[]} [args]
56
- */
57
- #transition(newState, event, args) {
58
- const metadata = { from: this.#current, to: newState, event, args };
59
- this.#dispatch('_exit', metadata);
60
- this.#current = newState;
61
- this.#dispatch('_enter', metadata);
62
- }
63
-
64
- /**
65
- * Dispatch an event
66
- *
67
- * @param {string} event
68
- * @param {any[]} args
69
- */
70
- #dispatch(event, ...args) {
71
- const action =
72
- this.states[this.#current]?.[event] ?? this.states['*']?.[event];
73
- if (action instanceof Function) {
74
- if (event === '_enter' || event === '_exit') {
75
- if (isLifecycleFnMeta(args[0])) {
76
- action(args[0]);
77
- } else {
78
- console.warn(
79
- 'Invalid metadata passed to lifecycle function of the FSM.'
80
- );
81
- }
82
- } else {
83
- return action(...args);
84
- }
85
- } else if (typeof action === 'string') {
86
- return action;
87
- } else if (event !== '_enter' && event !== '_exit') {
88
- console.warn(
89
- 'No action defined for event',
90
- event,
91
- 'in state',
92
- this.#current
93
- );
94
- }
95
- }
96
- /**
97
- * Triggers a new event and returns the new state.
98
- *
99
- * @param {string} event
100
- * @param {any[]} args
101
- */
102
- send(event, ...args) {
103
- const newState = this.#dispatch(event, ...args);
104
- if (newState && newState !== this.#current) {
105
- this.#transition(newState, event, args);
106
- }
107
-
108
- return this.#current;
109
- }
110
- /**
111
- * Debounces the triggering of an event.
112
- *
113
- * @param {number} wait
114
- * @param {string} event
115
- * @param {any[]} args
116
- */
117
- async debounce(wait = 500, event, ...args) {
118
- if (this.#timeout[event]) {
119
- clearTimeout(this.#timeout[event]);
120
- }
121
- return new Promise((resolve) => {
122
- this.#timeout[event] = setTimeout(() => {
123
- delete this.#timeout[event];
124
- resolve(this.send(event, ...args));
125
- }, wait);
126
- });
127
- }
128
-
129
- /** The current state. */
130
- get current() {
131
- return this.#current;
132
- }
133
- }
1
+ /**
2
+ * Initial code borrowed from:
3
+ *
4
+ * @see {@link https://runed.dev/docs/utilities/finite-state-machine}
5
+ */
6
+
7
+ /**
8
+ * Check if the value is valid meta data
9
+ *
10
+ * @param {any} meta
11
+ */
12
+ export function isLifecycleFnMeta(meta) {
13
+ return (
14
+ !!meta &&
15
+ typeof meta === 'object' &&
16
+ 'to' in meta &&
17
+ 'from' in meta &&
18
+ 'event' in meta &&
19
+ 'args' in meta
20
+ );
21
+ }
22
+
23
+ /**
24
+ * Defines a Finite State Machine
25
+ */
26
+ export default class FiniteStateMachine {
27
+ #current = $state();
28
+ states;
29
+ #timeout = {};
30
+
31
+ /**
32
+ * Constructor
33
+ *
34
+ * @param {string} initial
35
+ * @param {{ [key: string]: { [key: string]: (string|((...args: any[])=>void)) } }} states
36
+ */
37
+ constructor(initial, states) {
38
+ this.#current = initial;
39
+ this.states = states;
40
+
41
+ // synthetically trigger _enter for the initial state.
42
+ this.#dispatch('_enter', {
43
+ from: null,
44
+ to: initial,
45
+ event: null,
46
+ args: []
47
+ });
48
+ }
49
+
50
+ /**
51
+ * Transition to new state
52
+ *
53
+ * @param {string} newState
54
+ * @param {string} event
55
+ * @param {any[]} [args]
56
+ */
57
+ #transition(newState, event, args) {
58
+ const metadata = { from: this.#current, to: newState, event, args };
59
+ this.#dispatch('_exit', metadata);
60
+ this.#current = newState;
61
+ this.#dispatch('_enter', metadata);
62
+ }
63
+
64
+ /**
65
+ * Dispatch an event
66
+ *
67
+ * @param {string} event
68
+ * @param {any[]} args
69
+ */
70
+ #dispatch(event, ...args) {
71
+ const action =
72
+ this.states[this.#current]?.[event] ?? this.states['*']?.[event];
73
+ if (action instanceof Function) {
74
+ if (event === '_enter' || event === '_exit') {
75
+ if (isLifecycleFnMeta(args[0])) {
76
+ action(args[0]);
77
+ } else {
78
+ console.warn(
79
+ 'Invalid metadata passed to lifecycle function of the FSM.'
80
+ );
81
+ }
82
+ } else {
83
+ return action(...args);
84
+ }
85
+ } else if (typeof action === 'string') {
86
+ return action;
87
+ } else if (event !== '_enter' && event !== '_exit') {
88
+ console.warn(
89
+ 'No action defined for event',
90
+ event,
91
+ 'in state',
92
+ this.#current
93
+ );
94
+ }
95
+ }
96
+ /**
97
+ * Triggers a new event and returns the new state.
98
+ *
99
+ * @param {string} event
100
+ * @param {any[]} args
101
+ */
102
+ send(event, ...args) {
103
+ const newState = this.#dispatch(event, ...args);
104
+ if (newState && newState !== this.#current) {
105
+ this.#transition(newState, event, args);
106
+ }
107
+
108
+ return this.#current;
109
+ }
110
+ /**
111
+ * Debounces the triggering of an event.
112
+ *
113
+ * @param {number} wait
114
+ * @param {string} event
115
+ * @param {any[]} args
116
+ */
117
+ async debounce(wait = 500, event, ...args) {
118
+ if (this.#timeout[event]) {
119
+ clearTimeout(this.#timeout[event]);
120
+ }
121
+ return new Promise((resolve) => {
122
+ this.#timeout[event] = setTimeout(() => {
123
+ delete this.#timeout[event];
124
+ resolve(this.send(event, ...args));
125
+ }, wait);
126
+ });
127
+ }
128
+
129
+ /** The current state. */
130
+ get current() {
131
+ return this.#current;
132
+ }
133
+ }
@@ -1 +1 @@
1
- export { default as FiniteStateMachine } from './FiniteStateMachine.svelte';
1
+ export { default as FiniteStateMachine } from './FiniteStateMachine.svelte';
@@ -1,45 +1,45 @@
1
- /** @typedef {import('./typedef.js').ImageMeta} ImageMeta */
2
-
3
- import { toSingleImageMeta } from '../../../util/image/index.js';
4
-
5
- import {
6
- NetworkLoader
7
- } from '../network-loader/index.js';
8
-
9
- /**
10
- * ImageLoader instance
11
- * - Loads image data from network
12
- * - The loading process can be monitored
13
- */
14
- export default class ImageLoader extends NetworkLoader {
15
- /** @type {ImageMeta} */
16
- #imageMeta;
17
-
18
- /**
19
- * @param {object} _
20
- * @param {ImageMeta|ImageMeta[]} _.imageMeta
21
- */
22
- constructor({ imageMeta }) {
23
- imageMeta = toSingleImageMeta(imageMeta);
24
-
25
- super({ url: imageMeta.src });
26
-
27
- this.#imageMeta = imageMeta;
28
- }
29
-
30
- get imageMeta() {
31
- return this.#imageMeta;
32
- }
33
-
34
- get url() {
35
- return this._url;
36
- }
37
-
38
- // /**
39
- // * Get object URL that can be used as src parameter of an HTML image
40
- // *
41
- // * @note the objectURL should be revoked when no longer used
42
- // */
43
- // getObjectURL() {}
44
- //
45
- } // end class
1
+ /** @typedef {import('./typedef.js').ImageMeta} ImageMeta */
2
+
3
+ import { toSingleImageMeta } from '../../../util/image/index.js';
4
+
5
+ import {
6
+ NetworkLoader
7
+ } from '../network-loader/index.js';
8
+
9
+ /**
10
+ * ImageLoader instance
11
+ * - Loads image data from network
12
+ * - The loading process can be monitored
13
+ */
14
+ export default class ImageLoader extends NetworkLoader {
15
+ /** @type {ImageMeta} */
16
+ #imageMeta;
17
+
18
+ /**
19
+ * @param {object} _
20
+ * @param {ImageMeta|ImageMeta[]} _.imageMeta
21
+ */
22
+ constructor({ imageMeta }) {
23
+ imageMeta = toSingleImageMeta(imageMeta);
24
+
25
+ super({ url: imageMeta.src });
26
+
27
+ this.#imageMeta = imageMeta;
28
+ }
29
+
30
+ get imageMeta() {
31
+ return this.#imageMeta;
32
+ }
33
+
34
+ get url() {
35
+ return this._url;
36
+ }
37
+
38
+ // /**
39
+ // * Get object URL that can be used as src parameter of an HTML image
40
+ // *
41
+ // * @note the objectURL should be revoked when no longer used
42
+ // */
43
+ // getObjectURL() {}
44
+ //
45
+ } // end class