@hkdigital/lib-sveltekit 0.1.4 → 0.1.6

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 (224) hide show
  1. package/README.md +127 -127
  2. package/dist/classes/data/IterableTree.js +243 -243
  3. package/dist/classes/data/Selector.js +190 -190
  4. package/dist/classes/data/index.js +2 -2
  5. package/dist/classes/index.js +3 -3
  6. package/dist/classes/promise/HkPromise.js +377 -377
  7. package/dist/classes/promise/index.js +1 -1
  8. package/dist/classes/stores/SubscribersCount.js +107 -107
  9. package/dist/classes/stores/index.js +1 -1
  10. package/dist/classes/streams/LogTransformStream.js +19 -19
  11. package/dist/classes/streams/ServerEventsStore.js +110 -110
  12. package/dist/classes/streams/TimeStampSource.js +26 -26
  13. package/dist/classes/streams/index.js +3 -3
  14. package/dist/classes/{svkit → svelte}/audio/AudioLoader.svelte.js +58 -58
  15. package/dist/classes/{svkit → svelte}/audio/AudioScene.svelte.js +282 -282
  16. package/dist/classes/{svkit → svelte}/audio/mocks.js +35 -35
  17. package/dist/classes/{svkit → svelte}/final-state-machine/FiniteStateMachine.svelte.js +133 -133
  18. package/dist/classes/{svkit → svelte}/final-state-machine/index.js +1 -1
  19. package/dist/classes/{svkit → svelte}/image/ImageLoader.svelte.js +47 -47
  20. package/dist/classes/{svkit → svelte}/image/ImageScene.svelte.js +253 -253
  21. package/dist/classes/{svkit → svelte}/image/ImageVariantsLoader.svelte.js +152 -152
  22. package/dist/classes/{svkit → svelte}/image/index.js +4 -4
  23. package/dist/classes/{svkit → svelte}/image/mocks.js +35 -35
  24. package/dist/classes/{svkit → svelte}/image/typedef.js +8 -8
  25. package/dist/classes/{svkit → svelte}/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  26. package/dist/classes/{svkit → svelte}/loading-state-machine/constants.js +16 -16
  27. package/dist/classes/{svkit → svelte}/loading-state-machine/index.js +3 -3
  28. package/dist/classes/{svkit → svelte}/network-loader/NetworkLoader.svelte.js +331 -331
  29. package/dist/classes/{svkit → svelte}/network-loader/constants.js +3 -3
  30. package/dist/classes/{svkit → svelte}/network-loader/index.js +3 -3
  31. package/dist/classes/{svkit → svelte}/network-loader/mocks.js +30 -30
  32. package/dist/classes/{svkit → svelte}/network-loader/typedef.js +8 -8
  33. package/dist/components/area/HkArea.svelte +49 -49
  34. package/dist/components/area/HkArea.svelte.d.ts +0 -14
  35. package/dist/components/area/HkGridArea.svelte +77 -77
  36. package/dist/components/area/HkGridArea.svelte.d.ts +0 -22
  37. package/dist/components/area/index.js +2 -2
  38. package/dist/components/boxes/game-box/GameBox.svelte +112 -112
  39. package/dist/components/boxes/game-box/GameBox.svelte.d.ts +0 -15
  40. package/dist/components/boxes/game-box/gamebox.util.js +83 -83
  41. package/dist/components/boxes/index.js +2 -2
  42. package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte +199 -199
  43. package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte.d.ts +0 -22
  44. package/dist/components/buttons/button/Button.svelte +75 -75
  45. package/dist/components/buttons/button/Button.svelte.d.ts +0 -21
  46. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  47. package/dist/components/buttons/button-text/TextButton.svelte.d.ts +0 -7
  48. package/dist/components/buttons/index.js +2 -2
  49. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  50. package/dist/components/hkdev/blocks/TextBlock.svelte.d.ts +0 -13
  51. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  52. package/dist/components/hkdev/buttons/CheckButton.svelte.d.ts +0 -18
  53. package/dist/components/icon/HkIcon.svelte +86 -86
  54. package/dist/components/icon/HkIcon.svelte.d.ts +0 -12
  55. package/dist/components/icon/HkTabIcon.svelte +116 -116
  56. package/dist/components/icon/HkTabIcon.svelte.d.ts +0 -21
  57. package/dist/components/icon/index.js +4 -4
  58. package/dist/components/icon/typedef.js +16 -16
  59. package/dist/components/image/ImageBox.svelte +208 -208
  60. package/dist/components/image/ImageBox.svelte.d.ts +2 -21
  61. package/dist/components/image/index.js +5 -5
  62. package/dist/components/image/typedef.js +32 -32
  63. package/dist/components/index.js +2 -2
  64. package/dist/components/inputs/index.js +1 -1
  65. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  66. package/dist/components/inputs/text-input/TextInput.svelte +226 -226
  67. package/dist/components/inputs/text-input/TextInput.svelte.d.ts +0 -28
  68. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  69. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  70. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  71. package/dist/components/layout/HkAppLayout.state.svelte.js +25 -25
  72. package/dist/components/layout/HkAppLayout.svelte +251 -251
  73. package/dist/components/layout/HkAppLayout.svelte.d.ts +0 -11
  74. package/dist/components/layout/HkGridLayers.svelte +82 -82
  75. package/dist/components/layout/HkGridLayers.svelte.d.ts +0 -23
  76. package/dist/components/layout/index.js +9 -9
  77. package/dist/components/panels/index.js +1 -1
  78. package/dist/components/panels/plain-panel/PlainPanel.svelte +33 -33
  79. package/dist/components/panels/plain-panel/PlainPanel.svelte.d.ts +0 -12
  80. package/dist/components/rows/index.js +3 -3
  81. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  82. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +0 -14
  83. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  84. package/dist/components/rows/panel-row-2/PanelRow2.svelte.d.ts +0 -14
  85. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  86. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  87. package/dist/components/tab-bar/HkTabBar.svelte.d.ts +0 -18
  88. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  89. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  90. package/dist/components/tab-bar/HkTabBarSelector.svelte.d.ts +0 -19
  91. package/dist/components/tab-bar/index.js +17 -17
  92. package/dist/components/tab-bar/typedef.js +8 -8
  93. package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
  94. package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte.d.ts +0 -10
  95. package/dist/components/widgets/compare-left-right/index.js +1 -1
  96. package/dist/components/widgets/scale-control/index.js +1 -1
  97. package/dist/config/imagetools-config.js +189 -189
  98. package/dist/config/imagetools.d.ts +71 -71
  99. package/dist/config/typedef.js +8 -8
  100. package/dist/constants/errors/api.js +9 -9
  101. package/dist/constants/errors/generic.js +5 -5
  102. package/dist/constants/errors/index.js +3 -3
  103. package/dist/constants/errors/jwt.js +5 -5
  104. package/dist/constants/http/headers.js +6 -6
  105. package/dist/constants/http/index.js +2 -2
  106. package/dist/constants/http/methods.js +2 -2
  107. package/dist/constants/index.js +3 -3
  108. package/dist/constants/mime/application.js +5 -5
  109. package/dist/constants/mime/audio.js +13 -13
  110. package/dist/constants/mime/image.js +3 -3
  111. package/dist/constants/mime/index.js +4 -4
  112. package/dist/constants/mime/text.js +2 -2
  113. package/dist/constants/regexp/index.js +31 -31
  114. package/dist/constants/regexp/inspiratie.js__ +95 -95
  115. package/dist/constants/regexp/text.js +49 -49
  116. package/dist/constants/regexp/user.js +32 -32
  117. package/dist/constants/regexp/web.js +3 -3
  118. package/dist/constants/state-labels/input-states.js +11 -11
  119. package/dist/constants/state-labels/submit-states.js +4 -4
  120. package/dist/constants/time.js +28 -28
  121. package/dist/css/tw-prose.postcss__ +259 -259
  122. package/dist/css/utilities.postcss +43 -43
  123. package/dist/{design-system → design}/design-config.js +73 -73
  124. package/dist/{design-system → design}/tailwind-theme-extend.d.ts +4 -4
  125. package/dist/{design-system → design}/tailwind-theme-extend.js +151 -151
  126. package/dist/schemas/index.js +1 -1
  127. package/dist/schemas/validate-url.js +180 -180
  128. package/dist/server/index.js +1 -1
  129. package/dist/server/logger.js +94 -94
  130. package/dist/states/index.js +1 -1
  131. package/dist/states/navigation.svelte.js +55 -55
  132. package/dist/stores/index.js +1 -1
  133. package/dist/stores/theme.js +80 -80
  134. package/dist/themes/hkdev/components/blocks/text-block.postcss +40 -40
  135. package/dist/themes/hkdev/components/boxes/game-box.postcss +13 -13
  136. package/dist/themes/hkdev/components/buttons/button-text.postcss +34 -34
  137. package/dist/themes/hkdev/components/buttons/button.postcss +138 -138
  138. package/dist/themes/hkdev/components/buttons/skip-button.postcss +8 -8
  139. package/dist/themes/hkdev/components/inputs/text-input.postcss +108 -108
  140. package/dist/themes/hkdev/components/panels/plain-panel.postcss +46 -46
  141. package/dist/themes/hkdev/components/panels/speech-bubble.postcss +52 -52
  142. package/dist/themes/hkdev/components/rows/panel-grid-row.postcss +7 -7
  143. package/dist/themes/hkdev/components/rows/panel-row-2.postcss +9 -9
  144. package/dist/themes/hkdev/components.postcss +55 -55
  145. package/dist/themes/hkdev/debug.postcss +1 -1
  146. package/dist/themes/hkdev/global/layout.postcss +39 -39
  147. package/dist/themes/hkdev/global/on-colors.postcss +53 -53
  148. package/dist/themes/hkdev/global/text.postcss__ +34 -34
  149. package/dist/themes/hkdev/global/vars.postcss__ +7 -7
  150. package/dist/themes/hkdev/globals.postcss +11 -11
  151. package/dist/themes/hkdev/responsive.postcss +12 -12
  152. package/dist/themes/hkdev/theme-ext.js +15 -15
  153. package/dist/themes/hkdev/theme.js +227 -227
  154. package/dist/themes/index.js +1 -1
  155. package/dist/util/array/index.js +455 -455
  156. package/dist/util/compare/index.js +247 -247
  157. package/dist/util/css/css-vars.js +83 -83
  158. package/dist/util/css/index.js +1 -1
  159. package/dist/util/design-system/components/states.js +22 -22
  160. package/dist/util/design-system/css/clamp.d.ts +2 -2
  161. package/dist/util/design-system/css/clamp.js +66 -66
  162. package/dist/util/design-system/css/root-design-vars.js +100 -100
  163. package/dist/util/design-system/index.js +5 -5
  164. package/dist/util/design-system/layout/scaling.js +97 -97
  165. package/dist/util/design-system/tailwind.js +289 -289
  166. package/dist/util/expect/arrays.js +47 -47
  167. package/dist/util/expect/index.js +259 -259
  168. package/dist/util/expect/primitives.js +55 -55
  169. package/dist/util/expect/url.js +60 -60
  170. package/dist/util/function/index.js +218 -218
  171. package/dist/util/http/errors.js +97 -97
  172. package/dist/util/http/headers.js +45 -45
  173. package/dist/util/http/http-request.js +273 -273
  174. package/dist/util/http/index.js +22 -22
  175. package/dist/util/http/json-request.js +143 -143
  176. package/dist/util/http/mocks.js +65 -65
  177. package/dist/util/http/response.js +228 -228
  178. package/dist/util/http/url.js +52 -52
  179. package/dist/util/image/index.js +86 -86
  180. package/dist/util/index.js +2 -2
  181. package/dist/util/is/index.js +140 -140
  182. package/dist/util/iterate/index.js +234 -234
  183. package/dist/util/object/index.js +1361 -1361
  184. package/dist/util/singleton/index.js +97 -97
  185. package/dist/util/string/index.js +184 -184
  186. package/dist/util/svelte/index.js +2 -2
  187. package/dist/util/svelte/observe/index.js +49 -49
  188. package/dist/util/svelte/state-context/index.js +83 -83
  189. package/dist/util/svelte/wait/index.js +38 -38
  190. package/dist/util/sveltekit/index.js +1 -1
  191. package/dist/util/sveltekit/route-folders/index.js +82 -82
  192. package/dist/util/time/index.js +339 -339
  193. package/dist/valibot/date.js__ +10 -10
  194. package/dist/valibot/index.js +9 -9
  195. package/dist/valibot/url.js +95 -95
  196. package/dist/valibot/user.js +23 -23
  197. package/dist/zod/all.js +33 -33
  198. package/dist/zod/generic.js +11 -11
  199. package/dist/zod/javascript.js +32 -32
  200. package/dist/zod/user.js +16 -16
  201. package/dist/zod/web.js +52 -52
  202. package/package.json +99 -99
  203. package/dist/themes/hkdev/components/buttons/button.postcss__ +0 -40
  204. package/dist/themes/hkdev/components/buttons/button.postcss___ +0 -91
  205. /package/dist/classes/{svkit → svelte}/audio/AudioLoader.svelte.d.ts +0 -0
  206. /package/dist/classes/{svkit → svelte}/audio/AudioScene.svelte.d.ts +0 -0
  207. /package/dist/classes/{svkit → svelte}/audio/mocks.d.ts +0 -0
  208. /package/dist/classes/{svkit → svelte}/final-state-machine/FiniteStateMachine.svelte.d.ts +0 -0
  209. /package/dist/classes/{svkit → svelte}/final-state-machine/index.d.ts +0 -0
  210. /package/dist/classes/{svkit → svelte}/image/ImageLoader.svelte.d.ts +0 -0
  211. /package/dist/classes/{svkit → svelte}/image/ImageScene.svelte.d.ts +0 -0
  212. /package/dist/classes/{svkit → svelte}/image/ImageVariantsLoader.svelte.d.ts +0 -0
  213. /package/dist/classes/{svkit → svelte}/image/index.d.ts +0 -0
  214. /package/dist/classes/{svkit → svelte}/image/mocks.d.ts +0 -0
  215. /package/dist/classes/{svkit → svelte}/image/typedef.d.ts +0 -0
  216. /package/dist/classes/{svkit → svelte}/loading-state-machine/LoadingStateMachine.svelte.d.ts +0 -0
  217. /package/dist/classes/{svkit → svelte}/loading-state-machine/constants.d.ts +0 -0
  218. /package/dist/classes/{svkit → svelte}/loading-state-machine/index.d.ts +0 -0
  219. /package/dist/classes/{svkit → svelte}/network-loader/NetworkLoader.svelte.d.ts +0 -0
  220. /package/dist/classes/{svkit → svelte}/network-loader/constants.d.ts +0 -0
  221. /package/dist/classes/{svkit → svelte}/network-loader/index.d.ts +0 -0
  222. /package/dist/classes/{svkit → svelte}/network-loader/mocks.d.ts +0 -0
  223. /package/dist/classes/{svkit → svelte}/network-loader/typedef.d.ts +0 -0
  224. /package/dist/{design-system → design}/design-config.d.ts +0 -0
