@hkdigital/lib-sveltekit 0.2.21 → 0.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +149 -135
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/cache/IndexedDbCache.js +1407 -1407
  5. package/dist/classes/cache/MemoryResponseCache.js +138 -138
  6. package/dist/classes/cache/index.js +5 -5
  7. package/dist/classes/cache/typedef.js +41 -41
  8. package/dist/classes/data/IterableTree.js +243 -243
  9. package/dist/classes/data/Selector.js +190 -190
  10. package/dist/classes/data/index.js +2 -2
  11. package/dist/classes/events/EventEmitter.js +275 -275
  12. package/dist/classes/events/index.js +2 -2
  13. package/dist/classes/index.js +4 -4
  14. package/dist/classes/logging/Logger.js +210 -210
  15. package/dist/classes/logging/constants.js +16 -16
  16. package/dist/classes/logging/index.js +4 -4
  17. package/dist/classes/logging/typedef.js +17 -17
  18. package/dist/classes/promise/HkPromise.js +377 -377
  19. package/dist/classes/promise/index.js +1 -1
  20. package/dist/classes/services/ServiceBase.js +463 -463
  21. package/dist/classes/services/ServiceManager.js +614 -614
  22. package/dist/classes/services/index.js +5 -5
  23. package/dist/classes/services/service-states.js +205 -205
  24. package/dist/classes/services/typedef.js +179 -179
  25. package/dist/classes/stores/SubscribersCount.js +107 -107
  26. package/dist/classes/stores/index.js +1 -1
  27. package/dist/classes/streams/LogTransformStream.js +19 -19
  28. package/dist/classes/streams/ServerEventsStore.js +110 -110
  29. package/dist/classes/streams/TimeStampSource.js +26 -26
  30. package/dist/classes/streams/index.js +3 -3
  31. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  32. package/dist/classes/svelte/audio/AudioScene.svelte.js +324 -324
  33. package/dist/classes/svelte/audio/mocks.js +35 -35
  34. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  35. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  36. package/dist/classes/svelte/image/ImageLoader.svelte.js +45 -45
  37. package/dist/classes/svelte/image/ImageScene.svelte.js +249 -249
  38. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  39. package/dist/classes/svelte/image/index.js +4 -4
  40. package/dist/classes/svelte/image/mocks.js +35 -35
  41. package/dist/classes/svelte/image/typedef.js +8 -8
  42. package/dist/classes/svelte/index.js +14 -14
  43. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  44. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  45. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  46. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +338 -338
  47. package/dist/classes/svelte/network-loader/constants.js +3 -3
  48. package/dist/classes/svelte/network-loader/index.js +3 -3
  49. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  50. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  51. package/dist/components/area/HkArea.svelte +49 -49
  52. package/dist/components/area/HkGridArea.svelte +77 -77
  53. package/dist/components/area/index.js +2 -2
  54. package/dist/components/buttons/button/Button.svelte +82 -82
  55. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  56. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  57. package/dist/components/buttons/index.js +3 -3
  58. package/dist/components/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  59. package/dist/components/debug/index.js +1 -1
  60. package/dist/components/drag-drop/DragController.js +44 -44
  61. package/dist/components/drag-drop/DragDropContext.svelte +111 -111
  62. package/dist/components/drag-drop/Draggable.svelte +519 -519
  63. package/dist/components/drag-drop/{Dropzone.svelte → DropZone.svelte} +258 -258
  64. package/dist/components/drag-drop/DropZoneArea.svelte +119 -119
  65. package/dist/components/drag-drop/DropZoneList.svelte +125 -125
  66. package/dist/components/drag-drop/actions.js +26 -26
  67. package/dist/components/drag-drop/drag-state.svelte.js +322 -322
  68. package/dist/components/drag-drop/index.js +7 -7
  69. package/dist/components/drag-drop/util.js +85 -85
  70. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  71. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  72. package/dist/components/icons/HkIcon.svelte +86 -86
  73. package/dist/components/icons/HkTabIcon.svelte +116 -116
  74. package/dist/components/icons/SteezeIcon.svelte +97 -97
  75. package/dist/components/icons/index.js +6 -6
  76. package/dist/components/icons/typedef.js +16 -16
  77. package/dist/components/index.js +2 -2
  78. package/dist/components/inputs/index.js +1 -1
  79. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  80. package/dist/components/inputs/text-input/TextInput.svelte +223 -223
  81. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  82. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  83. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  84. package/dist/components/layout/grid-layers/GridLayers.svelte +63 -63
  85. package/dist/components/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  86. package/dist/components/layout/grid-layers/util.js +74 -74
  87. package/dist/components/layout/index.js +1 -1
  88. package/dist/components/panels/index.js +1 -1
  89. package/dist/components/panels/panel/Panel.svelte +43 -43
  90. package/dist/components/rows/index.js +3 -3
  91. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  92. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  93. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  94. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  95. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  96. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  97. package/dist/components/tab-bar/index.js +17 -17
  98. package/dist/components/tab-bar/typedef.js +11 -11
  99. package/dist/config/imagetools-config.js +189 -189
  100. package/dist/config/imagetools.d.ts +72 -72
  101. package/dist/constants/bases.js +13 -13
  102. package/dist/constants/errors/api.js +9 -9
  103. package/dist/constants/errors/generic.js +5 -5
  104. package/dist/constants/errors/index.js +3 -3
  105. package/dist/constants/errors/jwt.js +5 -5
  106. package/dist/constants/http/headers.js +6 -6
  107. package/dist/constants/http/index.js +2 -2
  108. package/dist/constants/http/methods.js +14 -14
  109. package/dist/constants/index.js +3 -3
  110. package/dist/constants/mime/application.js +5 -5
  111. package/dist/constants/mime/audio.js +13 -13
  112. package/dist/constants/mime/image.js +3 -3
  113. package/dist/constants/mime/index.js +4 -4
  114. package/dist/constants/mime/text.js +2 -2
  115. package/dist/constants/regexp/index.js +31 -31
  116. package/dist/constants/regexp/inspiratie.js__ +95 -95
  117. package/dist/constants/regexp/text.js +49 -49
  118. package/dist/constants/regexp/user.js +32 -32
  119. package/dist/constants/regexp/web.js +3 -3
  120. package/dist/constants/state-labels/drag-states.js +6 -6
  121. package/dist/constants/state-labels/drop-states.js +6 -6
  122. package/dist/constants/state-labels/input-states.js +11 -11
  123. package/dist/constants/state-labels/submit-states.js +4 -4
  124. package/dist/constants/time.js +28 -28
  125. package/dist/css/utilities.css +43 -43
  126. package/dist/design/design-config.js +73 -73
  127. package/dist/design/tailwind-theme-extend.js +158 -158
  128. package/dist/features/button-group/ButtonGroup.svelte +82 -82
  129. package/dist/features/button-group/typedef.js +10 -10
  130. package/dist/features/compare-left-right/CompareLeftRight.svelte +179 -179
  131. package/dist/features/compare-left-right/index.js +1 -1
  132. package/dist/features/game-box/GameBox.svelte +577 -577
  133. package/dist/features/game-box/gamebox.util.js +83 -83
  134. package/dist/features/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  135. package/dist/features/hk-app-layout/HkAppLayout.svelte +251 -251
  136. package/dist/features/image-box/ImageBox.svelte +210 -210
  137. package/dist/features/image-box/index.js +5 -5
  138. package/dist/features/image-box/typedef.js +32 -32
  139. package/dist/features/index.js +23 -23
  140. package/dist/features/presenter/ImageSlide.svelte +64 -64
  141. package/dist/features/presenter/Presenter.state.svelte.js +638 -638
  142. package/dist/features/presenter/Presenter.svelte +142 -142
  143. package/dist/features/presenter/constants.js +7 -7
  144. package/dist/features/presenter/index.js +10 -10
  145. package/dist/features/presenter/typedef.js +106 -106
  146. package/dist/features/presenter/util.js +210 -210
  147. package/dist/features/virtual-viewport/VirtualViewport.svelte +196 -196
  148. package/dist/logging/adapters/console.js +114 -114
  149. package/dist/logging/adapters/pino.js +60 -60
  150. package/dist/logging/constants.js +1 -1
  151. package/dist/logging/factories/client.js +21 -21
  152. package/dist/logging/factories/server.js +22 -22
  153. package/dist/logging/factories/universal.js +23 -23
  154. package/dist/logging/index.js +8 -8
  155. package/dist/schemas/index.js +1 -1
  156. package/dist/schemas/validate-url.js +180 -180
  157. package/dist/server/index.js +1 -1
  158. package/dist/server/logger.js +94 -94
  159. package/dist/states/index.js +1 -1
  160. package/dist/states/navigation.svelte.js +55 -55
  161. package/dist/stores/index.js +1 -1
  162. package/dist/stores/theme.js +80 -80
  163. package/dist/themes/hkdev/components/blocks/text-block.css +34 -34
  164. package/dist/themes/hkdev/components/boxes/game-box.css +11 -11
  165. package/dist/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  166. package/dist/themes/hkdev/components/buttons/button-text.css +32 -32
  167. package/dist/themes/hkdev/components/buttons/button.css +146 -146
  168. package/dist/themes/hkdev/components/buttons/skip-button.css +5 -5
  169. package/dist/themes/hkdev/components/drag-drop/draggable.css +73 -73
  170. package/dist/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
  171. package/dist/themes/hkdev/components/icons/icon-steeze.css +15 -15
  172. package/dist/themes/hkdev/components/inputs/text-input.css +102 -102
  173. package/dist/themes/hkdev/components/panels/panel.css +25 -25
  174. package/dist/themes/hkdev/components/rows/panel-grid-row.css +4 -4
  175. package/dist/themes/hkdev/components/rows/panel-row-2.css +5 -5
  176. package/dist/themes/hkdev/components.css +29 -29
  177. package/dist/themes/hkdev/debug.css +1 -1
  178. package/dist/themes/hkdev/global/layout.css +32 -32
  179. package/dist/themes/hkdev/global/on-colors.css +32 -32
  180. package/dist/themes/hkdev/globals.css +3 -3
  181. package/dist/themes/hkdev/responsive.css +12 -12
  182. package/dist/themes/hkdev/theme-ext.js +12 -12
  183. package/dist/themes/hkdev/theme.css +218 -218
  184. package/dist/themes/index.js +1 -1
  185. package/dist/typedef/context.js +6 -6
  186. package/dist/typedef/drag.js +25 -25
  187. package/dist/typedef/drop.js +12 -12
  188. package/dist/typedef/image.js +38 -38
  189. package/dist/typedef/index.js +4 -4
  190. package/dist/util/array/index.js +436 -436
  191. package/dist/util/bases/base58.js +262 -262
  192. package/dist/util/bases/index.js +1 -1
  193. package/dist/util/compare/index.js +247 -247
  194. package/dist/util/css/css-vars.js +83 -83
  195. package/dist/util/css/index.js +1 -1
  196. package/dist/util/design-system/components/states.js +22 -22
  197. package/dist/util/design-system/css/clamp.js +66 -66
  198. package/dist/util/design-system/css/root-design-vars.js +102 -102
  199. package/dist/util/design-system/index.js +5 -5
  200. package/dist/util/design-system/layout/scaling.js +228 -228
  201. package/dist/util/design-system/skeleton.js +208 -208
  202. package/dist/util/design-system/tailwind.js +288 -288
  203. package/dist/util/env/index.js +9 -9
  204. package/dist/util/exceptions/index.d.ts +11 -0
  205. package/dist/util/exceptions/index.js +17 -0
  206. package/dist/util/expect/arrays.js +47 -47
  207. package/dist/util/expect/index.js +259 -259
  208. package/dist/util/expect/primitives.js +55 -55
  209. package/dist/util/expect/url.js +60 -60
  210. package/dist/util/function/index.js +218 -218
  211. package/dist/util/geo/index.js +26 -26
  212. package/dist/util/http/caching.js +263 -263
  213. package/dist/util/http/errors.js +97 -97
  214. package/dist/util/http/headers.js +75 -75
  215. package/dist/util/http/http-request.js +578 -578
  216. package/dist/util/http/index.js +22 -22
  217. package/dist/util/http/json-request.js +224 -224
  218. package/dist/util/http/mocks.js +65 -65
  219. package/dist/util/http/response.js +294 -294
  220. package/dist/util/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  221. package/dist/util/http/typedef.js +93 -93
  222. package/dist/util/http/url.js +52 -52
  223. package/dist/util/image/index.js +86 -86
  224. package/dist/util/index.d.ts +1 -0
  225. package/dist/util/index.js +3 -2
  226. package/dist/util/is/index.js +140 -140
  227. package/dist/util/iterate/index.js +234 -234
  228. package/dist/util/object/index.js +1361 -1361
  229. package/dist/util/singleton/index.js +97 -97
  230. package/dist/util/string/array-path.js +75 -75
  231. package/dist/util/string/convert.js +54 -54
  232. package/dist/util/string/fs.js +226 -226
  233. package/dist/util/string/index.js +5 -5
  234. package/dist/util/string/interpolate.js +61 -61
  235. package/dist/util/string/pad.js +10 -10
  236. package/dist/util/svelte/index.js +4 -4
  237. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  238. package/dist/util/svelte/observe/index.js +49 -49
  239. package/dist/util/svelte/state-context/index.js +117 -117
  240. package/dist/util/svelte/wait/index.js +38 -38
  241. package/dist/util/sveltekit/index.js +1 -1
  242. package/dist/util/sveltekit/route-folders/index.js +101 -101
  243. package/dist/util/time/index.js +323 -323
  244. package/dist/util/unique/index.js +249 -249
  245. package/dist/valibot/date.js__ +10 -10
  246. package/dist/valibot/index.js +9 -9
  247. package/dist/valibot/url.js +95 -95
  248. package/dist/valibot/user.js +23 -23
  249. package/dist/zod/all.js +33 -33
  250. package/dist/zod/generic.js +11 -11
  251. package/dist/zod/javascript.js +32 -32
  252. package/dist/zod/user.js +16 -16
  253. package/dist/zod/web.js +52 -52
  254. package/package.json +133 -132
