@hkdigital/lib-sveltekit 0.2.21 → 0.2.22

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 (254) hide show
  1. package/README.md +149 -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 +210 -210
  15. package/dist/classes/logging/constants.js +16 -16
  16. package/dist/classes/logging/index.js +4 -4
  17. package/dist/classes/logging/typedef.js +17 -17
  18. package/dist/classes/promise/HkPromise.js +377 -377
  19. package/dist/classes/promise/index.js +1 -1
  20. package/dist/classes/services/ServiceBase.js +463 -463
  21. package/dist/classes/services/ServiceManager.js +614 -614
  22. package/dist/classes/services/index.js +5 -5
  23. package/dist/classes/services/service-states.js +205 -205
  24. package/dist/classes/services/typedef.js +179 -179
  25. package/dist/classes/stores/SubscribersCount.js +107 -107
  26. package/dist/classes/stores/index.js +1 -1
  27. package/dist/classes/streams/LogTransformStream.js +19 -19
  28. package/dist/classes/streams/ServerEventsStore.js +110 -110
  29. package/dist/classes/streams/TimeStampSource.js +26 -26
  30. package/dist/classes/streams/index.js +3 -3
  31. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  32. package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
  33. package/dist/classes/svelte/audio/mocks.js +35 -35
  34. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  35. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  36. package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
  37. package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
  38. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  39. package/dist/classes/svelte/image/index.js +4 -4
  40. package/dist/classes/svelte/image/mocks.js +35 -35
  41. package/dist/classes/svelte/image/typedef.js +8 -8
  42. package/dist/classes/svelte/index.js +14 -14
  43. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  44. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  45. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  46. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
  47. package/dist/classes/svelte/network-loader/constants.js +3 -3
  48. package/dist/classes/svelte/network-loader/index.js +3 -3
  49. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  50. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  51. package/dist/components/area/HkArea.svelte +49 -49
  52. package/dist/components/area/HkGridArea.svelte +77 -77
  53. package/dist/components/area/index.js +2 -2
  54. package/dist/components/buttons/button/Button.svelte +82 -82
  55. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  56. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  57. package/dist/components/buttons/index.js +3 -3
  58. package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  59. package/dist/components/debug/index.js +1 -1
  60. package/dist/components/drag-drop/DragController.js +44 -44
  61. package/dist/components/drag-drop/DragDropContext.svelte +111 -111
  62. package/dist/components/drag-drop/Draggable.svelte +519 -519
  63. package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
  64. package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
  65. package/dist/components/drag-drop/DropZoneList.svelte +125 -125
  66. package/dist/components/drag-drop/actions.js +26 -26
  67. package/dist/components/drag-drop/drag-state.svelte.js +322 -322
  68. package/dist/components/drag-drop/index.js +7 -7
  69. package/dist/components/drag-drop/util.js +85 -85
  70. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  71. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  72. package/dist/components/icons/HkIcon.svelte +86 -86
  73. package/dist/components/icons/HkTabIcon.svelte +116 -116
  74. package/dist/components/icons/SteezeIcon.svelte +97 -97
  75. package/dist/components/icons/index.js +6 -6
  76. package/dist/components/icons/typedef.js +16 -16
  77. package/dist/components/index.js +2 -2
  78. package/dist/components/inputs/index.js +1 -1
  79. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  80. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  81. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  82. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  83. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  84. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  85. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  86. package/dist/components/layout/grid-layers/util.js +74 -74
  87. package/dist/components/layout/index.js +1 -1
  88. package/dist/components/panels/index.js +1 -1
  89. package/dist/components/panels/panel/Panel.svelte +43 -43
  90. package/dist/components/rows/index.js +3 -3
  91. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  92. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  93. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  94. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  95. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  96. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  97. package/dist/components/tab-bar/index.js +17 -17
  98. package/dist/components/tab-bar/typedef.js +11 -11
  99. package/dist/config/imagetools-config.js +189 -189
  100. package/dist/config/imagetools.d.ts +72 -72
  101. package/dist/constants/bases.js +13 -13
  102. package/dist/constants/errors/api.js +9 -9
  103. package/dist/constants/errors/generic.js +5 -5
  104. package/dist/constants/errors/index.js +3 -3
  105. package/dist/constants/errors/jwt.js +5 -5
  106. package/dist/constants/http/headers.js +6 -6
  107. package/dist/constants/http/index.js +2 -2
  108. package/dist/constants/http/methods.js +14 -14
  109. package/dist/constants/index.js +3 -3
  110. package/dist/constants/mime/application.js +5 -5
  111. package/dist/constants/mime/audio.js +13 -13
  112. package/dist/constants/mime/image.js +3 -3
  113. package/dist/constants/mime/index.js +4 -4
  114. package/dist/constants/mime/text.js +2 -2
  115. package/dist/constants/regexp/index.js +31 -31
  116. package/dist/constants/regexp/inspiratie.js__ +95 -95
  117. package/dist/constants/regexp/text.js +49 -49
  118. package/dist/constants/regexp/user.js +32 -32
  119. package/dist/constants/regexp/web.js +3 -3
  120. package/dist/constants/state-labels/drag-states.js +6 -6
  121. package/dist/constants/state-labels/drop-states.js +6 -6
  122. package/dist/constants/state-labels/input-states.js +11 -11
  123. package/dist/constants/state-labels/submit-states.js +4 -4
  124. package/dist/constants/time.js +28 -28
  125. package/dist/css/utilities.css +43 -43
  126. package/dist/design/design-config.js +73 -73
  127. package/dist/design/tailwind-theme-extend.js +158 -158
  128. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  129. package/dist/features/button-group/typedef.js +10 -10
  130. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  131. package/dist/features/compare-left-right/index.js +1 -1
  132. package/dist/features/game-box/GameBox.svelte +577 -577
  133. package/dist/features/game-box/gamebox.util.js +83 -83
  134. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  135. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  136. package/dist/features/image-box/ImageBox.svelte +210 -210
  137. package/dist/features/image-box/index.js +5 -5
  138. package/dist/features/image-box/typedef.js +32 -32
  139. package/dist/features/index.js +23 -23
  140. package/dist/features/presenter/ImageSlide.svelte +64 -64
  141. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  142. package/dist/features/presenter/Presenter.svelte +142 -142
  143. package/dist/features/presenter/constants.js +7 -7
  144. package/dist/features/presenter/index.js +10 -10
  145. package/dist/features/presenter/typedef.js +106 -106
  146. package/dist/features/presenter/util.js +210 -210
  147. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  148. package/dist/logging/adapters/console.js +114 -114
  149. package/dist/logging/adapters/pino.js +60 -60
  150. package/dist/logging/constants.js +1 -1
  151. package/dist/logging/factories/client.js +21 -21
  152. package/dist/logging/factories/server.js +22 -22
  153. package/dist/logging/factories/universal.js +23 -23
  154. package/dist/logging/index.js +8 -8
  155. package/dist/schemas/index.js +1 -1
  156. package/dist/schemas/validate-url.js +180 -180
  157. package/dist/server/index.js +1 -1
  158. package/dist/server/logger.js +94 -94
  159. package/dist/states/index.js +1 -1
  160. package/dist/states/navigation.svelte.js +55 -55
  161. package/dist/stores/index.js +1 -1
  162. package/dist/stores/theme.js +80 -80
  163. package/dist/themes/hkdev/components/blocks/text-block.css +34 -34
  164. package/dist/themes/hkdev/components/boxes/game-box.css +11 -11
  165. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  166. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  167. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  168. package/dist/themes/hkdev/components/buttons/skip-button.css +5 -5
  169. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  170. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
  171. package/dist/themes/hkdev/components/icons/icon-steeze.css +15 -15
  172. package/dist/themes/hkdev/components/inputs/text-input.css +102 -102
  173. package/dist/themes/hkdev/components/panels/panel.css +25 -25
  174. package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -4
  175. package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -5
  176. package/dist/themes/hkdev/components.css +29 -29
  177. package/dist/themes/hkdev/debug.css +1 -1
  178. package/dist/themes/hkdev/global/layout.css +32 -32
  179. package/dist/themes/hkdev/global/on-colors.css +32 -32
  180. package/dist/themes/hkdev/globals.css +3 -3
  181. package/dist/themes/hkdev/responsive.css +12 -12
  182. package/dist/themes/hkdev/theme-ext.js +12 -12
  183. package/dist/themes/hkdev/theme.css +218 -218
  184. package/dist/themes/index.js +1 -1
  185. package/dist/typedef/context.js +6 -6
  186. package/dist/typedef/drag.js +25 -25
  187. package/dist/typedef/drop.js +12 -12
  188. package/dist/typedef/image.js +38 -38
  189. package/dist/typedef/index.js +4 -4
  190. package/dist/util/array/index.js +436 -436
  191. package/dist/util/bases/base58.js +262 -262
  192. package/dist/util/bases/index.js +1 -1
  193. package/dist/util/compare/index.js +247 -247
  194. package/dist/util/css/css-vars.js +83 -83
  195. package/dist/util/css/index.js +1 -1
  196. package/dist/util/design-system/components/states.js +22 -22
  197. package/dist/util/design-system/css/clamp.js +66 -66
  198. package/dist/util/design-system/css/root-design-vars.js +102 -102
  199. package/dist/util/design-system/index.js +5 -5
  200. package/dist/util/design-system/layout/scaling.js +228 -228
  201. package/dist/util/design-system/skeleton.js +208 -208
  202. package/dist/util/design-system/tailwind.js +288 -288
  203. package/dist/util/env/index.js +9 -9
  204. package/dist/util/exceptions/index.d.ts +11 -0
  205. package/dist/util/exceptions/index.js +17 -0
  206. package/dist/util/expect/arrays.js +47 -47
  207. package/dist/util/expect/index.js +259 -259
  208. package/dist/util/expect/primitives.js +55 -55
  209. package/dist/util/expect/url.js +60 -60
  210. package/dist/util/function/index.js +218 -218
  211. package/dist/util/geo/index.js +26 -26
  212. package/dist/util/http/caching.js +263 -263
  213. package/dist/util/http/errors.js +97 -97
  214. package/dist/util/http/headers.js +75 -75
  215. package/dist/util/http/http-request.js +578 -578
  216. package/dist/util/http/index.js +22 -22
  217. package/dist/util/http/json-request.js +224 -224
  218. package/dist/util/http/mocks.js +65 -65
  219. package/dist/util/http/response.js +294 -294
  220. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  221. package/dist/util/http/typedef.js +93 -93
  222. package/dist/util/http/url.js +52 -52
  223. package/dist/util/image/index.js +86 -86
  224. package/dist/util/index.d.ts +1 -0
  225. package/dist/util/index.js +3 -2
  226. package/dist/util/is/index.js +140 -140
  227. package/dist/util/iterate/index.js +234 -234
  228. package/dist/util/object/index.js +1361 -1361
  229. package/dist/util/singleton/index.js +97 -97
  230. package/dist/util/string/array-path.js +75 -75
  231. package/dist/util/string/convert.js +54 -54
  232. package/dist/util/string/fs.js +226 -226
  233. package/dist/util/string/index.js +5 -5
  234. package/dist/util/string/interpolate.js +61 -61
  235. package/dist/util/string/pad.js +10 -10
  236. package/dist/util/svelte/index.js +4 -4
  237. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  238. package/dist/util/svelte/observe/index.js +49 -49
  239. package/dist/util/svelte/state-context/index.js +117 -117
  240. package/dist/util/svelte/wait/index.js +38 -38
  241. package/dist/util/sveltekit/index.js +1 -1
  242. package/dist/util/sveltekit/route-folders/index.js +101 -101
  243. package/dist/util/time/index.js +323 -323
  244. package/dist/util/unique/index.js +249 -249
  245. package/dist/valibot/date.js__ +10 -10
  246. package/dist/valibot/index.js +9 -9
  247. package/dist/valibot/url.js +95 -95
  248. package/dist/valibot/user.js +23 -23
  249. package/dist/zod/all.js +33 -33
  250. package/dist/zod/generic.js +11 -11
  251. package/dist/zod/javascript.js +32 -32
  252. package/dist/zod/user.js +16 -16
  253. package/dist/zod/web.js +52 -52
  254. package/package.json +133 -132
