@hkdigital/lib-core 0.3.11 → 0.3.12

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 (292) hide show
  1. package/README.md +173 -149
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/data/IterableTree.js +242 -242
  5. package/dist/classes/data/Selector.js +190 -190
  6. package/dist/classes/data/index.js +2 -2
  7. package/dist/classes/data/typedef.js +9 -9
  8. package/dist/classes/event-emitter/EventEmitter.js +273 -273
  9. package/dist/classes/event-emitter/index.js +2 -2
  10. package/dist/classes/index.js +4 -4
  11. package/dist/classes/promise/HkPromise.js +384 -384
  12. package/dist/classes/promise/index.js +1 -1
  13. package/dist/classes/stores/SubscribersCount.js +107 -107
  14. package/dist/classes/stores/index.js +1 -1
  15. package/dist/classes/streams/LogTransformStream.js +19 -19
  16. package/dist/classes/streams/ServerEventsStore.js +111 -111
  17. package/dist/classes/streams/TimeStampSource.js +26 -26
  18. package/dist/classes/streams/index.js +3 -3
  19. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  20. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  21. package/dist/classes/svelte/index.js +1 -11
  22. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  23. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  24. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  25. package/dist/config/README.md +197 -196
  26. package/dist/config/generators/imagetools.js +189 -189
  27. package/dist/config/generators/vite.js +148 -142
  28. package/dist/config/imagetools.d.ts +72 -72
  29. package/dist/config/vite.js +4 -4
  30. package/dist/constants/bases/index.js +13 -13
  31. package/dist/constants/http/headers.js +6 -6
  32. package/dist/constants/http/index.js +2 -2
  33. package/dist/constants/http/methods.js +14 -14
  34. package/dist/constants/index.js +6 -6
  35. package/dist/constants/mime/application.js +5 -5
  36. package/dist/constants/mime/audio.js +13 -13
  37. package/dist/constants/mime/image.js +3 -3
  38. package/dist/constants/mime/index.js +4 -4
  39. package/dist/constants/mime/text.js +2 -2
  40. package/dist/constants/regexp/README.md +96 -95
  41. package/dist/constants/regexp/index.js +31 -31
  42. package/dist/constants/regexp/inspiratie.js__ +95 -95
  43. package/dist/constants/regexp/text.d.ts +4 -4
  44. package/dist/constants/regexp/text.js +49 -49
  45. package/dist/constants/regexp/url.js +3 -3
  46. package/dist/constants/regexp/user.js +29 -29
  47. package/dist/constants/states/drag.js +6 -6
  48. package/dist/constants/states/drop.js +6 -6
  49. package/dist/constants/states/index.js +4 -4
  50. package/dist/constants/states/input.js +11 -11
  51. package/dist/constants/states/submit.js +4 -4
  52. package/dist/constants/time/index.js +28 -28
  53. package/dist/css/utilities.css +43 -43
  54. package/dist/design/README.md +405 -405
  55. package/dist/design/config/design-config.js +73 -73
  56. package/dist/design/generators/index.js +288 -288
  57. package/dist/design/index.js +96 -96
  58. package/dist/design/plugins/skeleton.js +208 -208
  59. package/dist/design/tailwind-theme-extend.js +158 -158
  60. package/dist/design/themes/README.md +102 -102
  61. package/dist/design/themes/hkdev/components/blocks/text-block.css +34 -34
  62. package/dist/design/themes/hkdev/components/boxes/game-box.css +11 -11
  63. package/dist/design/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  64. package/dist/design/themes/hkdev/components/buttons/button-text.css +32 -32
  65. package/dist/design/themes/hkdev/components/buttons/button.css +146 -146
  66. package/dist/design/themes/hkdev/components/buttons/skip-button.css +5 -5
  67. package/dist/design/themes/hkdev/components/drag-drop/draggable.css +73 -73
  68. package/dist/design/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
  69. package/dist/design/themes/hkdev/components/icons/icon-steeze.css +15 -15
  70. package/dist/design/themes/hkdev/components/inputs/text-input.css +102 -102
  71. package/dist/design/themes/hkdev/components/panels/panel.css +25 -25
  72. package/dist/design/themes/hkdev/components/rows/panel-grid-row.css +4 -4
  73. package/dist/design/themes/hkdev/components/rows/panel-row-2.css +5 -5
  74. package/dist/design/themes/hkdev/components.css +29 -29
  75. package/dist/design/themes/hkdev/debug.css +1 -1
  76. package/dist/design/themes/hkdev/global/layout.css +32 -32
  77. package/dist/design/themes/hkdev/global/on-colors.css +32 -32
  78. package/dist/design/themes/hkdev/globals.css +3 -3
  79. package/dist/design/themes/hkdev/responsive.css +12 -12
  80. package/dist/design/themes/hkdev/theme-ext.js +12 -12
  81. package/dist/design/themes/hkdev/theme.css +218 -218
  82. package/dist/design/utils/clamp.js +66 -66
  83. package/dist/design/utils/root-vars.js +102 -102
  84. package/dist/design/utils/scaling.js +228 -228
  85. package/dist/design/utils/states.js +22 -22
  86. package/dist/errors/api.js +9 -9
  87. package/dist/errors/generic.js +20 -20
  88. package/dist/errors/http.js +16 -16
  89. package/dist/errors/index.js +5 -5
  90. package/dist/errors/jwt.js +5 -5
  91. package/dist/errors/promise.js +25 -25
  92. package/dist/logging/README.md +158 -0
  93. package/dist/logging/index.d.ts +3 -1
  94. package/dist/logging/index.js +11 -7
  95. package/dist/logging/internal/adapters/console.js +114 -114
  96. package/dist/logging/internal/adapters/index.js +2 -2
  97. package/dist/logging/internal/adapters/pino.js +160 -142
  98. package/dist/logging/internal/adapters/typedef.js +10 -10
  99. package/dist/logging/internal/{unified-logger/constants.js → constants.js} +22 -22
  100. package/dist/logging/internal/factories/client.d.ts +1 -1
  101. package/dist/logging/internal/factories/client.js +21 -21
  102. package/dist/logging/internal/factories/server.d.ts +1 -1
  103. package/dist/logging/internal/factories/server.js +22 -22
  104. package/dist/logging/internal/factories/universal.d.ts +2 -2
  105. package/dist/logging/internal/factories/universal.js +22 -22
  106. package/dist/logging/internal/{unified-logger → logger}/Logger.d.ts +2 -2
  107. package/dist/logging/internal/{unified-logger → logger}/Logger.js +217 -217
  108. package/dist/logging/internal/logger/index.d.ts +1 -0
  109. package/dist/logging/internal/logger/index.js +1 -0
  110. package/dist/logging/internal/{unified-logger/typedef.d.ts → typedef.d.ts} +2 -1
  111. package/dist/logging/internal/{unified-logger/typedef.js → typedef.js} +21 -17
  112. package/dist/network/README.md +172 -172
  113. package/dist/network/cache/IndexedDbCache.js +1407 -1407
  114. package/dist/network/cache/MemoryResponseCache.js +138 -138
  115. package/dist/network/cache/index.js +5 -5
  116. package/dist/network/cache/typedef.js +41 -41
  117. package/dist/network/cache.js +3 -3
  118. package/dist/network/http/caching.js +261 -261
  119. package/dist/network/http/errors.js +97 -97
  120. package/dist/network/http/headers.js +75 -75
  121. package/dist/network/http/http-request.js +578 -578
  122. package/dist/network/http/index.js +22 -22
  123. package/dist/network/http/json-request.js +224 -224
  124. package/dist/network/http/mocks.js +65 -65
  125. package/dist/network/http/response.js +318 -318
  126. package/dist/network/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  127. package/dist/network/http/typedef.js +93 -93
  128. package/dist/network/http/url.js +52 -52
  129. package/dist/network/http.js +5 -5
  130. package/dist/network/loaders/README.md +254 -254
  131. package/dist/network/loaders/audio/AudioLoader.svelte.js +58 -58
  132. package/dist/network/loaders/audio/AudioScene.svelte.js +324 -324
  133. package/dist/network/loaders/audio/mocks.js +35 -35
  134. package/dist/network/loaders/audio.js +1 -1
  135. package/dist/network/loaders/image/ImageLoader.svelte.js +44 -44
  136. package/dist/network/loaders/image/ImageScene.svelte.js +248 -248
  137. package/dist/network/loaders/image/ImageVariantsLoader.svelte.js +150 -150
  138. package/dist/network/loaders/image/index.js +4 -4
  139. package/dist/network/loaders/image/mocks.js +35 -35
  140. package/dist/network/loaders/image/typedef.js +8 -8
  141. package/dist/network/loaders/image/utils/index.js +86 -86
  142. package/dist/network/loaders/image.js +7 -7
  143. package/dist/network/loaders/typedef.js +38 -38
  144. package/dist/network/loaders.js +2 -2
  145. package/dist/network/states/NetworkLoader.svelte.js +338 -338
  146. package/dist/network/states/constants.js +3 -3
  147. package/dist/network/states/index.js +3 -3
  148. package/dist/network/states/mocks.js +30 -30
  149. package/dist/network/states/typedef.js +8 -8
  150. package/dist/network/typedef.js +9 -9
  151. package/dist/services/README.md +200 -0
  152. package/dist/services/index.d.ts +6 -1
  153. package/dist/services/index.js +8 -1
  154. package/dist/services/{internal/service-base → service-base}/ServiceBase.d.ts +2 -2
  155. package/dist/services/{internal/service-base → service-base}/ServiceBase.js +462 -462
  156. package/dist/services/{internal/service-base → service-base}/constants.d.ts +0 -12
  157. package/dist/services/{internal/service-base → service-base}/constants.js +98 -110
  158. package/dist/services/{internal/service-base → service-base}/index.js +3 -3
  159. package/dist/services/{internal/service-base → service-base}/typedef.d.ts +1 -1
  160. package/dist/services/{internal/service-base → service-base}/typedef.js +101 -101
  161. package/dist/services/{internal/service-manager → service-manager}/ServiceManager.d.ts +2 -2
  162. package/dist/services/{internal/service-manager → service-manager}/ServiceManager.js +608 -608
  163. package/dist/services/{internal/service-manager → service-manager}/constants.js +6 -6
  164. package/dist/services/{internal/service-manager → service-manager}/typedef.js +90 -90
  165. package/dist/states/index.js +1 -1
  166. package/dist/states/navigation.svelte.js +55 -55
  167. package/dist/stores/index.js +1 -1
  168. package/dist/stores/theme.js +80 -80
  169. package/dist/typedef/context.js +6 -6
  170. package/dist/typedef/drag.js +25 -25
  171. package/dist/typedef/drop.js +12 -12
  172. package/dist/typedef/index.js +4 -4
  173. package/dist/ui/components/button-group/ButtonGroup.svelte +82 -82
  174. package/dist/ui/components/button-group/typedef.js +10 -10
  175. package/dist/ui/components/compare-left-right/CompareLeftRight.svelte +179 -179
  176. package/dist/ui/components/compare-left-right/index.js +1 -1
  177. package/dist/ui/components/game-box/GameBox.svelte +577 -577
  178. package/dist/ui/components/game-box/gamebox.util.js +83 -83
  179. package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  180. package/dist/ui/components/hk-app-layout/HkAppLayout.svelte +251 -251
  181. package/dist/ui/components/image-box/ImageBox.svelte +210 -210
  182. package/dist/ui/components/image-box/index.js +5 -5
  183. package/dist/ui/components/image-box/typedef.js +32 -32
  184. package/dist/ui/components/index.js +23 -23
  185. package/dist/ui/components/presenter/ImageSlide.svelte +64 -64
  186. package/dist/ui/components/presenter/Presenter.state.svelte.js +638 -638
  187. package/dist/ui/components/presenter/Presenter.svelte +142 -142
  188. package/dist/ui/components/presenter/constants.js +7 -7
  189. package/dist/ui/components/presenter/index.js +10 -10
  190. package/dist/ui/components/presenter/typedef.js +106 -106
  191. package/dist/ui/components/presenter/util.js +210 -210
  192. package/dist/ui/components/virtual-viewport/VirtualViewport.svelte +196 -196
  193. package/dist/ui/primitives/area/HkArea.svelte +49 -49
  194. package/dist/ui/primitives/area/HkGridArea.svelte +77 -77
  195. package/dist/ui/primitives/area/index.js +2 -2
  196. package/dist/ui/primitives/buttons/button/Button.svelte +82 -82
  197. package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  198. package/dist/ui/primitives/buttons/button-text/TextButton.svelte +21 -21
  199. package/dist/ui/primitives/buttons/index.js +3 -3
  200. package/dist/ui/primitives/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  201. package/dist/ui/primitives/debug/index.js +1 -1
  202. package/dist/ui/primitives/drag-drop/DragController.js +44 -44
  203. package/dist/ui/primitives/drag-drop/DragDropContext.svelte +111 -111
  204. package/dist/ui/primitives/drag-drop/Draggable.svelte +519 -519
  205. package/dist/ui/primitives/drag-drop/DropZone.svelte +258 -258
  206. package/dist/ui/primitives/drag-drop/DropZoneArea.svelte +119 -119
  207. package/dist/ui/primitives/drag-drop/DropZoneList.svelte +125 -125
  208. package/dist/ui/primitives/drag-drop/actions.js +26 -26
  209. package/dist/ui/primitives/drag-drop/drag-state.svelte.js +322 -322
  210. package/dist/ui/primitives/drag-drop/index.js +7 -7
  211. package/dist/ui/primitives/drag-drop/util.js +85 -85
  212. package/dist/ui/primitives/hkdev/blocks/TextBlock.svelte +46 -46
  213. package/dist/ui/primitives/hkdev/buttons/CheckButton.svelte +62 -62
  214. package/dist/ui/primitives/icons/HkIcon.svelte +86 -86
  215. package/dist/ui/primitives/icons/HkTabIcon.svelte +116 -116
  216. package/dist/ui/primitives/icons/SteezeIcon.svelte +97 -97
  217. package/dist/ui/primitives/icons/index.js +6 -6
  218. package/dist/ui/primitives/icons/typedef.js +16 -16
  219. package/dist/ui/primitives/index.js +2 -2
  220. package/dist/ui/primitives/inputs/index.js +1 -1
  221. package/dist/ui/primitives/inputs/text-input/TestTextInput.svelte__ +102 -0
  222. package/dist/ui/primitives/inputs/text-input/TextInput.svelte +223 -223
  223. package/dist/ui/primitives/inputs/text-input/TextInput.svelte___ +83 -0
  224. package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte +14 -14
  225. package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte +12 -12
  226. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte +63 -63
  227. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  228. package/dist/ui/primitives/layout/grid-layers/util.js +74 -74
  229. package/dist/ui/primitives/layout/index.js +1 -1
  230. package/dist/ui/primitives/panels/index.js +1 -1
  231. package/dist/ui/primitives/panels/panel/Panel.svelte +43 -43
  232. package/dist/ui/primitives/rows/index.js +3 -3
  233. package/dist/ui/primitives/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  234. package/dist/ui/primitives/rows/panel-row-2/PanelRow2.svelte +40 -40
  235. package/dist/ui/primitives/tab-bar/HkTabBar.state.svelte.js +149 -149
  236. package/dist/ui/primitives/tab-bar/HkTabBar.svelte +74 -74
  237. package/dist/ui/primitives/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  238. package/dist/ui/primitives/tab-bar/HkTabBarSelector.svelte +49 -49
  239. package/dist/ui/primitives/tab-bar/index.js +17 -17
  240. package/dist/ui/primitives/tab-bar/typedef.js +11 -11
  241. package/dist/util/array/index.js +436 -436
  242. package/dist/util/bases/base58.js +262 -262
  243. package/dist/util/bases/index.js +1 -1
  244. package/dist/util/compare/index.js +247 -247
  245. package/dist/util/css/css-vars.js +83 -83
  246. package/dist/util/css/index.js +1 -1
  247. package/dist/util/env/index.js +9 -9
  248. package/dist/util/exceptions/index.d.ts +4 -3
  249. package/dist/util/exceptions/index.js +26 -23
  250. package/dist/util/expect/arrays.js +47 -47
  251. package/dist/util/expect/index.js +259 -259
  252. package/dist/util/expect/primitives.js +55 -55
  253. package/dist/util/expect/url.js +60 -60
  254. package/dist/util/function/index.js +218 -218
  255. package/dist/util/geo/index.js +26 -26
  256. package/dist/util/index.js +7 -7
  257. package/dist/util/is/index.js +147 -147
  258. package/dist/util/iterate/index.js +204 -204
  259. package/dist/util/object/index.js +1345 -1345
  260. package/dist/util/singleton/index.js +97 -97
  261. package/dist/util/string/array-path.js +75 -75
  262. package/dist/util/string/convert.js +54 -54
  263. package/dist/util/string/fs.js +226 -226
  264. package/dist/util/string/index.js +5 -5
  265. package/dist/util/string/interpolate.js +61 -61
  266. package/dist/util/string/pad.js +10 -10
  267. package/dist/util/svelte/index.js +4 -4
  268. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  269. package/dist/util/svelte/observe/index.js +49 -49
  270. package/dist/util/svelte/state-context/index.js +117 -117
  271. package/dist/util/svelte/wait/index.js +38 -38
  272. package/dist/util/sveltekit/index.js +1 -1
  273. package/dist/util/sveltekit/route-folders/index.js +101 -101
  274. package/dist/util/time/index.js +328 -328
  275. package/dist/util/unique/index.js +231 -231
  276. package/dist/valibot/README.md +61 -50
  277. package/dist/valibot/index.js +8 -8
  278. package/dist/valibot/parsers/date.js__ +10 -0
  279. package/dist/valibot/parsers/email.d.ts +12 -0
  280. package/dist/valibot/parsers/email.js +34 -0
  281. package/dist/valibot/parsers/url.js +110 -110
  282. package/dist/valibot/parsers/user.js +23 -23
  283. package/dist/valibot/parsers.js +3 -3
  284. package/package.json +131 -131
  285. package/dist/logging/internal/unified-logger/index.d.ts +0 -3
  286. package/dist/logging/internal/unified-logger/index.js +0 -6
  287. package/dist/services/internal/index.d.ts +0 -6
  288. package/dist/services/internal/index.js +0 -8
  289. /package/dist/logging/internal/{unified-logger/constants.d.ts → constants.d.ts} +0 -0
  290. /package/dist/services/{internal/service-base → service-base}/index.d.ts +0 -0
  291. /package/dist/services/{internal/service-manager → service-manager}/constants.d.ts +0 -0
  292. /package/dist/services/{internal/service-manager → service-manager}/typedef.d.ts +0 -0
