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