@@ -1,83 +1,83 @@
1
- export const ERROR_WINDOW_SIZE_NOT_LANDSCAPE = 'Window size is not landsccape';
2
-
3
- export const ERROR_WINDOW_SIZE_NOT_PORTRAIT = 'Window size is not portrait';
4
-
5
- /**
6
- * Get game width for landscape mode
7
- *
8
- * @param {object} _
9
- * @param {number} _.windowWidth
10
- * @param {number} _.windowHeight
11
- * @param {number} [_.aspectOnLandscape]
12
- *
13
- * @returns {number} game width
14
- */
15
- export function getGameWidthOnLandscape({
16
- windowWidth,
17
- windowHeight,
18
- aspectOnLandscape
19
- }) {
20
- if (!windowHeight) {
21
- return 0;
22
- }
23
-
24
- if (windowWidth < windowHeight) {
25
- throw new Error(ERROR_WINDOW_SIZE_NOT_LANDSCAPE);
26
- }
27
-
28
- if (!aspectOnLandscape) {
29
- // No game aspect specified for landscape
30
- // => return full width
31
- return windowWidth;
32
- }
33
-
34
- const windowAspect = windowWidth / windowHeight;
35
-
36
- if (windowAspect > aspectOnLandscape) {
37
- // aspect of window if wider than game aspect => fill height
38
- return aspectOnLandscape * windowHeight;
39
- } else {
40
- // aspect of game is wider => fill width
41
- return windowWidth;
42
- }
43
- }
44
-
45
- /**
46
- * Get game width for portrait mode
47
- *
48
- * @param {object} _
49
- * @param {number} _.windowWidth
50
- * @param {number} _.windowHeight
51
- * @param {number} [_.aspectOnPortrait]
52
- *
53
- * @returns {number} game width
54
- */
55
- export function getGameWidthOnPortrait({
56
- windowWidth,
57
- windowHeight,
58
- aspectOnPortrait
59
- }) {
60
- if (!windowHeight) {
61
- return 0;
62
- }
63
-
64
- if (windowHeight < windowWidth) {
65
- throw new Error(ERROR_WINDOW_SIZE_NOT_PORTRAIT);
66
- }
67
-
68
- if (!aspectOnPortrait) {
69
- // No game aspect specified for portrait
70
- // => return full width
71
- return windowWidth;
72
- }
73
-
74
- const windowAspect = windowWidth / windowHeight;
75
-
76
- if (windowAspect > aspectOnPortrait) {
77
- // aspect of window if wider than game aspect => fill height
78
- return aspectOnPortrait * windowHeight;
79
- } else {
80
- // aspect of game is wider => fill width
81
- return windowWidth;
82
- }
83
- }
1
+ export const ERROR_WINDOW_SIZE_NOT_LANDSCAPE = 'Window size is not landsccape';
2
+
3
+ export const ERROR_WINDOW_SIZE_NOT_PORTRAIT = 'Window size is not portrait';
4
+
5
+ /**
6
+ * Get game width for landscape mode
7
+ *
8
+ * @param {object} _
9
+ * @param {number} _.windowWidth
10
+ * @param {number} _.windowHeight
11
+ * @param {number} [_.aspectOnLandscape]
12
+ *
13
+ * @returns {number} game width
14
+ */
15
+ export function getGameWidthOnLandscape({
16
+ windowWidth,
17
+ windowHeight,
18
+ aspectOnLandscape
19
+ }) {
20
+ if (!windowHeight) {
21
+ return 0;
22
+ }
23
+
24
+ if (windowWidth < windowHeight) {
25
+ throw new Error(ERROR_WINDOW_SIZE_NOT_LANDSCAPE);
26
+ }
27
+
28
+ if (!aspectOnLandscape) {
29
+ // No game aspect specified for landscape
30
+ // => return full width
31
+ return windowWidth;
32
+ }
33
+
34
+ const windowAspect = windowWidth / windowHeight;
35
+
36
+ if (windowAspect > aspectOnLandscape) {
37
+ // aspect of window if wider than game aspect => fill height
38
+ return aspectOnLandscape * windowHeight;
39
+ } else {
40
+ // aspect of game is wider => fill width
41
+ return windowWidth;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Get game width for portrait mode
47
+ *
48
+ * @param {object} _
49
+ * @param {number} _.windowWidth
50
+ * @param {number} _.windowHeight
51
+ * @param {number} [_.aspectOnPortrait]
52
+ *
53
+ * @returns {number} game width
54
+ */
55
+ export function getGameWidthOnPortrait({
56
+ windowWidth,
57
+ windowHeight,
58
+ aspectOnPortrait
59
+ }) {
60
+ if (!windowHeight) {
61
+ return 0;
62
+ }
63
+
64
+ if (windowHeight < windowWidth) {
65
+ throw new Error(ERROR_WINDOW_SIZE_NOT_PORTRAIT);
66
+ }
67
+
68
+ if (!aspectOnPortrait) {
69
+ // No game aspect specified for portrait
70
+ // => return full width
71
+ return windowWidth;
72
+ }
73
+
74
+ const windowAspect = windowWidth / windowHeight;
75
+
76
+ if (windowAspect > aspectOnPortrait) {
77
+ // aspect of window if wider than game aspect => fill height
78
+ return aspectOnPortrait * windowHeight;
79
+ } else {
80
+ // aspect of game is wider => fill width
81
+ return windowWidth;
82
+ }
83
+ }
@@ -1,2 +1,2 @@
1
- export { default as GameBox } from './game-box/GameBox.svelte';
2
- export { default as VirtualViewport } from './virtual-viewport/VirtualViewport.svelte';
1
+ export { default as GameBox } from './game-box/GameBox.svelte';
2
+ export { default as VirtualViewport } from './virtual-viewport/VirtualViewport.svelte';
@@ -1,199 +1,199 @@
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
- * scaleTextContent?: 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
- scaleTextContent = $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 (from vars.postcss)
95
- scaleViewport = Math.min(scaleW, scaleH);
96
-
97
- try {
98
- // Get clamp parameters from CSS variables
99
- const uiParams = getClampParams('scale-ui');
100
- const contentParams = getClampParams('scale-text-content');
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
- scaleTextContent = clamp(
107
- contentParams.min,
108
- scaleViewport,
109
- contentParams.max
110
- );
111
- scaleTextHeading = clamp(
112
- headingParams.min,
113
- scaleViewport,
114
- headingParams.max
115
- );
116
- scaleTextUI = clamp(textUIParams.min, scaleViewport, textUIParams.max);
117
-
118
- // Clear any previous error
119
- cssParsingError = null;
120
- } catch (error) {
121
- // Store the error for debugging
122
- cssParsingError = error;
123
- console.error('VirtualViewport scaling error:', error);
124
-
125
- // Fallback to simple scaling without clamping
126
- scaleUI = scaleViewport;
127
- scaleTextContent = scaleViewport;
128
- scaleTextHeading = scaleViewport;
129
- scaleTextUI = scaleViewport;
130
- }
131
-
132
- // Update the style variables
133
- scaleVars = `
134
- --scale-w: ${scaleW};
135
- --scale-h: ${scaleH};
136
- --scale-viewport: ${scaleViewport};
137
- --scale-ui: ${scaleUI};
138
- --scale-text-content: ${scaleTextContent};
139
- --scale-text-heading: ${scaleTextHeading};
140
- --scale-text-ui: ${scaleTextUI};
141
- `;
142
- }
143
-
144
- // Watch for changes and update scaling
145
- $effect(() => {
146
- updateScaling();
147
- });
148
-
149
- onMount(() => {
150
- try {
151
- // Get design dimensions from CSS variables if props are zero
152
- if (designWidth === 0) {
153
- designWidth = getRootCssDesignWidth() ?? 1920;
154
- }
155
-
156
- if (designHeight === 0) {
157
- designHeight = getRootCssDesignHeight() ?? 1080;
158
- }
159
-
160
- // Initial calculation
161
- updateScaling();
162
-
163
- // Set up ResizeObserver to update scaling when container size changes
164
- const resizeObserver = new ResizeObserver(() => {
165
- updateScaling();
166
- });
167
-
168
- resizeObserver.observe(container);
169
-
170
- // Clean up
171
- return () => {
172
- resizeObserver.disconnect();
173
- };
174
- } catch (error) {
175
- cssParsingError = error;
176
- console.error('VirtualViewport initialization error:', error);
177
- }
178
- });
179
- </script>
180
-
181
- <div
182
- data-component="virtual-viewport"
183
- bind:this={container}
184
- class="{base} {bg} {width} {height} {overflow} {classes}"
185
- style={scaleVars}
186
- style:width={width ? width : '100%'}
187
- style:height={height ? height : '100%'}
188
- {...attrs}
189
- >
190
- {#if cssParsingError}
191
- <!-- Add a discreet error indicator for development -->
192
- <div
193
- class="absolute top-0 right-0 p-1 text-red-500 text-xs bg-black bg-opacity-50 rounded-bl"
194
- >
195
- CSS Parsing Error
196
- </div>
197
- {/if}
198
- {@render children()}
199
- </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
+ * scaleTextContent?: 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
+ scaleTextContent = $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 (from vars.postcss)
95
+ scaleViewport = Math.min(scaleW, scaleH);
96
+
97
+ try {
98
+ // Get clamp parameters from CSS variables
99
+ const uiParams = getClampParams('scale-ui');
100
+ const contentParams = getClampParams('scale-text-content');
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
+ scaleTextContent = clamp(
107
+ contentParams.min,
108
+ scaleViewport,
109
+ contentParams.max
110
+ );
111
+ scaleTextHeading = clamp(
112
+ headingParams.min,
113
+ scaleViewport,
114
+ headingParams.max
115
+ );
116
+ scaleTextUI = clamp(textUIParams.min, scaleViewport, textUIParams.max);
117
+
118
+ // Clear any previous error
119
+ cssParsingError = null;
120
+ } catch (error) {
121
+ // Store the error for debugging
122
+ cssParsingError = error;
123
+ console.error('VirtualViewport scaling error:', error);
124
+
125
+ // Fallback to simple scaling without clamping
126
+ scaleUI = scaleViewport;
127
+ scaleTextContent = scaleViewport;
128
+ scaleTextHeading = scaleViewport;
129
+ scaleTextUI = scaleViewport;
130
+ }
131
+
132
+ // Update the style variables
133
+ scaleVars = `
134
+ --scale-w: ${scaleW};
135
+ --scale-h: ${scaleH};
136
+ --scale-viewport: ${scaleViewport};
137
+ --scale-ui: ${scaleUI};
138
+ --scale-text-content: ${scaleTextContent};
139
+ --scale-text-heading: ${scaleTextHeading};
140
+ --scale-text-ui: ${scaleTextUI};
141
+ `;
142
+ }
143
+
144
+ // Watch for changes and update scaling
145
+ $effect(() => {
146
+ updateScaling();
147
+ });
148
+
149
+ onMount(() => {
150
+ try {
151
+ // Get design dimensions from CSS variables if props are zero
152
+ if (designWidth === 0) {
153
+ designWidth = getRootCssDesignWidth() ?? 1920;
154
+ }
155
+
156
+ if (designHeight === 0) {
157
+ designHeight = getRootCssDesignHeight() ?? 1080;
158
+ }
159
+
160
+ // Initial calculation
161
+ updateScaling();
162
+
163
+ // Set up ResizeObserver to update scaling when container size changes
164
+ const resizeObserver = new ResizeObserver(() => {
165
+ updateScaling();
166
+ });
167
+
168
+ resizeObserver.observe(container);
169
+
170
+ // Clean up
171
+ return () => {
172
+ resizeObserver.disconnect();
173
+ };
174
+ } catch (error) {
175
+ cssParsingError = error;
176
+ console.error('VirtualViewport initialization error:', error);
177
+ }
178
+ });
179
+ </script>
180
+
181
+ <div
182
+ data-component="virtual-viewport"
183
+ bind:this={container}
184
+ class="{base} {bg} {width} {height} {overflow} {classes}"
185
+ style={scaleVars}
186
+ style:width={width ? width : '100%'}
187
+ style:height={height ? height : '100%'}
188
+ {...attrs}
189
+ >
190
+ {#if cssParsingError}
191
+ <!-- Add a discreet error indicator for development -->
192
+ <div
193
+ class="absolute top-0 right-0 p-1 text-red-500 text-xs bg-black bg-opacity-50 rounded-bl"
194
+ >
195
+ CSS Parsing Error
196
+ </div>
197
+ {/if}
198
+ {@render children()}
199
+ </div>
@@ -1,26 +1,4 @@
1
1
  export default VirtualViewport;
2
- type VirtualViewport = {
3
- $on?(type: string, callback: (e: any) => void): () => void;
4
- $set?(props: Partial<{
5
- [attr: string]: any;
6
- base?: string;
7
- bg?: string;
8
- classes?: string;
9
- width?: string;
10
- height?: string;
11
- overflow?: string;
12
- designWidth?: number;
13
- designHeight?: number;
14
- scaleViewport?: number;
15
- scaleW?: number;
16
- scaleH?: number;
17
- scaleUI?: number;
18
- scaleTextContent?: number;
19
- scaleTextHeading?: number;
20
- scaleTextUI?: number;
21
- children?: Snippet<[]>;
22
- }>): void;
23
- };
24
2
  declare const VirtualViewport: import("svelte").Component<{
25
3
  [attr: string]: any;
26
4
  base?: string;