@@ -1,102 +1,102 @@
1
- import { getRootCssVar } from '../../util/css/css-vars.js';
2
-
3
- /**
4
- * Generates a complete HTML style tag with CSS custom properties for
5
- * the design system based on provided configuration.
6
- *
7
- * @param {Object} design - Design dimensions configuration
8
- * @param {number} design.width - The design width in pixels
9
- * @param {number} design.height - The design height in pixels
10
- * @param {Object} clamping - Scaling configuration parameters
11
- * @param {Object} clamping.ui - UI clamping configuration
12
- * @param {number} clamping.ui.min - Minimum UI scaling factor
13
- * @param {number} clamping.ui.max - Maximum UI scaling factor
14
- * @param {Object} clamping.textBase - Base text scaling configuration
15
- * @param {number} clamping.textBase.min - Minimum base text scaling
16
- * @param {number} clamping.textBase.max - Maximum base text scaling
17
- * @param {Object} clamping.textHeading - Heading text clamping configuration
18
- * @param {number} clamping.textHeading.min - Minimum heading text scaling
19
- * @param {number} clamping.textHeading.max - Maximum heading text scaling
20
- * @param {Object} clamping.textUi - UI text clamping configuration
21
- * @param {number} clamping.textUi.min - Minimum UI text scaling
22
- * @param {number} clamping.textUi.max - Maximum UI text scaling
23
- *
24
- * @returns {string} Complete HTML style tag with design system CSS variables
25
- *
26
- * @example
27
- * // +layout.svelte
28
- * <script>
29
- * import { DESIGN, CLAMPING } from '../config/design-config.js';
30
- *
31
- * import { rootDesignVarsHTML } from './root-vars.js';
32
- * </script>
33
- *
34
- * <svelte:head>
35
- * {@html rootDesignVarsHTML(DESIGN, CLAMPING)}
36
- * </svelte:head>
37
- *
38
- * // Generates style tag for use in svelte:head
39
- * // <style>:root { --design-width: 1920; ... }</style>
40
- */
41
- export function rootDesignVarsHTML(design, clamping) {
42
- return `<style>:root {
43
- /* Design dimensions */
44
- --design-width: ${design.width};
45
- --design-height: ${design.height};
46
-
47
- /* Scaling factors */
48
- --scale-w: 1;
49
- --scale-h: 1;
50
-
51
- /* --scale-viewport: min(var(--scale-w), var(--scale-h)); */
52
- --scale-viewport: 1;
53
-
54
- /* Base clamping units */
55
- --scale-ui: clamp(${clamping.ui.min}, var(--scale-viewport), ${clamping.ui.max});
56
- --scale-text-base: clamp(${clamping.textBase.min}, var(--scale-viewport), ${clamping.textBase.max});
57
- --scale-text-heading: clamp(${clamping.textHeading.min}, var(--scale-viewport), ${clamping.textHeading.max});
58
- --scale-text-ui: clamp(${clamping.textUi.min}, var(--scale-viewport), ${clamping.textUi.max});
59
- }</style>`;
60
- }
61
-
62
- /**
63
- * Get design width from CSS variables
64
- *
65
- * @returns {number} Design width
66
- */
67
- export function getRootCssDesignWidth() {
68
- return getRootCssVar('design-width');
69
- }
70
-
71
- /**
72
- * Get design height from CSS variables
73
- *
74
- * @returns {number} Design height
75
- */
76
- export function getRootCssDesignHeight() {
77
- return getRootCssVar('design-height');
78
- }
79
-
80
- /**
81
- * Retrieves all current scaling factors from CSS variables
82
- *
83
- * @returns {Object} An object containing all scaling factors
84
- */
85
- export function getAllRootScalingVars() {
86
- const styles = getComputedStyle(document.documentElement);
87
-
88
- return {
89
- scaleW: parseFloat(styles.getPropertyValue('--scale-w').trim()) || 0,
90
- scaleH: parseFloat(styles.getPropertyValue('--scale-h').trim()) || 0,
91
- scaleViewport:
92
- parseFloat(styles.getPropertyValue('--scale-viewport').trim()) || 0,
93
-
94
- scaleUI: parseFloat(styles.getPropertyValue('--scale-ui').trim()) || 0,
95
- scaleTextBase:
96
- parseFloat(styles.getPropertyValue('--scale-text-base').trim()) || 0,
97
- scaleTextHeading:
98
- parseFloat(styles.getPropertyValue('--scale-text-heading').trim()) || 0,
99
- scaleTextUI:
100
- parseFloat(styles.getPropertyValue('--scale-text-ui').trim()) || 0
101
- };
102
- }
1
+ import { getRootCssVar } from '../../util/css/css-vars.js';
2
+
3
+ /**
4
+ * Generates a complete HTML style tag with CSS custom properties for
5
+ * the design system based on provided configuration.
6
+ *
7
+ * @param {Object} design - Design dimensions configuration
8
+ * @param {number} design.width - The design width in pixels
9
+ * @param {number} design.height - The design height in pixels
10
+ * @param {Object} clamping - Scaling configuration parameters
11
+ * @param {Object} clamping.ui - UI clamping configuration
12
+ * @param {number} clamping.ui.min - Minimum UI scaling factor
13
+ * @param {number} clamping.ui.max - Maximum UI scaling factor
14
+ * @param {Object} clamping.textBase - Base text scaling configuration
15
+ * @param {number} clamping.textBase.min - Minimum base text scaling
16
+ * @param {number} clamping.textBase.max - Maximum base text scaling
17
+ * @param {Object} clamping.textHeading - Heading text clamping configuration
18
+ * @param {number} clamping.textHeading.min - Minimum heading text scaling
19
+ * @param {number} clamping.textHeading.max - Maximum heading text scaling
20
+ * @param {Object} clamping.textUi - UI text clamping configuration
21
+ * @param {number} clamping.textUi.min - Minimum UI text scaling
22
+ * @param {number} clamping.textUi.max - Maximum UI text scaling
23
+ *
24
+ * @returns {string} Complete HTML style tag with design system CSS variables
25
+ *
26
+ * @example
27
+ * // +layout.svelte
28
+ * <script>
29
+ * import { DESIGN, CLAMPING } from '../config/design-config.js';
30
+ *
31
+ * import { rootDesignVarsHTML } from './root-vars.js';
32
+ * </script>
33
+ *
34
+ * <svelte:head>
35
+ * {@html rootDesignVarsHTML(DESIGN, CLAMPING)}
36
+ * </svelte:head>
37
+ *
38
+ * // Generates style tag for use in svelte:head
39
+ * // <style>:root { --design-width: 1920; ... }</style>
40
+ */
41
+ export function rootDesignVarsHTML(design, clamping) {
42
+ return `<style>:root {
43
+ /* Design dimensions */
44
+ --design-width: ${design.width};
45
+ --design-height: ${design.height};
46
+
47
+ /* Scaling factors */
48
+ --scale-w: 1;
49
+ --scale-h: 1;
50
+
51
+ /* --scale-viewport: min(var(--scale-w), var(--scale-h)); */
52
+ --scale-viewport: 1;
53
+
54
+ /* Base clamping units */
55
+ --scale-ui: clamp(${clamping.ui.min}, var(--scale-viewport), ${clamping.ui.max});
56
+ --scale-text-base: clamp(${clamping.textBase.min}, var(--scale-viewport), ${clamping.textBase.max});
57
+ --scale-text-heading: clamp(${clamping.textHeading.min}, var(--scale-viewport), ${clamping.textHeading.max});
58
+ --scale-text-ui: clamp(${clamping.textUi.min}, var(--scale-viewport), ${clamping.textUi.max});
59
+ }</style>`;
60
+ }
61
+
62
+ /**
63
+ * Get design width from CSS variables
64
+ *
65
+ * @returns {number} Design width
66
+ */
67
+ export function getRootCssDesignWidth() {
68
+ return getRootCssVar('design-width');
69
+ }
70
+
71
+ /**
72
+ * Get design height from CSS variables
73
+ *
74
+ * @returns {number} Design height
75
+ */
76
+ export function getRootCssDesignHeight() {
77
+ return getRootCssVar('design-height');
78
+ }
79
+
80
+ /**
81
+ * Retrieves all current scaling factors from CSS variables
82
+ *
83
+ * @returns {Object} An object containing all scaling factors
84
+ */
85
+ export function getAllRootScalingVars() {
86
+ const styles = getComputedStyle(document.documentElement);
87
+
88
+ return {
89
+ scaleW: parseFloat(styles.getPropertyValue('--scale-w').trim()) || 0,
90
+ scaleH: parseFloat(styles.getPropertyValue('--scale-h').trim()) || 0,
91
+ scaleViewport:
92
+ parseFloat(styles.getPropertyValue('--scale-viewport').trim()) || 0,
93
+
94
+ scaleUI: parseFloat(styles.getPropertyValue('--scale-ui').trim()) || 0,
95
+ scaleTextBase:
96
+ parseFloat(styles.getPropertyValue('--scale-text-base').trim()) || 0,
97
+ scaleTextHeading:
98
+ parseFloat(styles.getPropertyValue('--scale-text-heading').trim()) || 0,
99
+ scaleTextUI:
100
+ parseFloat(styles.getPropertyValue('--scale-text-ui').trim()) || 0
101
+ };
102
+ }
@@ -1,228 +1,228 @@
1
- import { clamp } from './clamp.js';
2
-
3
- /**
4
- * Manages responsive design scaling by calculating and applying scale factors
5
- * based on container dimensions and design system requirements.
6
- *
7
- * @param {Object} options - Configuration options
8
- * @param {HTMLElement} options.container - The container element to apply scaling to
9
- * @param {Object} options.design - The base design dimensions
10
- * @param {number} options.design.width - The reference design width
11
- * @param {number} options.design.height - The reference design height
12
- * @param {Object} options.clamping - The min/max values for various scale factors
13
- * @param {Object} options.clamping.ui - UI element scaling constraints
14
- * @param {number} options.clamping.ui.min - Minimum UI scale factor
15
- * @param {number} options.clamping.ui.max - Maximum UI scale factor
16
- * @param {Object} options.clamping.textBase - Base text scaling constraints
17
- * @param {number} options.clamping.textBase.min - Minimum base text scale factor
18
- * @param {number} options.clamping.textBase.max - Maximum base text scale factor
19
- * @param {Object} options.clamping.textHeading - Heading text scaling constraints
20
- * @param {number} options.clamping.textHeading.min - Minimum heading text scale factor
21
- * @param {number} options.clamping.textHeading.max - Maximum heading text scale factor
22
- * @param {Object} options.clamping.textUi - UI text scaling constraints
23
- * @param {number} options.clamping.textUi.min - Minimum UI text scale factor
24
- * @param {number} options.clamping.textUi.max - Maximum UI text scale factor
25
- * @param {Function} [options.getDimensions] - Optional function to get width and height
26
- * @param {boolean} [options.useResizeObserver=true] - Whether to use ResizeObserver
27
- *
28
- * @returns {()=>void} A cleanup function that removes event listeners and observers
29
- */
30
- export function enableContainerScaling({
31
- container,
32
- design,
33
- clamping,
34
- getDimensions,
35
- useResizeObserver = true
36
- }) {
37
- if (!container) {
38
- throw new Error('Container element is required for enableContainerScaling');
39
- }
40
-
41
- let resizeObserver;
42
-
43
- /**
44
- * Updates CSS scale variables based on container dimensions
45
- * and design system constraints
46
- */
47
- function updateScaleValues() {
48
- try {
49
- let containerWidth, containerHeight;
50
-
51
- // Use custom dimension getter if provided
52
- if (typeof getDimensions === 'function') {
53
- const dimensions = getDimensions();
54
- containerWidth = dimensions.width;
55
- containerHeight = dimensions.height;
56
- } else {
57
- // Otherwise use container's client dimensions
58
- const rect = container.getBoundingClientRect();
59
- containerWidth = rect.width;
60
- containerHeight = rect.height;
61
- }
62
-
63
- // Skip update if dimensions are zero (container not visible)
64
- if (containerWidth <= 0 || containerHeight <= 0) {
65
- return;
66
- }
67
-
68
- // Calculate scale factors based on container size relative to design dimensions
69
- const scaleW = containerWidth / design.width;
70
- const scaleH = containerHeight / design.height;
71
-
72
- // Use the smaller scale factor to ensure content fits within container
73
- const scaleViewport = Math.min(scaleW, scaleH);
74
-
75
- // Apply clamping to different element types
76
- const scaleUI = clamp(clamping.ui.min, scaleViewport, clamping.ui.max);
77
-
78
- const scaleTextBase = clamp(
79
- clamping.textBase.min,
80
- scaleViewport,
81
- clamping.textBase.max
82
- );
83
-
84
- const scaleTextHeading = clamp(
85
- clamping.textHeading.min,
86
- scaleViewport,
87
- clamping.textHeading.max
88
- );
89
-
90
- const scaleTextUi = clamp(
91
- clamping.textUi.min,
92
- scaleViewport,
93
- clamping.textUi.max
94
- );
95
-
96
- // Set CSS custom properties on the container
97
- container.style.setProperty('--scale-w', String(scaleW));
98
- container.style.setProperty('--scale-h', String(scaleH));
99
- container.style.setProperty('--scale-viewport', String(scaleViewport));
100
- container.style.setProperty('--scale-ui', String(scaleUI));
101
- container.style.setProperty('--scale-text-base', String(scaleTextBase));
102
- container.style.setProperty(
103
- '--scale-text-heading',
104
- String(scaleTextHeading)
105
- );
106
- container.style.setProperty('--scale-text-ui', String(scaleTextUi));
107
- } catch (error) {
108
- console.error('Error updating container scale values:', error);
109
- }
110
- }
111
-
112
- // Initialize scales
113
- updateScaleValues();
114
-
115
- // Set up ResizeObserver for container resize detection
116
- if (useResizeObserver && typeof ResizeObserver !== 'undefined') {
117
- resizeObserver = new ResizeObserver(updateScaleValues);
118
- resizeObserver.observe(container);
119
- } else {
120
- // Fallback to window resize event
121
- window.addEventListener('resize', updateScaleValues);
122
- }
123
-
124
- // Return cleanup function
125
- return function cleanup() {
126
- if (resizeObserver) {
127
- resizeObserver.disconnect();
128
- } else {
129
- window.removeEventListener('resize', updateScaleValues);
130
- }
131
- };
132
- }
133
-
134
- /**
135
- * Manages responsive design scaling by calculating and applying scale factors
136
- * based on viewport dimensions and design system requirements.
137
- *
138
- * @param {Object} design - The base design dimensions
139
- * @param {number} design.width - The reference design width
140
- * @param {number} design.height - The reference design height
141
- * @param {Object} clamping - The min/max values for various scale factors
142
- * @param {Object} clamping.ui - UI element scaling constraints
143
- * @param {number} clamping.ui.min - Minimum UI scale factor
144
- * @param {number} clamping.ui.max - Maximum UI scale factor
145
- * @param {Object} clamping.textBase - Base text scaling constraints
146
- * @param {number} clamping.textBase.min - Minimum base text scale factor
147
- * @param {number} clamping.textBase.max - Maximum base text scale factor
148
- * @param {Object} clamping.textHeading - Heading text scaling constraints
149
- * @param {number} clamping.textHeading.min - Minimum heading text scale factor
150
- * @param {number} clamping.textHeading.max - Maximum heading text scale factor
151
- * @param {Object} clamping.textUi - UI text scaling constraints
152
- * @param {number} clamping.textUi.min - Minimum UI text scale factor
153
- * @param {number} clamping.textUi.max - Maximum UI text scale factor
154
- *
155
- * @returns {()=>void} A cleanup function that removes the event listener
156
- */
157
- export function enableScalingUI(design, clamping) {
158
- /**
159
- * Updates CSS scale variables based on current viewport dimensions
160
- * and design system constraints
161
- */
162
- function updateScaleValues() {
163
- try {
164
- const vw = window.innerWidth;
165
- const vh = window.innerHeight;
166
-
167
- // Calculate scale factors based on viewport size relative to design dimensions
168
- const scaleW = vw / design.width;
169
- const scaleH = vh / design.height;
170
-
171
- // Use the smaller scale factor to ensure content fits within viewport
172
- const scaleViewport = Math.min(scaleW, scaleH);
173
-
174
- // Apply clamping to different element types
175
- const scaleUI = clamp(clamping.ui.min, scaleViewport, clamping.ui.max);
176
-
177
- const scaleTextBase = clamp(
178
- clamping.textBase.min,
179
- scaleViewport,
180
- clamping.textBase.max
181
- );
182
-
183
- const scaleTextHeading = clamp(
184
- clamping.textHeading.min,
185
- scaleViewport,
186
- clamping.textHeading.max
187
- );
188
-
189
- const scaleTextUi = clamp(
190
- clamping.textUi.min,
191
- scaleViewport,
192
- clamping.textUi.max
193
- );
194
-
195
- // Set CSS custom properties for use in the design system
196
- document.documentElement.style.setProperty('--scale-w', String(scaleW));
197
- document.documentElement.style.setProperty('--scale-h', String(scaleH));
198
- document.documentElement.style.setProperty(
199
- '--scale-viewport',
200
- String(scaleViewport)
201
- );
202
- document.documentElement.style.setProperty('--scale-ui', String(scaleUI));
203
- document.documentElement.style.setProperty(
204
- '--scale-text-base',
205
- String(scaleTextBase)
206
- );
207
- document.documentElement.style.setProperty(
208
- '--scale-text-heading',
209
- String(scaleTextHeading)
210
- );
211
- document.documentElement.style.setProperty(
212
- '--scale-text-ui',
213
- String(scaleTextUi)
214
- );
215
- } catch (error) {
216
- console.error('Error updating design scale values:', error);
217
- }
218
- }
219
-
220
- // Initialize scales and attach resize listener
221
- updateScaleValues();
222
- window.addEventListener('resize', updateScaleValues);
223
-
224
- // Return cleanup function
225
- return function cleanup() {
226
- window.removeEventListener('resize', updateScaleValues);
227
- };
228
- }
1
+ import { clamp } from './clamp.js';
2
+
3
+ /**
4
+ * Manages responsive design scaling by calculating and applying scale factors
5
+ * based on container dimensions and design system requirements.
6
+ *
7
+ * @param {Object} options - Configuration options
8
+ * @param {HTMLElement} options.container - The container element to apply scaling to
9
+ * @param {Object} options.design - The base design dimensions
10
+ * @param {number} options.design.width - The reference design width
11
+ * @param {number} options.design.height - The reference design height
12
+ * @param {Object} options.clamping - The min/max values for various scale factors
13
+ * @param {Object} options.clamping.ui - UI element scaling constraints
14
+ * @param {number} options.clamping.ui.min - Minimum UI scale factor
15
+ * @param {number} options.clamping.ui.max - Maximum UI scale factor
16
+ * @param {Object} options.clamping.textBase - Base text scaling constraints
17
+ * @param {number} options.clamping.textBase.min - Minimum base text scale factor
18
+ * @param {number} options.clamping.textBase.max - Maximum base text scale factor
19
+ * @param {Object} options.clamping.textHeading - Heading text scaling constraints
20
+ * @param {number} options.clamping.textHeading.min - Minimum heading text scale factor
21
+ * @param {number} options.clamping.textHeading.max - Maximum heading text scale factor
22
+ * @param {Object} options.clamping.textUi - UI text scaling constraints
23
+ * @param {number} options.clamping.textUi.min - Minimum UI text scale factor
24
+ * @param {number} options.clamping.textUi.max - Maximum UI text scale factor
25
+ * @param {Function} [options.getDimensions] - Optional function to get width and height
26
+ * @param {boolean} [options.useResizeObserver=true] - Whether to use ResizeObserver
27
+ *
28
+ * @returns {()=>void} A cleanup function that removes event listeners and observers
29
+ */
30
+ export function enableContainerScaling({
31
+ container,
32
+ design,
33
+ clamping,
34
+ getDimensions,
35
+ useResizeObserver = true
36
+ }) {
37
+ if (!container) {
38
+ throw new Error('Container element is required for enableContainerScaling');
39
+ }
40
+
41
+ let resizeObserver;
42
+
43
+ /**
44
+ * Updates CSS scale variables based on container dimensions
45
+ * and design system constraints
46
+ */
47
+ function updateScaleValues() {
48
+ try {
49
+ let containerWidth, containerHeight;
50
+
51
+ // Use custom dimension getter if provided
52
+ if (typeof getDimensions === 'function') {
53
+ const dimensions = getDimensions();
54
+ containerWidth = dimensions.width;
55
+ containerHeight = dimensions.height;
56
+ } else {
57
+ // Otherwise use container's client dimensions
58
+ const rect = container.getBoundingClientRect();
59
+ containerWidth = rect.width;
60
+ containerHeight = rect.height;
61
+ }
62
+
63
+ // Skip update if dimensions are zero (container not visible)
64
+ if (containerWidth <= 0 || containerHeight <= 0) {
65
+ return;
66
+ }
67
+
68
+ // Calculate scale factors based on container size relative to design dimensions
69
+ const scaleW = containerWidth / design.width;
70
+ const scaleH = containerHeight / design.height;
71
+
72
+ // Use the smaller scale factor to ensure content fits within container
73
+ const scaleViewport = Math.min(scaleW, scaleH);
74
+
75
+ // Apply clamping to different element types
76
+ const scaleUI = clamp(clamping.ui.min, scaleViewport, clamping.ui.max);
77
+
78
+ const scaleTextBase = clamp(
79
+ clamping.textBase.min,
80
+ scaleViewport,
81
+ clamping.textBase.max
82
+ );
83
+
84
+ const scaleTextHeading = clamp(
85
+ clamping.textHeading.min,
86
+ scaleViewport,
87
+ clamping.textHeading.max
88
+ );
89
+
90
+ const scaleTextUi = clamp(
91
+ clamping.textUi.min,
92
+ scaleViewport,
93
+ clamping.textUi.max
94
+ );
95
+
96
+ // Set CSS custom properties on the container
97
+ container.style.setProperty('--scale-w', String(scaleW));
98
+ container.style.setProperty('--scale-h', String(scaleH));
99
+ container.style.setProperty('--scale-viewport', String(scaleViewport));
100
+ container.style.setProperty('--scale-ui', String(scaleUI));
101
+ container.style.setProperty('--scale-text-base', String(scaleTextBase));
102
+ container.style.setProperty(
103
+ '--scale-text-heading',
104
+ String(scaleTextHeading)
105
+ );
106
+ container.style.setProperty('--scale-text-ui', String(scaleTextUi));
107
+ } catch (error) {
108
+ console.error('Error updating container scale values:', error);
109
+ }
110
+ }
111
+
112
+ // Initialize scales
113
+ updateScaleValues();
114
+
115
+ // Set up ResizeObserver for container resize detection
116
+ if (useResizeObserver && typeof ResizeObserver !== 'undefined') {
117
+ resizeObserver = new ResizeObserver(updateScaleValues);
118
+ resizeObserver.observe(container);
119
+ } else {
120
+ // Fallback to window resize event
121
+ window.addEventListener('resize', updateScaleValues);
122
+ }
123
+
124
+ // Return cleanup function
125
+ return function cleanup() {
126
+ if (resizeObserver) {
127
+ resizeObserver.disconnect();
128
+ } else {
129
+ window.removeEventListener('resize', updateScaleValues);
130
+ }
131
+ };
132
+ }
133
+
134
+ /**
135
+ * Manages responsive design scaling by calculating and applying scale factors
136
+ * based on viewport dimensions and design system requirements.
137
+ *
138
+ * @param {Object} design - The base design dimensions
139
+ * @param {number} design.width - The reference design width
140
+ * @param {number} design.height - The reference design height
141
+ * @param {Object} clamping - The min/max values for various scale factors
142
+ * @param {Object} clamping.ui - UI element scaling constraints
143
+ * @param {number} clamping.ui.min - Minimum UI scale factor
144
+ * @param {number} clamping.ui.max - Maximum UI scale factor
145
+ * @param {Object} clamping.textBase - Base text scaling constraints
146
+ * @param {number} clamping.textBase.min - Minimum base text scale factor
147
+ * @param {number} clamping.textBase.max - Maximum base text scale factor
148
+ * @param {Object} clamping.textHeading - Heading text scaling constraints
149
+ * @param {number} clamping.textHeading.min - Minimum heading text scale factor
150
+ * @param {number} clamping.textHeading.max - Maximum heading text scale factor
151
+ * @param {Object} clamping.textUi - UI text scaling constraints
152
+ * @param {number} clamping.textUi.min - Minimum UI text scale factor
153
+ * @param {number} clamping.textUi.max - Maximum UI text scale factor
154
+ *
155
+ * @returns {()=>void} A cleanup function that removes the event listener
156
+ */
157
+ export function enableScalingUI(design, clamping) {
158
+ /**
159
+ * Updates CSS scale variables based on current viewport dimensions
160
+ * and design system constraints
161
+ */
162
+ function updateScaleValues() {
163
+ try {
164
+ const vw = window.innerWidth;
165
+ const vh = window.innerHeight;
166
+
167
+ // Calculate scale factors based on viewport size relative to design dimensions
168
+ const scaleW = vw / design.width;
169
+ const scaleH = vh / design.height;
170
+
171
+ // Use the smaller scale factor to ensure content fits within viewport
172
+ const scaleViewport = Math.min(scaleW, scaleH);
173
+
174
+ // Apply clamping to different element types
175
+ const scaleUI = clamp(clamping.ui.min, scaleViewport, clamping.ui.max);
176
+
177
+ const scaleTextBase = clamp(
178
+ clamping.textBase.min,
179
+ scaleViewport,
180
+ clamping.textBase.max
181
+ );
182
+
183
+ const scaleTextHeading = clamp(
184
+ clamping.textHeading.min,
185
+ scaleViewport,
186
+ clamping.textHeading.max
187
+ );
188
+
189
+ const scaleTextUi = clamp(
190
+ clamping.textUi.min,
191
+ scaleViewport,
192
+ clamping.textUi.max
193
+ );
194
+
195
+ // Set CSS custom properties for use in the design system
196
+ document.documentElement.style.setProperty('--scale-w', String(scaleW));
197
+ document.documentElement.style.setProperty('--scale-h', String(scaleH));
198
+ document.documentElement.style.setProperty(
199
+ '--scale-viewport',
200
+ String(scaleViewport)
201
+ );
202
+ document.documentElement.style.setProperty('--scale-ui', String(scaleUI));
203
+ document.documentElement.style.setProperty(
204
+ '--scale-text-base',
205
+ String(scaleTextBase)
206
+ );
207
+ document.documentElement.style.setProperty(
208
+ '--scale-text-heading',
209
+ String(scaleTextHeading)
210
+ );
211
+ document.documentElement.style.setProperty(
212
+ '--scale-text-ui',
213
+ String(scaleTextUi)
214
+ );
215
+ } catch (error) {
216
+ console.error('Error updating design scale values:', error);
217
+ }
218
+ }
219
+
220
+ // Initialize scales and attach resize listener
221
+ updateScaleValues();
222
+ window.addEventListener('resize', updateScaleValues);
223
+
224
+ // Return cleanup function
225
+ return function cleanup() {
226
+ window.removeEventListener('resize', updateScaleValues);
227
+ };
228
+ }