@@ -1,247 +1,247 @@
1
- /* ------------------------------------------------------------------ Imports */
2
-
3
- import { objectGet } from '../object/index.js';
4
-
5
- /* ------------------------------------------------------------------ Exports */
6
-
7
- /**
8
- * Check if the values of two variables should be considered the same
9
- *
10
- * @param {any} value1 - First value for comparison
11
- * @param {any} value2 - Second value for comparison
12
- *
13
- * @return {boolean} true if the two values can be considered the same
14
- */
15
- export function equals(value1, value2, _pendingComparisons) {
16
- // -- Basic sameness comparisons
17
-
18
- if (typeof value1 !== typeof value2) {
19
- // Not the same [type]
20
- return false;
21
- }
22
-
23
- if (!(value1 instanceof Object) && value1 !== value2) {
24
- // [Not an object] and [not the same value]
25
- return false;
26
- }
27
-
28
- if (value1 === value2) {
29
- // [same value or same object reference]
30
- return true;
31
- }
32
-
33
- if (value1 === null || value2 === null) {
34
- // [one of the values is null, the other an object]
35
- return false;
36
- }
37
-
38
- // -- Check if variables are already being compared
39
-
40
- if (!_pendingComparisons) {
41
- _pendingComparisons = { value1: [], value2: [] };
42
- } else {
43
- const values1 = _pendingComparisons.value1;
44
- const values2 = _pendingComparisons.value2;
45
-
46
- if (values1.length > 0) {
47
- const foundIndex = values1.indexOf(value1);
48
-
49
- if (-1 !== foundIndex && values2[foundIndex] === value2) {
50
- // Objects comparison in progress (it's safe to return true),
51
- // since equals will fail on other place if objects differ
52
- return true;
53
- }
54
- }
55
- }
56
-
57
- // -- Compare special objects
58
-
59
- switch (value1.constructor) {
60
- // Implement other special objects here.
61
-
62
- case RegExp:
63
- if (value1.toString() === value2.toString()) {
64
- return true;
65
- }
66
- return false;
67
-
68
- case Date:
69
- if (value1.getTime() === value2.getTime()) {
70
- return true;
71
- }
72
- return false;
73
- }
74
-
75
- // -- Check if both objects have the same properties
76
-
77
- for (const prop in value1) {
78
- if (undefined === value2[prop] && undefined !== value1[prop]) {
79
- // (defined) property found in value1 that is undefined in value2
80
- return false;
81
- }
82
- }
83
-
84
- for (const prop in value2) {
85
- if (undefined === value1[prop] && undefined !== value2[prop]) {
86
- // (defined) property found in value2 that is undefined in value1
87
- return false;
88
- }
89
- }
90
-
91
- // -- Check each property for sameness
92
-
93
- _pendingComparisons.value1.push(value1);
94
- _pendingComparisons.value2.push(value2);
95
-
96
- for (const prop in value1) {
97
- if (false === equals(value1[prop], value2[prop], _pendingComparisons)) {
98
- return false;
99
- }
100
- }
101
-
102
- return true;
103
- }
104
-
105
- // ---------------------------------------------------------------------- Method
106
-
107
- /**
108
- * Returns true if x is greater than y
109
- *
110
- * @param {any} x - First value
111
- * @param {any} y - Second value
112
- */
113
- export function isGreaterThan(x, y) {
114
- if (typeof x === 'undefined') {
115
- if (typeof y === 'undefined') {
116
- return false;
117
- }
118
-
119
- return true;
120
- }
121
-
122
- if (typeof y === 'undefined') {
123
- return false;
124
- }
125
-
126
- return x > y;
127
- }
128
-
129
- // ---------------------------------------------------------------------- Method
130
-
131
- /**
132
- * Returns true if x is less than y
133
- *
134
- * @param {any} x - First value
135
- * @param {any} y - Second value
136
- */
137
- export function isLessThan(x, y) {
138
- if (typeof x === 'undefined') {
139
- if (typeof y === 'undefined') {
140
- return false;
141
- }
142
-
143
- return false;
144
- }
145
-
146
- if (typeof y === 'undefined') {
147
- return true;
148
- }
149
-
150
- return x < y;
151
- }
152
-
153
- // ---------------------------------------------------------------------- Method
154
-
155
- /**
156
- * Compare function that can be used for sorting smallest values first
157
- * - undefined values are placed at the ...???FIXME???... of the sorted array
158
- *
159
- * @param {any} x - First value
160
- * @param {any} y - Second value
161
- *
162
- * @returns {number} 0 = keep original order,
163
- * 1 = sort x after y,
164
- * -1 = sort x before y
165
- */
166
- export function smallestFirst(x, y) {
167
- if (x === undefined) {
168
- if (y === undefined) {
169
- return 0;
170
- }
171
-
172
- return 1;
173
- }
174
-
175
- if (y === undefined) {
176
- return -1;
177
- }
178
-
179
- return x < y ? -1 : x > y ? 1 : 0;
180
- }
181
-
182
- // ---------------------------------------------------------------------- Method
183
-
184
- /**
185
- * Compare function that can be used for sorting largest values first
186
- * - undefined values are placed at the ...???FIXME???... of the sorted array
187
- *
188
- * @param {any} x - First value
189
- * @param {any} y - Second value
190
- *
191
- * @returns {number} 0 = keep original order,
192
- * 1 = sort x after y,
193
- * -1 = sort x before y
194
- */
195
- export function largestFirst(x, y) {
196
- if (x === undefined) {
197
- if (y === undefined) {
198
- return 0;
199
- }
200
-
201
- return 1;
202
- }
203
-
204
- if (y === undefined) {
205
- return -1;
206
- }
207
-
208
- return x < y ? 1 : x > y ? -1 : 0;
209
- }
210
-
211
- // ---------------------------------------------------------------------- Method
212
-
213
- /**
214
- * Comparator that can be used for sorting using an object path
215
- *
216
- * @param {function} compareFn - Function to use to compare the values
217
- *
218
- * @param {any} a - First value
219
- * @param {any} b - Second value
220
- *
221
- * @param {string|string[]} path - Object path
222
- */
223
- export function compareUsingPath(compareFn, a, b, path) {
224
- // @note assume a and b are objects
225
-
226
- const valueA = objectGet(a, path);
227
- const valueB = objectGet(b, path);
228
-
229
- return compareFn(valueA, valueB);
230
- }
231
-
232
- // ---------------------------------------------------------------------- Method
233
-
234
- /**
235
- * Comparator that can be used for sorting using an object key
236
- *
237
- * @param {function} compareFn - Function to use to compare the values
238
- * @param {string|string[]} path - Object path
239
- *
240
- * @param {any} x - First value
241
- * @param {any} y - Second value
242
- */
243
- export function compareUsingKey(compareFn, key, a, b) {
244
- // @note assume a and b are objects
245
-
246
- return compareFn(a[key], b[key]);
247
- }
1
+ /* ------------------------------------------------------------------ Imports */
2
+
3
+ import { objectGet } from '../object/index.js';
4
+
5
+ /* ------------------------------------------------------------------ Exports */
6
+
7
+ /**
8
+ * Check if the values of two variables should be considered the same
9
+ *
10
+ * @param {any} value1 - First value for comparison
11
+ * @param {any} value2 - Second value for comparison
12
+ *
13
+ * @return {boolean} true if the two values can be considered the same
14
+ */
15
+ export function equals(value1, value2, _pendingComparisons) {
16
+ // -- Basic sameness comparisons
17
+
18
+ if (typeof value1 !== typeof value2) {
19
+ // Not the same [type]
20
+ return false;
21
+ }
22
+
23
+ if (!(value1 instanceof Object) && value1 !== value2) {
24
+ // [Not an object] and [not the same value]
25
+ return false;
26
+ }
27
+
28
+ if (value1 === value2) {
29
+ // [same value or same object reference]
30
+ return true;
31
+ }
32
+
33
+ if (value1 === null || value2 === null) {
34
+ // [one of the values is null, the other an object]
35
+ return false;
36
+ }
37
+
38
+ // -- Check if variables are already being compared
39
+
40
+ if (!_pendingComparisons) {
41
+ _pendingComparisons = { value1: [], value2: [] };
42
+ } else {
43
+ const values1 = _pendingComparisons.value1;
44
+ const values2 = _pendingComparisons.value2;
45
+
46
+ if (values1.length > 0) {
47
+ const foundIndex = values1.indexOf(value1);
48
+
49
+ if (-1 !== foundIndex && values2[foundIndex] === value2) {
50
+ // Objects comparison in progress (it's safe to return true),
51
+ // since equals will fail on other place if objects differ
52
+ return true;
53
+ }
54
+ }
55
+ }
56
+
57
+ // -- Compare special objects
58
+
59
+ switch (value1.constructor) {
60
+ // Implement other special objects here.
61
+
62
+ case RegExp:
63
+ if (value1.toString() === value2.toString()) {
64
+ return true;
65
+ }
66
+ return false;
67
+
68
+ case Date:
69
+ if (value1.getTime() === value2.getTime()) {
70
+ return true;
71
+ }
72
+ return false;
73
+ }
74
+
75
+ // -- Check if both objects have the same properties
76
+
77
+ for (const prop in value1) {
78
+ if (undefined === value2[prop] && undefined !== value1[prop]) {
79
+ // (defined) property found in value1 that is undefined in value2
80
+ return false;
81
+ }
82
+ }
83
+
84
+ for (const prop in value2) {
85
+ if (undefined === value1[prop] && undefined !== value2[prop]) {
86
+ // (defined) property found in value2 that is undefined in value1
87
+ return false;
88
+ }
89
+ }
90
+
91
+ // -- Check each property for sameness
92
+
93
+ _pendingComparisons.value1.push(value1);
94
+ _pendingComparisons.value2.push(value2);
95
+
96
+ for (const prop in value1) {
97
+ if (false === equals(value1[prop], value2[prop], _pendingComparisons)) {
98
+ return false;
99
+ }
100
+ }
101
+
102
+ return true;
103
+ }
104
+
105
+ // ---------------------------------------------------------------------- Method
106
+
107
+ /**
108
+ * Returns true if x is greater than y
109
+ *
110
+ * @param {any} x - First value
111
+ * @param {any} y - Second value
112
+ */
113
+ export function isGreaterThan(x, y) {
114
+ if (typeof x === 'undefined') {
115
+ if (typeof y === 'undefined') {
116
+ return false;
117
+ }
118
+
119
+ return true;
120
+ }
121
+
122
+ if (typeof y === 'undefined') {
123
+ return false;
124
+ }
125
+
126
+ return x > y;
127
+ }
128
+
129
+ // ---------------------------------------------------------------------- Method
130
+
131
+ /**
132
+ * Returns true if x is less than y
133
+ *
134
+ * @param {any} x - First value
135
+ * @param {any} y - Second value
136
+ */
137
+ export function isLessThan(x, y) {
138
+ if (typeof x === 'undefined') {
139
+ if (typeof y === 'undefined') {
140
+ return false;
141
+ }
142
+
143
+ return false;
144
+ }
145
+
146
+ if (typeof y === 'undefined') {
147
+ return true;
148
+ }
149
+
150
+ return x < y;
151
+ }
152
+
153
+ // ---------------------------------------------------------------------- Method
154
+
155
+ /**
156
+ * Compare function that can be used for sorting smallest values first
157
+ * - undefined values are placed at the ...???FIXME???... of the sorted array
158
+ *
159
+ * @param {any} x - First value
160
+ * @param {any} y - Second value
161
+ *
162
+ * @returns {number} 0 = keep original order,
163
+ * 1 = sort x after y,
164
+ * -1 = sort x before y
165
+ */
166
+ export function smallestFirst(x, y) {
167
+ if (x === undefined) {
168
+ if (y === undefined) {
169
+ return 0;
170
+ }
171
+
172
+ return 1;
173
+ }
174
+
175
+ if (y === undefined) {
176
+ return -1;
177
+ }
178
+
179
+ return x < y ? -1 : x > y ? 1 : 0;
180
+ }
181
+
182
+ // ---------------------------------------------------------------------- Method
183
+
184
+ /**
185
+ * Compare function that can be used for sorting largest values first
186
+ * - undefined values are placed at the ...???FIXME???... of the sorted array
187
+ *
188
+ * @param {any} x - First value
189
+ * @param {any} y - Second value
190
+ *
191
+ * @returns {number} 0 = keep original order,
192
+ * 1 = sort x after y,
193
+ * -1 = sort x before y
194
+ */
195
+ export function largestFirst(x, y) {
196
+ if (x === undefined) {
197
+ if (y === undefined) {
198
+ return 0;
199
+ }
200
+
201
+ return 1;
202
+ }
203
+
204
+ if (y === undefined) {
205
+ return -1;
206
+ }
207
+
208
+ return x < y ? 1 : x > y ? -1 : 0;
209
+ }
210
+
211
+ // ---------------------------------------------------------------------- Method
212
+
213
+ /**
214
+ * Comparator that can be used for sorting using an object path
215
+ *
216
+ * @param {function} compareFn - Function to use to compare the values
217
+ *
218
+ * @param {any} a - First value
219
+ * @param {any} b - Second value
220
+ *
221
+ * @param {string|string[]} path - Object path
222
+ */
223
+ export function compareUsingPath(compareFn, a, b, path) {
224
+ // @note assume a and b are objects
225
+
226
+ const valueA = objectGet(a, path);
227
+ const valueB = objectGet(b, path);
228
+
229
+ return compareFn(valueA, valueB);
230
+ }
231
+
232
+ // ---------------------------------------------------------------------- Method
233
+
234
+ /**
235
+ * Comparator that can be used for sorting using an object key
236
+ *
237
+ * @param {function} compareFn - Function to use to compare the values
238
+ * @param {string|string[]} path - Object path
239
+ *
240
+ * @param {any} x - First value
241
+ * @param {any} y - Second value
242
+ */
243
+ export function compareUsingKey(compareFn, key, a, b) {
244
+ // @note assume a and b are objects
245
+
246
+ return compareFn(a[key], b[key]);
247
+ }
@@ -1,83 +1,83 @@
1
- let cssVarCache = {};
2
-
3
- /**
4
- * Normalizes a CSS variable name to ensure it has the -- prefix
5
- *
6
- * @param {string} varName - The CSS variable name
7
- * @returns {string} Normalized variable name with -- prefix
8
- */
9
- export function normalizeCssVarName(varName) {
10
- if (typeof varName !== 'string') {
11
- throw new Error('Variable name must be a string');
12
- }
13
- return varName.startsWith('--') ? varName : `--${varName}`;
14
- }
15
-
16
- /**
17
- * Extract a CSS variable value from document root
18
- *
19
- * @param {string} varName - CSS variable name without '--'
20
- * @param {boolean} [useCache=false]
21
- *
22
- * @returns {any} Parsed value or default
23
- */
24
- export function getRootCssVar(varName, useCache = false) {
25
- if (cssVarCache[varName] !== undefined && useCache) {
26
- return cssVarCache[varName];
27
- }
28
-
29
- // Get computed style from document root
30
- const rootStyle = getComputedStyle(document.documentElement);
31
- const declaration = rootStyle.getPropertyValue(`--${varName}`).trim();
32
-
33
- if (!declaration) {
34
- return null;
35
- }
36
-
37
- let result;
38
-
39
- // Try to parse as number
40
- if (!isNaN(parseFloat(declaration))) {
41
- result = parseFloat(declaration);
42
- } else {
43
- // Return string value
44
- result = declaration;
45
- }
46
-
47
- // Cache the result
48
- cssVarCache[varName] = result;
49
- return result;
50
- }
51
-
52
- /**
53
- * Sets a CSS variable in :root to a new value
54
- *
55
- * @param {string} varName - The CSS variable name (with or without --)
56
- * @param {string|number} value - The new value to set
57
- * @returns {boolean} True if successful, false otherwise
58
- */
59
- export function setRootCssVar(varName, value) {
60
- try {
61
- if (varName === undefined || varName === null) {
62
- throw new Error('Variable name cannot be null or undefined');
63
- }
64
-
65
- if (value === undefined || value === null) {
66
- throw new Error('Value cannot be null or undefined');
67
- }
68
-
69
- const normalizedName = normalizeCssVarName(varName);
70
-
71
- // Convert to string if numeric
72
- const formattedValue = typeof value === 'number' ? `${value}` : value;
73
-
74
- document.documentElement.style.setProperty(normalizedName, formattedValue);
75
-
76
- delete cssVarCache[varName];
77
-
78
- return true;
79
- } catch (error) {
80
- console.error(`Error setting CSS variable ${varName}:`, error);
81
- return false;
82
- }
83
- }
1
+ let cssVarCache = {};
2
+
3
+ /**
4
+ * Normalizes a CSS variable name to ensure it has the -- prefix
5
+ *
6
+ * @param {string} varName - The CSS variable name
7
+ * @returns {string} Normalized variable name with -- prefix
8
+ */
9
+ export function normalizeCssVarName(varName) {
10
+ if (typeof varName !== 'string') {
11
+ throw new Error('Variable name must be a string');
12
+ }
13
+ return varName.startsWith('--') ? varName : `--${varName}`;
14
+ }
15
+
16
+ /**
17
+ * Extract a CSS variable value from document root
18
+ *
19
+ * @param {string} varName - CSS variable name without '--'
20
+ * @param {boolean} [useCache=false]
21
+ *
22
+ * @returns {any} Parsed value or default
23
+ */
24
+ export function getRootCssVar(varName, useCache = false) {
25
+ if (cssVarCache[varName] !== undefined && useCache) {
26
+ return cssVarCache[varName];
27
+ }
28
+
29
+ // Get computed style from document root
30
+ const rootStyle = getComputedStyle(document.documentElement);
31
+ const declaration = rootStyle.getPropertyValue(`--${varName}`).trim();
32
+
33
+ if (!declaration) {
34
+ return null;
35
+ }
36
+
37
+ let result;
38
+
39
+ // Try to parse as number
40
+ if (!isNaN(parseFloat(declaration))) {
41
+ result = parseFloat(declaration);
42
+ } else {
43
+ // Return string value
44
+ result = declaration;
45
+ }
46
+
47
+ // Cache the result
48
+ cssVarCache[varName] = result;
49
+ return result;
50
+ }
51
+
52
+ /**
53
+ * Sets a CSS variable in :root to a new value
54
+ *
55
+ * @param {string} varName - The CSS variable name (with or without --)
56
+ * @param {string|number} value - The new value to set
57
+ * @returns {boolean} True if successful, false otherwise
58
+ */
59
+ export function setRootCssVar(varName, value) {
60
+ try {
61
+ if (varName === undefined || varName === null) {
62
+ throw new Error('Variable name cannot be null or undefined');
63
+ }
64
+
65
+ if (value === undefined || value === null) {
66
+ throw new Error('Value cannot be null or undefined');
67
+ }
68
+
69
+ const normalizedName = normalizeCssVarName(varName);
70
+
71
+ // Convert to string if numeric
72
+ const formattedValue = typeof value === 'number' ? `${value}` : value;
73
+
74
+ document.documentElement.style.setProperty(normalizedName, formattedValue);
75
+
76
+ delete cssVarCache[varName];
77
+
78
+ return true;
79
+ } catch (error) {
80
+ console.error(`Error setting CSS variable ${varName}:`, error);
81
+ return false;
82
+ }
83
+ }
@@ -1 +1 @@
1
- export * from './css-vars.js';
1
+ export * from './css-vars.js';