@hkdigital/lib-sveltekit 0.2.8 → 0.2.9

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 (243) 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 +112 -110
  60. package/dist/components/drag-drop/Draggable.svelte +498 -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 +6 -0
  65. package/dist/components/drag-drop/actions.js +18 -0
  66. package/dist/components/drag-drop/drag-state.svelte.js +319 -319
  67. package/dist/components/drag-drop/index.js +7 -7
  68. package/dist/components/drag-drop/util.js +85 -85
  69. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  70. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  71. package/dist/components/icons/HkIcon.svelte +86 -86
  72. package/dist/components/icons/HkTabIcon.svelte +116 -116
  73. package/dist/components/icons/SteezeIcon.svelte +97 -97
  74. package/dist/components/icons/index.js +6 -6
  75. package/dist/components/icons/typedef.js +16 -16
  76. package/dist/components/index.js +2 -2
  77. package/dist/components/inputs/index.js +1 -1
  78. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  79. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  80. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  81. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  82. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  83. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  84. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  85. package/dist/components/layout/grid-layers/util.js +74 -74
  86. package/dist/components/layout/index.js +1 -1
  87. package/dist/components/panels/index.js +1 -1
  88. package/dist/components/panels/panel/Panel.svelte +43 -43
  89. package/dist/components/rows/index.js +3 -3
  90. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  91. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  92. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  93. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  94. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  95. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  96. package/dist/components/tab-bar/index.js +17 -17
  97. package/dist/components/tab-bar/typedef.js +11 -11
  98. package/dist/config/imagetools-config.js +189 -189
  99. package/dist/config/imagetools.d.ts +72 -72
  100. package/dist/constants/bases.js +13 -13
  101. package/dist/constants/errors/api.js +9 -9
  102. package/dist/constants/errors/generic.js +5 -5
  103. package/dist/constants/errors/index.js +3 -3
  104. package/dist/constants/errors/jwt.js +5 -5
  105. package/dist/constants/http/headers.js +6 -6
  106. package/dist/constants/http/index.js +2 -2
  107. package/dist/constants/http/methods.js +2 -2
  108. package/dist/constants/index.js +3 -3
  109. package/dist/constants/mime/application.js +5 -5
  110. package/dist/constants/mime/audio.js +13 -13
  111. package/dist/constants/mime/image.js +3 -3
  112. package/dist/constants/mime/index.js +4 -4
  113. package/dist/constants/mime/text.js +2 -2
  114. package/dist/constants/regexp/index.js +31 -31
  115. package/dist/constants/regexp/inspiratie.js__ +95 -95
  116. package/dist/constants/regexp/text.js +49 -49
  117. package/dist/constants/regexp/user.js +32 -32
  118. package/dist/constants/regexp/web.js +3 -3
  119. package/dist/constants/state-labels/drag-states.js +6 -6
  120. package/dist/constants/state-labels/drop-states.js +6 -6
  121. package/dist/constants/state-labels/input-states.js +11 -11
  122. package/dist/constants/state-labels/submit-states.js +4 -4
  123. package/dist/constants/time.js +28 -28
  124. package/dist/css/utilities.css +43 -43
  125. package/dist/design/design-config.js +73 -73
  126. package/dist/design/tailwind-theme-extend.js +158 -158
  127. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  128. package/dist/features/button-group/typedef.js +10 -10
  129. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  130. package/dist/features/compare-left-right/index.js +1 -1
  131. package/dist/features/game-box/GameBox.svelte +577 -577
  132. package/dist/features/game-box/gamebox.util.js +83 -83
  133. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  134. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  135. package/dist/features/image-box/ImageBox.svelte +210 -210
  136. package/dist/features/image-box/index.js +5 -5
  137. package/dist/features/image-box/typedef.js +32 -32
  138. package/dist/features/index.js +23 -23
  139. package/dist/features/presenter/ImageSlide.svelte +64 -64
  140. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  141. package/dist/features/presenter/Presenter.svelte +142 -142
  142. package/dist/features/presenter/constants.js +7 -7
  143. package/dist/features/presenter/index.js +10 -10
  144. package/dist/features/presenter/typedef.js +106 -106
  145. package/dist/features/presenter/util.js +210 -210
  146. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  147. package/dist/schemas/index.js +1 -1
  148. package/dist/schemas/validate-url.js +180 -180
  149. package/dist/server/index.js +1 -1
  150. package/dist/server/logger.js +94 -94
  151. package/dist/states/index.js +1 -1
  152. package/dist/states/navigation.svelte.js +55 -55
  153. package/dist/stores/index.js +1 -1
  154. package/dist/stores/theme.js +80 -80
  155. package/dist/themes/hkdev/components/blocks/text-block.css +41 -41
  156. package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
  157. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  158. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  159. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  160. package/dist/themes/hkdev/components/buttons/skip-button.css +6 -6
  161. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  162. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +48 -48
  163. package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
  164. package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
  165. package/dist/themes/hkdev/components/panels/panel.css +27 -27
  166. package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
  167. package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
  168. package/dist/themes/hkdev/components.css +53 -53
  169. package/dist/themes/hkdev/debug.css +1 -1
  170. package/dist/themes/hkdev/global/layout.css +39 -39
  171. package/dist/themes/hkdev/global/on-colors.css +53 -53
  172. package/dist/themes/hkdev/globals.css +11 -11
  173. package/dist/themes/hkdev/responsive.css +12 -12
  174. package/dist/themes/hkdev/theme-ext.js +15 -15
  175. package/dist/themes/hkdev/theme.js +235 -235
  176. package/dist/themes/index.js +1 -1
  177. package/dist/typedef/context.js +6 -6
  178. package/dist/typedef/drag.js +25 -25
  179. package/dist/typedef/drop.js +12 -12
  180. package/dist/typedef/image.js +38 -38
  181. package/dist/typedef/index.js +4 -4
  182. package/dist/util/array/index.js +436 -436
  183. package/dist/util/bases/base58.js +262 -262
  184. package/dist/util/bases/index.js +1 -1
  185. package/dist/util/compare/index.js +247 -247
  186. package/dist/util/css/css-vars.js +83 -83
  187. package/dist/util/css/index.js +1 -1
  188. package/dist/util/design-system/components/states.js +22 -22
  189. package/dist/util/design-system/css/clamp.js +66 -66
  190. package/dist/util/design-system/css/root-design-vars.js +102 -102
  191. package/dist/util/design-system/index.js +5 -5
  192. package/dist/util/design-system/layout/scaling.js +228 -228
  193. package/dist/util/design-system/skeleton.js +208 -208
  194. package/dist/util/design-system/tailwind.js +288 -288
  195. package/dist/util/env/index.js +9 -9
  196. package/dist/util/expect/arrays.js +47 -47
  197. package/dist/util/expect/index.js +259 -259
  198. package/dist/util/expect/primitives.js +55 -55
  199. package/dist/util/expect/url.js +60 -60
  200. package/dist/util/function/index.js +218 -218
  201. package/dist/util/geo/index.js +26 -26
  202. package/dist/util/http/caching.js +263 -263
  203. package/dist/util/http/errors.js +97 -97
  204. package/dist/util/http/headers.js +75 -75
  205. package/dist/util/http/http-request.js +379 -379
  206. package/dist/util/http/index.js +22 -22
  207. package/dist/util/http/json-request.js +224 -224
  208. package/dist/util/http/mocks.js +65 -65
  209. package/dist/util/http/response.js +294 -294
  210. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  211. package/dist/util/http/typedef.js +93 -93
  212. package/dist/util/http/url.js +52 -52
  213. package/dist/util/image/index.js +86 -86
  214. package/dist/util/index.js +2 -2
  215. package/dist/util/is/index.js +140 -140
  216. package/dist/util/iterate/index.js +234 -234
  217. package/dist/util/object/index.js +1361 -1361
  218. package/dist/util/singleton/index.js +97 -97
  219. package/dist/util/string/array-path.js +75 -75
  220. package/dist/util/string/convert.js +54 -54
  221. package/dist/util/string/fs.js +226 -226
  222. package/dist/util/string/index.js +5 -5
  223. package/dist/util/string/interpolate.js +61 -61
  224. package/dist/util/string/pad.js +10 -10
  225. package/dist/util/svelte/index.js +4 -4
  226. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  227. package/dist/util/svelte/observe/index.js +49 -49
  228. package/dist/util/svelte/state-context/index.js +117 -117
  229. package/dist/util/svelte/wait/index.js +38 -38
  230. package/dist/util/sveltekit/index.js +1 -1
  231. package/dist/util/sveltekit/route-folders/index.js +101 -101
  232. package/dist/util/time/index.js +323 -323
  233. package/dist/util/unique/index.js +249 -249
  234. package/dist/valibot/date.js__ +10 -10
  235. package/dist/valibot/index.js +9 -9
  236. package/dist/valibot/url.js +95 -95
  237. package/dist/valibot/user.js +23 -23
  238. package/dist/zod/all.js +33 -33
  239. package/dist/zod/generic.js +11 -11
  240. package/dist/zod/javascript.js +32 -32
  241. package/dist/zod/user.js +16 -16
  242. package/dist/zod/web.js +52 -52
  243. package/package.json +112 -112
