@hkdigital/lib-sveltekit 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +135 -135
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/cache/IndexedDbCache.js +1407 -1407
  5. package/dist/classes/cache/MemoryResponseCache.js +138 -138
  6. package/dist/classes/cache/index.js +5 -5
  7. package/dist/classes/cache/typedef.js +41 -41
  8. package/dist/classes/data/IterableTree.js +243 -243
  9. package/dist/classes/data/Selector.js +190 -190
  10. package/dist/classes/data/index.js +2 -2
  11. package/dist/classes/events/EventEmitter.js +275 -275
  12. package/dist/classes/events/index.js +2 -2
  13. package/dist/classes/index.js +4 -4
  14. package/dist/classes/logging/Logger.js +158 -158
  15. package/dist/classes/logging/constants.js +18 -18
  16. package/dist/classes/logging/index.js +4 -4
  17. package/dist/classes/promise/HkPromise.js +377 -377
  18. package/dist/classes/promise/index.js +1 -1
  19. package/dist/classes/services/ServiceBase.js +409 -409
  20. package/dist/classes/services/ServiceManager.js +1114 -1114
  21. package/dist/classes/services/constants.js +12 -12
  22. package/dist/classes/services/index.js +5 -5
  23. package/dist/classes/stores/SubscribersCount.js +107 -107
  24. package/dist/classes/stores/index.js +1 -1
  25. package/dist/classes/streams/LogTransformStream.js +19 -19
  26. package/dist/classes/streams/ServerEventsStore.js +110 -110
  27. package/dist/classes/streams/TimeStampSource.js +26 -26
  28. package/dist/classes/streams/index.js +3 -3
  29. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  30. package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
  31. package/dist/classes/svelte/audio/mocks.js +35 -35
  32. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  33. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  34. package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
  35. package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
  36. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  37. package/dist/classes/svelte/image/index.js +4 -4
  38. package/dist/classes/svelte/image/mocks.js +35 -35
  39. package/dist/classes/svelte/image/typedef.js +8 -8
  40. package/dist/classes/svelte/index.js +14 -14
  41. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  42. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  43. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  44. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
  45. package/dist/classes/svelte/network-loader/constants.js +3 -3
  46. package/dist/classes/svelte/network-loader/index.js +3 -3
  47. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  48. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  49. package/dist/components/area/HkArea.svelte +49 -49
  50. package/dist/components/area/HkGridArea.svelte +77 -77
  51. package/dist/components/area/index.js +2 -2
  52. package/dist/components/buttons/button/Button.svelte +82 -82
  53. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  54. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  55. package/dist/components/buttons/index.js +3 -3
  56. package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  57. package/dist/components/debug/index.js +1 -1
  58. package/dist/components/drag-drop/DragController.js +44 -44
  59. package/dist/components/drag-drop/DragDropContext.svelte +111 -110
  60. package/dist/components/drag-drop/Draggable.svelte +502 -512
  61. package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
  62. package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
  63. package/dist/components/drag-drop/DropZoneList.svelte +125 -125
  64. package/dist/components/drag-drop/actions.d.ts +9 -0
  65. package/dist/components/drag-drop/actions.js +26 -0
  66. package/dist/components/drag-drop/drag-state.svelte.d.ts +3 -1
  67. package/dist/components/drag-drop/drag-state.svelte.js +322 -319
  68. package/dist/components/drag-drop/drag-state.svelte.js__ +319 -0
  69. package/dist/components/drag-drop/index.js +7 -7
  70. package/dist/components/drag-drop/util.d.ts +0 -32
  71. package/dist/components/drag-drop/util.js +85 -85
  72. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  73. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  74. package/dist/components/icons/HkIcon.svelte +86 -86
  75. package/dist/components/icons/HkTabIcon.svelte +116 -116
  76. package/dist/components/icons/SteezeIcon.svelte +97 -97
  77. package/dist/components/icons/index.js +6 -6
  78. package/dist/components/icons/typedef.js +16 -16
  79. package/dist/components/index.js +2 -2
  80. package/dist/components/inputs/index.js +1 -1
  81. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  82. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  83. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  84. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  85. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  86. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  87. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  88. package/dist/components/layout/grid-layers/util.js +74 -74
  89. package/dist/components/layout/index.js +1 -1
  90. package/dist/components/panels/index.js +1 -1
  91. package/dist/components/panels/panel/Panel.svelte +43 -43
  92. package/dist/components/rows/index.js +3 -3
  93. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  94. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  95. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  96. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  97. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  98. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  99. package/dist/components/tab-bar/index.js +17 -17
  100. package/dist/components/tab-bar/typedef.js +11 -11
  101. package/dist/config/imagetools-config.js +189 -189
  102. package/dist/config/imagetools.d.ts +72 -72
  103. package/dist/constants/bases.js +13 -13
  104. package/dist/constants/errors/api.js +9 -9
  105. package/dist/constants/errors/generic.js +5 -5
  106. package/dist/constants/errors/index.js +3 -3
  107. package/dist/constants/errors/jwt.js +5 -5
  108. package/dist/constants/http/headers.js +6 -6
  109. package/dist/constants/http/index.js +2 -2
  110. package/dist/constants/http/methods.js +2 -2
  111. package/dist/constants/index.js +3 -3
  112. package/dist/constants/mime/application.js +5 -5
  113. package/dist/constants/mime/audio.js +13 -13
  114. package/dist/constants/mime/image.js +3 -3
  115. package/dist/constants/mime/index.js +4 -4
  116. package/dist/constants/mime/text.js +2 -2
  117. package/dist/constants/regexp/index.js +31 -31
  118. package/dist/constants/regexp/inspiratie.js__ +95 -95
  119. package/dist/constants/regexp/text.js +49 -49
  120. package/dist/constants/regexp/user.js +32 -32
  121. package/dist/constants/regexp/web.js +3 -3
  122. package/dist/constants/state-labels/drag-states.js +6 -6
  123. package/dist/constants/state-labels/drop-states.js +6 -6
  124. package/dist/constants/state-labels/input-states.js +11 -11
  125. package/dist/constants/state-labels/submit-states.js +4 -4
  126. package/dist/constants/time.js +28 -28
  127. package/dist/css/utilities.css +43 -43
  128. package/dist/design/design-config.js +73 -73
  129. package/dist/design/tailwind-theme-extend.js +158 -158
  130. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  131. package/dist/features/button-group/typedef.js +10 -10
  132. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  133. package/dist/features/compare-left-right/index.js +1 -1
  134. package/dist/features/game-box/GameBox.svelte +577 -577
  135. package/dist/features/game-box/gamebox.util.js +83 -83
  136. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  137. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  138. package/dist/features/image-box/ImageBox.svelte +210 -210
  139. package/dist/features/image-box/index.js +5 -5
  140. package/dist/features/image-box/typedef.js +32 -32
  141. package/dist/features/index.js +23 -23
  142. package/dist/features/presenter/ImageSlide.svelte +64 -64
  143. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  144. package/dist/features/presenter/Presenter.svelte +142 -142
  145. package/dist/features/presenter/constants.js +7 -7
  146. package/dist/features/presenter/index.js +10 -10
  147. package/dist/features/presenter/typedef.js +106 -106
  148. package/dist/features/presenter/util.js +210 -210
  149. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  150. package/dist/schemas/index.js +1 -1
  151. package/dist/schemas/validate-url.js +180 -180
  152. package/dist/server/index.js +1 -1
  153. package/dist/server/logger.js +94 -94
  154. package/dist/states/index.js +1 -1
  155. package/dist/states/navigation.svelte.js +55 -55
  156. package/dist/stores/index.js +1 -1
  157. package/dist/stores/theme.js +80 -80
  158. package/dist/themes/hkdev/components/blocks/text-block.css +41 -41
  159. package/dist/themes/hkdev/components/boxes/game-box.css +12 -12
  160. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  161. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  162. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  163. package/dist/themes/hkdev/components/buttons/skip-button.css +6 -6
  164. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  165. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +48 -48
  166. package/dist/themes/hkdev/components/icons/icon-steeze.css +22 -22
  167. package/dist/themes/hkdev/components/inputs/text-input.css +104 -104
  168. package/dist/themes/hkdev/components/panels/panel.css +27 -27
  169. package/dist/themes/hkdev/components/rows/panel-grid-row.css +6 -6
  170. package/dist/themes/hkdev/components/rows/panel-row-2.css +7 -7
  171. package/dist/themes/hkdev/components.css +53 -53
  172. package/dist/themes/hkdev/debug.css +1 -1
  173. package/dist/themes/hkdev/global/layout.css +39 -39
  174. package/dist/themes/hkdev/global/on-colors.css +53 -53
  175. package/dist/themes/hkdev/globals.css +11 -11
  176. package/dist/themes/hkdev/responsive.css +12 -12
  177. package/dist/themes/hkdev/theme-ext.js +15 -15
  178. package/dist/themes/hkdev/theme.js +235 -235
  179. package/dist/themes/index.js +1 -1
  180. package/dist/typedef/context.js +6 -6
  181. package/dist/typedef/drag.js +25 -25
  182. package/dist/typedef/drop.js +12 -12
  183. package/dist/typedef/image.js +38 -38
  184. package/dist/typedef/index.js +4 -4
  185. package/dist/util/array/index.js +436 -436
  186. package/dist/util/bases/base58.js +262 -262
  187. package/dist/util/bases/index.js +1 -1
  188. package/dist/util/compare/index.js +247 -247
  189. package/dist/util/css/css-vars.js +83 -83
  190. package/dist/util/css/index.js +1 -1
  191. package/dist/util/design-system/components/states.js +22 -22
  192. package/dist/util/design-system/css/clamp.js +66 -66
  193. package/dist/util/design-system/css/root-design-vars.js +102 -102
  194. package/dist/util/design-system/index.js +5 -5
  195. package/dist/util/design-system/layout/scaling.js +228 -228
  196. package/dist/util/design-system/skeleton.js +208 -208
  197. package/dist/util/design-system/tailwind.js +288 -288
  198. package/dist/util/env/index.js +9 -9
  199. package/dist/util/expect/arrays.js +47 -47
  200. package/dist/util/expect/index.js +259 -259
  201. package/dist/util/expect/primitives.js +55 -55
  202. package/dist/util/expect/url.js +60 -60
  203. package/dist/util/function/index.js +218 -218
  204. package/dist/util/geo/index.js +26 -26
  205. package/dist/util/http/caching.js +263 -263
  206. package/dist/util/http/errors.js +97 -97
  207. package/dist/util/http/headers.js +75 -75
  208. package/dist/util/http/http-request.js +379 -379
  209. package/dist/util/http/index.js +22 -22
  210. package/dist/util/http/json-request.js +224 -224
  211. package/dist/util/http/mocks.js +65 -65
  212. package/dist/util/http/response.js +294 -294
  213. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  214. package/dist/util/http/typedef.js +93 -93
  215. package/dist/util/http/url.js +52 -52
  216. package/dist/util/image/index.js +86 -86
  217. package/dist/util/index.js +2 -2
  218. package/dist/util/is/index.js +140 -140
  219. package/dist/util/iterate/index.js +234 -234
  220. package/dist/util/object/index.js +1361 -1361
  221. package/dist/util/singleton/index.js +97 -97
  222. package/dist/util/string/array-path.js +75 -75
  223. package/dist/util/string/convert.js +54 -54
  224. package/dist/util/string/fs.js +226 -226
  225. package/dist/util/string/index.js +5 -5
  226. package/dist/util/string/interpolate.js +61 -61
  227. package/dist/util/string/pad.js +10 -10
  228. package/dist/util/svelte/index.js +4 -4
  229. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  230. package/dist/util/svelte/observe/index.js +49 -49
  231. package/dist/util/svelte/state-context/index.js +117 -117
  232. package/dist/util/svelte/wait/index.js +38 -38
  233. package/dist/util/sveltekit/index.js +1 -1
  234. package/dist/util/sveltekit/route-folders/index.js +101 -101
  235. package/dist/util/time/index.js +323 -323
  236. package/dist/util/unique/index.js +249 -249
  237. package/dist/valibot/date.js__ +10 -10
  238. package/dist/valibot/index.js +9 -9
  239. package/dist/valibot/url.js +95 -95
  240. package/dist/valibot/user.js +23 -23
  241. package/dist/zod/all.js +33 -33
  242. package/dist/zod/generic.js +11 -11
  243. package/dist/zod/javascript.js +32 -32
  244. package/dist/zod/user.js +16 -16
  245. package/dist/zod/web.js +52 -52
  246. package/package.json +112 -112
@@ -1,228 +1,228 @@
1
- import { clamp } from '../css/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 '../css/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
+ }