@@ -1,196 +1,196 @@
1
- <script>
2
- import { onMount } from 'svelte';
3
- import {
4
- getRootCssDesignWidth,
5
- getRootCssDesignHeight,
6
- getClampParams,
7
- clamp
8
- } from '../../util/design-system/index.js';
9
-
10
- /**
11
- * Virtual viewport component that creates a container with its own scaling
12
- * system based on its actual dimensions.
13
- *
14
- * @type {{
15
- * base?: string,
16
- * bg?: string,
17
- * classes?: string,
18
- * width?: string,
19
- * height?: string,
20
- * overflow?: string,
21
- * designWidth?: number,
22
- * designHeight?: number,
23
- * scaleViewport?: number,
24
- * scaleW?: number,
25
- * scaleH?: number,
26
- * scaleUI?: number,
27
- * scaleTextBase?: number,
28
- * scaleTextHeading?: number,
29
- * scaleTextUI?: number,
30
- * children?: import('svelte').Snippet,
31
- * [attr: string]: any
32
- * }}
33
- */
34
- let {
35
- // Style related props first
36
- base,
37
- bg,
38
- classes,
39
- width,
40
- height,
41
- overflow = 'overflow-clip',
42
-
43
- // Functional bindable props
44
- designWidth = $bindable(0),
45
- designHeight = $bindable(0),
46
- scaleViewport = $bindable(0),
47
- scaleW = $bindable(0),
48
- scaleH = $bindable(0),
49
- scaleUI = $bindable(0),
50
- scaleTextBase = $bindable(0),
51
- scaleTextHeading = $bindable(0),
52
- scaleTextUI = $bindable(0),
53
-
54
- // Snippets
55
- children,
56
-
57
- // Rest of attributes
58
- ...attrs
59
- } = $props();
60
-
61
- /**
62
- * References to the container element for measurement
63
- * @type {HTMLDivElement}
64
- */
65
- let container;
66
-
67
- /**
68
- * Current scaling variables
69
- */
70
- let scaleVars = $state('');
71
-
72
- // No separate variables for design dimensions
73
-
74
- /**
75
- * Error state for CSS variable parsing
76
- */
77
- let cssParsingError = $state(null);
78
-
79
- /**
80
- * Update scaling based on current dimensions
81
- */
82
- function updateScaling() {
83
- if (!container) return;
84
-
85
- // Get actual container dimensions
86
- const rect = container.getBoundingClientRect();
87
- const containerWidth = rect.width;
88
- const containerHeight = rect.height;
89
-
90
- // Calculate ratios similar to root variables
91
- scaleW = containerWidth / designWidth;
92
- scaleH = containerHeight / designHeight;
93
-
94
- // Use the smaller ratio to ensure content fits
95
- scaleViewport = Math.min(scaleW, scaleH);
96
-
97
- try {
98
- // Get clamp parameters from CSS variables
99
- const uiParams = getClampParams('scale-ui');
100
- const baseParams = getClampParams('scale-text-base');
101
- const headingParams = getClampParams('scale-text-heading');
102
- const textUIParams = getClampParams('scale-text-ui');
103
-
104
- // Apply scaling according to extracted clamp parameters
105
- scaleUI = clamp(uiParams.min, scaleViewport, uiParams.max);
106
-
107
- scaleTextBase = clamp(baseParams.min, scaleViewport, baseParams.max);
108
- scaleTextHeading = clamp(
109
- headingParams.min,
110
- scaleViewport,
111
- headingParams.max
112
- );
113
- scaleTextUI = clamp(textUIParams.min, scaleViewport, textUIParams.max);
114
-
115
- // Clear any previous error
116
- cssParsingError = null;
117
- } catch (error) {
118
- // Store the error for debugging
119
- cssParsingError = error;
120
- console.error('VirtualViewport scaling error:', error);
121
-
122
- // Fallback to simple scaling without clamping
123
- scaleUI = scaleViewport;
124
- scaleTextBase = scaleViewport;
125
- scaleTextHeading = scaleViewport;
126
- scaleTextUI = scaleViewport;
127
- }
128
-
129
- // Update the style variables
130
- scaleVars = `
131
- --scale-w: ${scaleW};
132
- --scale-h: ${scaleH};
133
- --scale-viewport: ${scaleViewport};
134
- --scale-ui: ${scaleUI};
135
- --scale-text-base: ${scaleTextBase};
136
- --scale-text-heading: ${scaleTextHeading};
137
- --scale-text-ui: ${scaleTextUI};
138
- `;
139
- }
140
-
141
- // Watch for changes and update scaling
142
- $effect(() => {
143
- updateScaling();
144
- });
145
-
146
- onMount(() => {
147
- try {
148
- // Get design dimensions from CSS variables if props are zero
149
- if (designWidth === 0) {
150
- designWidth = getRootCssDesignWidth() ?? 1920;
151
- }
152
-
153
- if (designHeight === 0) {
154
- designHeight = getRootCssDesignHeight() ?? 1080;
155
- }
156
-
157
- // Initial calculation
158
- updateScaling();
159
-
160
- // Set up ResizeObserver to update scaling when container size changes
161
- const resizeObserver = new ResizeObserver(() => {
162
- updateScaling();
163
- });
164
-
165
- resizeObserver.observe(container);
166
-
167
- // Clean up
168
- return () => {
169
- resizeObserver.disconnect();
170
- };
171
- } catch (error) {
172
- cssParsingError = error;
173
- console.error('VirtualViewport initialization error:', error);
174
- }
175
- });
176
- </script>
177
-
178
- <div
179
- data-component="virtual-viewport"
180
- bind:this={container}
181
- class="{base} {bg} {width} {height} {overflow} {classes}"
182
- style={scaleVars}
183
- style:width={width ? width : '100%'}
184
- style:height={height ? height : '100%'}
185
- {...attrs}
186
- >
187
- {#if cssParsingError}
188
- <!-- Add a discreet error indicator for development -->
189
- <div
190
- class="absolute top-0 right-0 p-1 text-red-500 text-xs bg-black bg-opacity-50 rounded-bl"
191
- >
192
- CSS Parsing Error
193
- </div>
194
- {/if}
195
- {@render children()}
196
- </div>
1
+ <script>
2
+ import { onMount } from 'svelte';
3
+ import {
4
+ getRootCssDesignWidth,
5
+ getRootCssDesignHeight,
6
+ getClampParams,
7
+ clamp
8
+ } from '../../util/design-system/index.js';
9
+
10
+ /**
11
+ * Virtual viewport component that creates a container with its own scaling
12
+ * system based on its actual dimensions.
13
+ *
14
+ * @type {{
15
+ * base?: string,
16
+ * bg?: string,
17
+ * classes?: string,
18
+ * width?: string,
19
+ * height?: string,
20
+ * overflow?: string,
21
+ * designWidth?: number,
22
+ * designHeight?: number,
23
+ * scaleViewport?: number,
24
+ * scaleW?: number,
25
+ * scaleH?: number,
26
+ * scaleUI?: number,
27
+ * scaleTextBase?: number,
28
+ * scaleTextHeading?: number,
29
+ * scaleTextUI?: number,
30
+ * children?: import('svelte').Snippet,
31
+ * [attr: string]: any
32
+ * }}
33
+ */
34
+ let {
35
+ // Style related props first
36
+ base,
37
+ bg,
38
+ classes,
39
+ width,
40
+ height,
41
+ overflow = 'overflow-clip',
42
+
43
+ // Functional bindable props
44
+ designWidth = $bindable(0),
45
+ designHeight = $bindable(0),
46
+ scaleViewport = $bindable(0),
47
+ scaleW = $bindable(0),
48
+ scaleH = $bindable(0),
49
+ scaleUI = $bindable(0),
50
+ scaleTextBase = $bindable(0),
51
+ scaleTextHeading = $bindable(0),
52
+ scaleTextUI = $bindable(0),
53
+
54
+ // Snippets
55
+ children,
56
+
57
+ // Rest of attributes
58
+ ...attrs
59
+ } = $props();
60
+
61
+ /**
62
+ * References to the container element for measurement
63
+ * @type {HTMLDivElement}
64
+ */
65
+ let container;
66
+
67
+ /**
68
+ * Current scaling variables
69
+ */
70
+ let scaleVars = $state('');
71
+
72
+ // No separate variables for design dimensions
73
+
74
+ /**
75
+ * Error state for CSS variable parsing
76
+ */
77
+ let cssParsingError = $state(null);
78
+
79
+ /**
80
+ * Update scaling based on current dimensions
81
+ */
82
+ function updateScaling() {
83
+ if (!container) return;
84
+
85
+ // Get actual container dimensions
86
+ const rect = container.getBoundingClientRect();
87
+ const containerWidth = rect.width;
88
+ const containerHeight = rect.height;
89
+
90
+ // Calculate ratios similar to root variables
91
+ scaleW = containerWidth / designWidth;
92
+ scaleH = containerHeight / designHeight;
93
+
94
+ // Use the smaller ratio to ensure content fits
95
+ scaleViewport = Math.min(scaleW, scaleH);
96
+
97
+ try {
98
+ // Get clamp parameters from CSS variables
99
+ const uiParams = getClampParams('scale-ui');
100
+ const baseParams = getClampParams('scale-text-base');
101
+ const headingParams = getClampParams('scale-text-heading');
102
+ const textUIParams = getClampParams('scale-text-ui');
103
+
104
+ // Apply scaling according to extracted clamp parameters
105
+ scaleUI = clamp(uiParams.min, scaleViewport, uiParams.max);
106
+
107
+ scaleTextBase = clamp(baseParams.min, scaleViewport, baseParams.max);
108
+ scaleTextHeading = clamp(
109
+ headingParams.min,
110
+ scaleViewport,
111
+ headingParams.max
112
+ );
113
+ scaleTextUI = clamp(textUIParams.min, scaleViewport, textUIParams.max);
114
+
115
+ // Clear any previous error
116
+ cssParsingError = null;
117
+ } catch (error) {
118
+ // Store the error for debugging
119
+ cssParsingError = error;
120
+ console.error('VirtualViewport scaling error:', error);
121
+
122
+ // Fallback to simple scaling without clamping
123
+ scaleUI = scaleViewport;
124
+ scaleTextBase = scaleViewport;
125
+ scaleTextHeading = scaleViewport;
126
+ scaleTextUI = scaleViewport;
127
+ }
128
+
129
+ // Update the style variables
130
+ scaleVars = `
131
+ --scale-w: ${scaleW};
132
+ --scale-h: ${scaleH};
133
+ --scale-viewport: ${scaleViewport};
134
+ --scale-ui: ${scaleUI};
135
+ --scale-text-base: ${scaleTextBase};
136
+ --scale-text-heading: ${scaleTextHeading};
137
+ --scale-text-ui: ${scaleTextUI};
138
+ `;
139
+ }
140
+
141
+ // Watch for changes and update scaling
142
+ $effect(() => {
143
+ updateScaling();
144
+ });
145
+
146
+ onMount(() => {
147
+ try {
148
+ // Get design dimensions from CSS variables if props are zero
149
+ if (designWidth === 0) {
150
+ designWidth = getRootCssDesignWidth() ?? 1920;
151
+ }
152
+
153
+ if (designHeight === 0) {
154
+ designHeight = getRootCssDesignHeight() ?? 1080;
155
+ }
156
+
157
+ // Initial calculation
158
+ updateScaling();
159
+
160
+ // Set up ResizeObserver to update scaling when container size changes
161
+ const resizeObserver = new ResizeObserver(() => {
162
+ updateScaling();
163
+ });
164
+
165
+ resizeObserver.observe(container);
166
+
167
+ // Clean up
168
+ return () => {
169
+ resizeObserver.disconnect();
170
+ };
171
+ } catch (error) {
172
+ cssParsingError = error;
173
+ console.error('VirtualViewport initialization error:', error);
174
+ }
175
+ });
176
+ </script>
177
+
178
+ <div
179
+ data-component="virtual-viewport"
180
+ bind:this={container}
181
+ class="{base} {bg} {width} {height} {overflow} {classes}"
182
+ style={scaleVars}
183
+ style:width={width ? width : '100%'}
184
+ style:height={height ? height : '100%'}
185
+ {...attrs}
186
+ >
187
+ {#if cssParsingError}
188
+ <!-- Add a discreet error indicator for development -->
189
+ <div
190
+ class="absolute top-0 right-0 p-1 text-red-500 text-xs bg-black bg-opacity-50 rounded-bl"
191
+ >
192
+ CSS Parsing Error
193
+ </div>
194
+ {/if}
195
+ {@render children()}
196
+ </div>
@@ -1,114 +1,114 @@
1
- import { LEVELS } from '../constants.js';
2
-
3
- /**
4
- * (Browser) console adapter that uses native DevTools styling
5
- */
6
- export class ConsoleAdapter {
7
- /**
8
- * Create a new ConsoleAdapter
9
- *
10
- * @param {Object} [options] - Browser configuration options
11
- * @param {string} [options.level] - Minimum log level
12
- * @param {Object} [options.context]
13
- * Additional context data to include with all logs
14
- */
15
- constructor(options = {}) {
16
- this.level = options.level || 'info';
17
- this.context = options.context || {};
18
- }
19
-
20
- /**
21
- * Handle log events from Logger
22
- *
23
- * @param {Object} logEvent - Log event from Logger
24
- */
25
- handleLog(logEvent) {
26
- // eslint-disable-next-line no-unused-vars
27
- const { level, message, details, source, timestamp } = logEvent;
28
-
29
- // Filter by level
30
- if (LEVELS[level] < LEVELS[this.level]) {
31
- return;
32
- }
33
-
34
- // Use browser console styling
35
- const styles = this._getStyles(level);
36
- const prefix = `%c[${source}]`;
37
-
38
- // Merge context with details
39
- const logData = details
40
- ? { ...this.context, ...details }
41
- : Object.keys(this.context).length > 0
42
- ? this.context
43
- : undefined;
44
-
45
- if (logData) {
46
- console[this._getConsoleMethod(level)](prefix, styles, message, logData);
47
- } else {
48
- console[this._getConsoleMethod(level)](prefix, styles, message);
49
- }
50
- }
51
-
52
- /**
53
- * Get CSS styles for browser console
54
- *
55
- * @param {string} level - Log level
56
- * @returns {string} CSS styles
57
- * @private
58
- */
59
- _getStyles(level) {
60
- const baseStyle =
61
- 'padding: 2px 4px; border-radius: 2px; font-weight: bold;';
62
-
63
- switch (level) {
64
- case 'debug':
65
- return `${baseStyle} background: #e3f2fd; color: #1976d2;`;
66
- case 'info':
67
- return `${baseStyle} background: #e8f5e8; color: #2e7d32;`;
68
- case 'warn':
69
- return `${baseStyle} background: #fff3e0; color: #f57c00;`;
70
- case 'error':
71
- return `${baseStyle} background: #ffebee; color: #d32f2f;`;
72
- case 'fatal':
73
- return `${baseStyle} background: #d32f2f; color: white;`;
74
- default:
75
- return baseStyle;
76
- }
77
- }
78
-
79
- /**
80
- * Get appropriate console method for log level
81
- *
82
- * @param {string} level - Log level
83
- * @returns {string} Console method name
84
- * @private
85
- */
86
- _getConsoleMethod(level) {
87
- switch (level) {
88
- case 'debug':
89
- return 'debug';
90
- case 'info':
91
- return 'info';
92
- case 'warn':
93
- return 'warn';
94
- case 'error':
95
- case 'fatal':
96
- return 'error';
97
- default:
98
- return 'log';
99
- }
100
- }
101
-
102
- /**
103
- * Create a child logger with additional context
104
- *
105
- * @param {Object} context - Additional context data
106
- * @returns {ConsoleAdapter} New adapter instance with context
107
- */
108
- child(context) {
109
- return new ConsoleAdapter({
110
- level: this.level,
111
- context: { ...this.context, ...context }
112
- });
113
- }
114
- }
1
+ import { LEVELS } from '../constants.js';
2
+
3
+ /**
4
+ * (Browser) console adapter that uses native DevTools styling
5
+ */
6
+ export class ConsoleAdapter {
7
+ /**
8
+ * Create a new ConsoleAdapter
9
+ *
10
+ * @param {Object} [options] - Browser configuration options
11
+ * @param {string} [options.level] - Minimum log level
12
+ * @param {Object} [options.context]
13
+ * Additional context data to include with all logs
14
+ */
15
+ constructor(options = {}) {
16
+ this.level = options.level || 'info';
17
+ this.context = options.context || {};
18
+ }
19
+
20
+ /**
21
+ * Handle log events from Logger
22
+ *
23
+ * @param {Object} logEvent - Log event from Logger
24
+ */
25
+ handleLog(logEvent) {
26
+ // eslint-disable-next-line no-unused-vars
27
+ const { level, message, details, source, timestamp } = logEvent;
28
+
29
+ // Filter by level
30
+ if (LEVELS[level] < LEVELS[this.level]) {
31
+ return;
32
+ }
33
+
34
+ // Use browser console styling
35
+ const styles = this._getStyles(level);
36
+ const prefix = `%c[${source}]`;
37
+
38
+ // Merge context with details
39
+ const logData = details
40
+ ? { ...this.context, ...details }
41
+ : Object.keys(this.context).length > 0
42
+ ? this.context
43
+ : undefined;
44
+
45
+ if (logData) {
46
+ console[this._getConsoleMethod(level)](prefix, styles, message, logData);
47
+ } else {
48
+ console[this._getConsoleMethod(level)](prefix, styles, message);
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Get CSS styles for browser console
54
+ *
55
+ * @param {string} level - Log level
56
+ * @returns {string} CSS styles
57
+ * @private
58
+ */
59
+ _getStyles(level) {
60
+ const baseStyle =
61
+ 'padding: 2px 4px; border-radius: 2px; font-weight: bold;';
62
+
63
+ switch (level) {
64
+ case 'debug':
65
+ return `${baseStyle} background: #e3f2fd; color: #1976d2;`;
66
+ case 'info':
67
+ return `${baseStyle} background: #e8f5e8; color: #2e7d32;`;
68
+ case 'warn':
69
+ return `${baseStyle} background: #fff3e0; color: #f57c00;`;
70
+ case 'error':
71
+ return `${baseStyle} background: #ffebee; color: #d32f2f;`;
72
+ case 'fatal':
73
+ return `${baseStyle} background: #d32f2f; color: white;`;
74
+ default:
75
+ return baseStyle;
76
+ }
77
+ }
78
+
79
+ /**
80
+ * Get appropriate console method for log level
81
+ *
82
+ * @param {string} level - Log level
83
+ * @returns {string} Console method name
84
+ * @private
85
+ */
86
+ _getConsoleMethod(level) {
87
+ switch (level) {
88
+ case 'debug':
89
+ return 'debug';
90
+ case 'info':
91
+ return 'info';
92
+ case 'warn':
93
+ return 'warn';
94
+ case 'error':
95
+ case 'fatal':
96
+ return 'error';
97
+ default:
98
+ return 'log';
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Create a child logger with additional context
104
+ *
105
+ * @param {Object} context - Additional context data
106
+ * @returns {ConsoleAdapter} New adapter instance with context
107
+ */
108
+ child(context) {
109
+ return new ConsoleAdapter({
110
+ level: this.level,
111
+ context: { ...this.context, ...context }
112
+ });
113
+ }
114
+ }