@@ -1,104 +1,104 @@
1
- <script>
2
- /**
3
- * @example
4
- *
5
- */
6
-
7
- /**
8
- * @type {{
9
- * base?: string,
10
- * bg?: string,
11
- * justify?: 'start'|'center'|'end'|'between'|'around'|'evenly'|'stretch'|'normal',
12
- * justifyItems?: 'start'|'center'|'end'|'stretch',
13
- * gap?: string,
14
- * classes?: string,
15
- * children?: import('svelte').Snippet,
16
- * } & { [attr: string]: any }}
17
- */
18
- const {
19
- // Style
20
- base,
21
- bg,
22
- justify,
23
- justifyItems,
24
- flow = 'col',
25
- gap,
26
- classes,
27
-
28
- // Snippets
29
- children,
30
-
31
- // Attributes
32
- ...attrs
33
- } = $props();
34
-
35
- let colsCls = $derived.by(() => {
36
- //
37
- // The CSS classes to apply for the desired column layout
38
- //
39
- let out = '';
40
-
41
- /* @note justify-end won't work with auto-cols-fr! */
42
-
43
- if (justifyItems && justify !== 'end') {
44
- out += 'auto-cols-fr';
45
- } else {
46
- out += 'auto-cols-auto';
47
- }
48
-
49
- if (flow) {
50
- out += ` grid-flow-${flow}`;
51
- }
52
-
53
- // TODO: CSS for a specific number of columns
54
-
55
- return out.replace(/\s{2,}/g, ' ').trim();
56
- });
57
-
58
- let justifyCls = $derived.by(() => {
59
- //
60
- // Determine justify classes
61
- //
62
- if (justify) {
63
- return `justify-${justify}`;
64
- }
65
-
66
- return '';
67
- });
68
-
69
- let justifyItemsCls = $derived.by(() => {
70
- //
71
- // Determine justify-items classes
72
- //
73
- if (justifyItems) {
74
- return `justify-items-${justifyItems}`;
75
- }
76
-
77
- return '';
78
- });
79
- </script>
80
-
81
- <div
82
- data-row="panel-grid-row"
83
- class="{base} {bg} {gap} {classes} grid {colsCls} {justifyCls} {justifyItemsCls}"
84
- {...attrs}
85
- >
86
- {@render children()}
87
- </div>
88
-
89
- <style>
90
- /* This rule makes justify-items-start behave like
91
- justify-items-center and justify-items-end */
92
- /*[data-row='panel-grid-row'] {
93
- & > :global(*) {
94
- width: fit-content;
95
- height: fit-content;
96
- }
97
- }*/
98
-
99
- /*[data-row='panel-grid-row'] {
100
- & > :global(*) {
101
- min-width: 0;
102
- }
103
- }*/
104
- </style>
1
+ <script>
2
+ /**
3
+ * @example
4
+ *
5
+ */
6
+
7
+ /**
8
+ * @type {{
9
+ * base?: string,
10
+ * bg?: string,
11
+ * justify?: 'start'|'center'|'end'|'between'|'around'|'evenly'|'stretch'|'normal',
12
+ * justifyItems?: 'start'|'center'|'end'|'stretch',
13
+ * gap?: string,
14
+ * classes?: string,
15
+ * children?: import('svelte').Snippet,
16
+ * } & { [attr: string]: any }}
17
+ */
18
+ const {
19
+ // Style
20
+ base,
21
+ bg,
22
+ justify,
23
+ justifyItems,
24
+ flow = 'col',
25
+ gap,
26
+ classes,
27
+
28
+ // Snippets
29
+ children,
30
+
31
+ // Attributes
32
+ ...attrs
33
+ } = $props();
34
+
35
+ let colsCls = $derived.by(() => {
36
+ //
37
+ // The CSS classes to apply for the desired column layout
38
+ //
39
+ let out = '';
40
+
41
+ /* @note justify-end won't work with auto-cols-fr! */
42
+
43
+ if (justifyItems && justify !== 'end') {
44
+ out += 'auto-cols-fr';
45
+ } else {
46
+ out += 'auto-cols-auto';
47
+ }
48
+
49
+ if (flow) {
50
+ out += ` grid-flow-${flow}`;
51
+ }
52
+
53
+ // TODO: CSS for a specific number of columns
54
+
55
+ return out.replace(/\s{2,}/g, ' ').trim();
56
+ });
57
+
58
+ let justifyCls = $derived.by(() => {
59
+ //
60
+ // Determine justify classes
61
+ //
62
+ if (justify) {
63
+ return `justify-${justify}`;
64
+ }
65
+
66
+ return '';
67
+ });
68
+
69
+ let justifyItemsCls = $derived.by(() => {
70
+ //
71
+ // Determine justify-items classes
72
+ //
73
+ if (justifyItems) {
74
+ return `justify-items-${justifyItems}`;
75
+ }
76
+
77
+ return '';
78
+ });
79
+ </script>
80
+
81
+ <div
82
+ data-row="panel-grid-row"
83
+ class="{base} {bg} {gap} {classes} grid {colsCls} {justifyCls} {justifyItemsCls}"
84
+ {...attrs}
85
+ >
86
+ {@render children()}
87
+ </div>
88
+
89
+ <style>
90
+ /* This rule makes justify-items-start behave like
91
+ justify-items-center and justify-items-end */
92
+ /*[data-row='panel-grid-row'] {
93
+ & > :global(*) {
94
+ width: fit-content;
95
+ height: fit-content;
96
+ }
97
+ }*/
98
+
99
+ /*[data-row='panel-grid-row'] {
100
+ & > :global(*) {
101
+ min-width: 0;
102
+ }
103
+ }*/
104
+ </style>
@@ -1,40 +1,40 @@
1
- <script>
2
- import { PanelGridRow } from '../index.js';
3
-
4
- /**
5
- * @example
6
- */
7
-
8
- /**
9
- * @type {{
10
- * base?: string,
11
- * bg?: string,
12
- * justify?: 'start'|'center'|'end'|'between'|'around'|'evenly'|'stretch'|'normal',
13
- * justifyItems?: 'start'|'center'|'end'|'stretch',
14
- * gap?: string,
15
- * classes?: string,
16
- * children?: import('svelte').Snippet,
17
- * } & { [attr: string]: any }}
18
- */
19
- const {
20
- // Style
21
- // base,
22
- // bg,
23
- // justify,
24
- // justifyItems,
25
- // flow = 'col',
26
- // gap,
27
- // classes,
28
-
29
- // // Snippets
30
- // children,
31
-
32
- // Attributes
33
- ...attrs
34
- } = $props();
35
- </script>
36
-
37
- <!-- class="test-small mb-8p mt-8 grid auto-cols-fr grid-flow-col justify-stretch gap-20p" -->
38
-
39
- <PanelGridRow data-wrapper="panel-row-2" gap="gap-20p" {...attrs}
40
- ></PanelGridRow>
1
+ <script>
2
+ import { PanelGridRow } from '../index.js';
3
+
4
+ /**
5
+ * @example
6
+ */
7
+
8
+ /**
9
+ * @type {{
10
+ * base?: string,
11
+ * bg?: string,
12
+ * justify?: 'start'|'center'|'end'|'between'|'around'|'evenly'|'stretch'|'normal',
13
+ * justifyItems?: 'start'|'center'|'end'|'stretch',
14
+ * gap?: string,
15
+ * classes?: string,
16
+ * children?: import('svelte').Snippet,
17
+ * } & { [attr: string]: any }}
18
+ */
19
+ const {
20
+ // Style
21
+ // base,
22
+ // bg,
23
+ // justify,
24
+ // justifyItems,
25
+ // flow = 'col',
26
+ // gap,
27
+ // classes,
28
+
29
+ // // Snippets
30
+ // children,
31
+
32
+ // Attributes
33
+ ...attrs
34
+ } = $props();
35
+ </script>
36
+
37
+ <!-- class="test-small mb-8p mt-8 grid auto-cols-fr grid-flow-col justify-stretch gap-20p" -->
38
+
39
+ <PanelGridRow data-wrapper="panel-row-2" gap="gap-20p" {...attrs}
40
+ ></PanelGridRow>
@@ -1,149 +1,149 @@
1
- import { defineStateContext } from '../../util/svelte/state-context/index.js';
2
- import { nav } from '../../states/navigation.svelte.js';
3
-
4
- import { goto } from '$app/navigation';
5
-
6
- /**
7
- * @typedef {import('./typedef.js').Tab} Tab
8
- */
9
-
10
- /* ------------------------------------------------------- Define state class */
11
-
12
- export class HkTabBarState {
13
- /** @type {Tab[]} */
14
- tabs = $state.raw([]);
15
-
16
- /** @type {any} */
17
- tabBarElement = $state();
18
-
19
- /** @type {HTMLElement[]} */
20
- tabElements = [];
21
-
22
- currentTabIndex = $state(-1);
23
-
24
- /** @type {Tab|null} */
25
- currentTab = $state(null);
26
-
27
- // /** @type {boolean} */
28
- // ready = $derived(this.currentTab !== null);
29
-
30
- constructor() {
31
- $effect.pre(() => {
32
- // > Update this.currentTab
33
-
34
- const tabs = this.tabs;
35
-
36
- if (!this.tabs?.length || this.currentTabIndex === -1) {
37
- this.currentTab = null;
38
- } else {
39
- const index = this.currentTabIndex;
40
- const tabValue = tabs[index] ?? null;
41
-
42
- // console.log('Selected active tab', index, tabValue);
43
-
44
- this.currentTab = tabValue;
45
- }
46
- });
47
- } // end constructor
48
-
49
- /**
50
- * Set tab contents
51
- *
52
- * @param {Tab[]} tabs
53
- */
54
- setTabs(tabs) {
55
- // console.log('setTabs', tabs);
56
- this.tabs = tabs;
57
-
58
- if (this.currentTabIndex >= tabs.length) {
59
- this.currentTabIndex = 0;
60
- }
61
- }
62
-
63
- /**
64
- * Navigate to the route that is specified on the current tab (if any)
65
- */
66
- navigate() {
67
- if (!this.currentTab || !this.currentTab.route) {
68
- return;
69
- }
70
-
71
- goto(this.currentTab.route);
72
- }
73
-
74
- /**
75
- * Select the tab that has a route property that matches the current
76
- * browser location pathname
77
- *
78
- * @note the pathname starts with a '/'
79
- *
80
- * @param {string} [pathname]
81
- * If not specified, pathname from the browser's location will be used
82
- */
83
- selectTabByPathName(pathname) {
84
- if (!this.tabs.length) {
85
- return;
86
- }
87
-
88
- if (!pathname) {
89
- pathname = nav.pathname;
90
- }
91
-
92
- // console.log(`selectTabByPathName [${pathname}]`);
93
-
94
- const tabs = this.tabs;
95
-
96
- // > Try to find an exact match
97
-
98
- for (let j = 0, n = tabs.length; j < n; j = j + 1) {
99
- const tab = tabs[j];
100
-
101
- if (tab.route && tab.route === pathname) {
102
- //console.log('Found tab by route', tab);
103
- this.selectTabByIndex(j);
104
-
105
- return;
106
- }
107
- } // end for
108
-
109
- // > Try to find a match using a route prefix
110
-
111
- for (let j = 0, n = tabs.length; j < n; j = j + 1) {
112
- const tab = tabs[j];
113
-
114
- if (tab.routePrefix && pathname.startsWith(tab.routePrefix)) {
115
- //console.log('Found tab by route prefix', tab);
116
- this.selectTabByIndex(j);
117
-
118
- return;
119
- }
120
- } // end for
121
- }
122
-
123
- /**
124
- * Select a tab by its index in the array this.tabs
125
- *
126
- * @param {number} index
127
- */
128
- selectTabByIndex(index) {
129
- // console.log(`Select tab by index [${index}]`);
130
- this.currentTabIndex = index;
131
- }
132
-
133
- /**
134
- * Link a tab to a DOM element
135
- * - An reference is stored as property
136
- * - This reference can be used by extensions of this tab bar,
137
- * e.g. to manipulate the visual appearance of the tabs
138
- *
139
- * @param {number} index
140
- * @param {HTMLElement} tabElement
141
- */
142
- linkTab(index, tabElement) {
143
- this.tabElements[index] = tabElement;
144
- }
145
- } // end class
146
-
147
- /* -------------------------------------- Export create & get state functions */
148
-
149
- export const [createOrGetState, createState, getState] = defineStateContext(HkTabBarState);
1
+ import { defineStateContext } from '../../util/svelte/state-context/index.js';
2
+ import { nav } from '../../states/navigation.svelte.js';
3
+
4
+ import { goto } from '$app/navigation';
5
+
6
+ /**
7
+ * @typedef {import('./typedef.js').Tab} Tab
8
+ */
9
+
10
+ /* ------------------------------------------------------- Define state class */
11
+
12
+ export class HkTabBarState {
13
+ /** @type {Tab[]} */
14
+ tabs = $state.raw([]);
15
+
16
+ /** @type {any} */
17
+ tabBarElement = $state();
18
+
19
+ /** @type {HTMLElement[]} */
20
+ tabElements = [];
21
+
22
+ currentTabIndex = $state(-1);
23
+
24
+ /** @type {Tab|null} */
25
+ currentTab = $state(null);
26
+
27
+ // /** @type {boolean} */
28
+ // ready = $derived(this.currentTab !== null);
29
+
30
+ constructor() {
31
+ $effect.pre(() => {
32
+ // > Update this.currentTab
33
+
34
+ const tabs = this.tabs;
35
+
36
+ if (!this.tabs?.length || this.currentTabIndex === -1) {
37
+ this.currentTab = null;
38
+ } else {
39
+ const index = this.currentTabIndex;
40
+ const tabValue = tabs[index] ?? null;
41
+
42
+ // console.log('Selected active tab', index, tabValue);
43
+
44
+ this.currentTab = tabValue;
45
+ }
46
+ });
47
+ } // end constructor
48
+
49
+ /**
50
+ * Set tab contents
51
+ *
52
+ * @param {Tab[]} tabs
53
+ */
54
+ setTabs(tabs) {
55
+ // console.log('setTabs', tabs);
56
+ this.tabs = tabs;
57
+
58
+ if (this.currentTabIndex >= tabs.length) {
59
+ this.currentTabIndex = 0;
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Navigate to the route that is specified on the current tab (if any)
65
+ */
66
+ navigate() {
67
+ if (!this.currentTab || !this.currentTab.route) {
68
+ return;
69
+ }
70
+
71
+ goto(this.currentTab.route);
72
+ }
73
+
74
+ /**
75
+ * Select the tab that has a route property that matches the current
76
+ * browser location pathname
77
+ *
78
+ * @note the pathname starts with a '/'
79
+ *
80
+ * @param {string} [pathname]
81
+ * If not specified, pathname from the browser's location will be used
82
+ */
83
+ selectTabByPathName(pathname) {
84
+ if (!this.tabs.length) {
85
+ return;
86
+ }
87
+
88
+ if (!pathname) {
89
+ pathname = nav.pathname;
90
+ }
91
+
92
+ // console.log(`selectTabByPathName [${pathname}]`);
93
+
94
+ const tabs = this.tabs;
95
+
96
+ // > Try to find an exact match
97
+
98
+ for (let j = 0, n = tabs.length; j < n; j = j + 1) {
99
+ const tab = tabs[j];
100
+
101
+ if (tab.route && tab.route === pathname) {
102
+ //console.log('Found tab by route', tab);
103
+ this.selectTabByIndex(j);
104
+
105
+ return;
106
+ }
107
+ } // end for
108
+
109
+ // > Try to find a match using a route prefix
110
+
111
+ for (let j = 0, n = tabs.length; j < n; j = j + 1) {
112
+ const tab = tabs[j];
113
+
114
+ if (tab.routePrefix && pathname.startsWith(tab.routePrefix)) {
115
+ //console.log('Found tab by route prefix', tab);
116
+ this.selectTabByIndex(j);
117
+
118
+ return;
119
+ }
120
+ } // end for
121
+ }
122
+
123
+ /**
124
+ * Select a tab by its index in the array this.tabs
125
+ *
126
+ * @param {number} index
127
+ */
128
+ selectTabByIndex(index) {
129
+ // console.log(`Select tab by index [${index}]`);
130
+ this.currentTabIndex = index;
131
+ }
132
+
133
+ /**
134
+ * Link a tab to a DOM element
135
+ * - An reference is stored as property
136
+ * - This reference can be used by extensions of this tab bar,
137
+ * e.g. to manipulate the visual appearance of the tabs
138
+ *
139
+ * @param {number} index
140
+ * @param {HTMLElement} tabElement
141
+ */
142
+ linkTab(index, tabElement) {
143
+ this.tabElements[index] = tabElement;
144
+ }
145
+ } // end class
146
+
147
+ /* -------------------------------------- Export create & get state functions */
148
+
149
+ export const [createOrGetState, createState, getState] = defineStateContext(HkTabBarState);