@hkdigital/lib-sveltekit 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +127 -127
- 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/index.js +3 -3
- package/dist/classes/promise/HkPromise.js +377 -377
- package/dist/classes/promise/index.js +1 -1
- 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 +282 -282
- package/dist/classes/svelte/audio/mocks.js +35 -35
- package/dist/classes/svelte/final-state-machine/FiniteStateMachine.svelte.js +133 -133
- package/dist/classes/svelte/final-state-machine/index.js +1 -1
- package/dist/classes/svelte/image/ImageLoader.svelte.js +47 -47
- package/dist/classes/svelte/image/ImageScene.svelte.js +253 -253
- 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/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 +331 -331
- 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/HkArea.svelte.d.ts +0 -14
- package/dist/components/area/HkGridArea.svelte +77 -77
- package/dist/components/area/HkGridArea.svelte.d.ts +0 -22
- package/dist/components/area/index.js +2 -2
- package/dist/components/boxes/game-box/GameBox.svelte +112 -112
- package/dist/components/boxes/game-box/GameBox.svelte.d.ts +0 -15
- package/dist/components/boxes/game-box/gamebox.util.js +83 -83
- package/dist/components/boxes/index.js +2 -2
- package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte +199 -199
- package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte.d.ts +0 -22
- package/dist/components/buttons/button/Button.svelte +75 -75
- package/dist/components/buttons/button/Button.svelte.d.ts +0 -21
- package/dist/components/buttons/button-text/TextButton.svelte +21 -21
- package/dist/components/buttons/button-text/TextButton.svelte.d.ts +0 -7
- package/dist/components/buttons/index.js +2 -2
- package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
- package/dist/components/hkdev/blocks/TextBlock.svelte.d.ts +0 -13
- package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
- package/dist/components/hkdev/buttons/CheckButton.svelte.d.ts +0 -18
- package/dist/components/icon/HkIcon.svelte +86 -86
- package/dist/components/icon/HkIcon.svelte.d.ts +0 -12
- package/dist/components/icon/HkTabIcon.svelte +116 -116
- package/dist/components/icon/HkTabIcon.svelte.d.ts +0 -21
- package/dist/components/icon/index.js +4 -4
- package/dist/components/icon/typedef.js +16 -16
- package/dist/components/image/ImageBox.svelte +208 -208
- package/dist/components/image/ImageBox.svelte.d.ts +0 -19
- package/dist/components/image/index.js +5 -5
- package/dist/components/image/typedef.js +32 -32
- 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 +226 -226
- package/dist/components/inputs/text-input/TextInput.svelte.d.ts +0 -28
- 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/HkAppLayout.state.svelte.js +25 -25
- package/dist/components/layout/HkAppLayout.svelte +251 -251
- package/dist/components/layout/HkAppLayout.svelte.d.ts +0 -11
- package/dist/components/layout/HkGridLayers.svelte +82 -82
- package/dist/components/layout/HkGridLayers.svelte.d.ts +0 -23
- package/dist/components/layout/index.js +9 -9
- package/dist/components/panels/index.js +1 -1
- package/dist/components/panels/plain-panel/PlainPanel.svelte +33 -33
- package/dist/components/panels/plain-panel/PlainPanel.svelte.d.ts +0 -12
- package/dist/components/rows/index.js +3 -3
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
- package/dist/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +0 -14
- package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
- package/dist/components/rows/panel-row-2/PanelRow2.svelte.d.ts +0 -14
- 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/HkTabBar.svelte.d.ts +0 -18
- 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/HkTabBarSelector.svelte.d.ts +0 -19
- package/dist/components/tab-bar/index.js +17 -17
- package/dist/components/tab-bar/typedef.js +8 -8
- package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
- package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte.d.ts +0 -10
- package/dist/components/widgets/compare-left-right/index.js +1 -1
- package/dist/components/widgets/scale-control/index.js +1 -1
- package/dist/config/imagetools-config.js +189 -189
- package/dist/config/imagetools.d.ts +71 -71
- package/dist/config/typedef.js +8 -8
- 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 +2 -2
- 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/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/tw-prose.postcss__ +259 -259
- package/dist/css/utilities.postcss +43 -43
- package/dist/design/design-config.js +73 -73
- package/dist/design/tailwind-theme-extend.d.ts +4 -4
- package/dist/design/tailwind-theme-extend.js +151 -151
- 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.postcss +40 -40
- package/dist/themes/hkdev/components/boxes/game-box.postcss +13 -13
- package/dist/themes/hkdev/components/buttons/button-text.postcss +34 -34
- package/dist/themes/hkdev/components/buttons/button.postcss +138 -138
- package/dist/themes/hkdev/components/buttons/skip-button.postcss +8 -8
- package/dist/themes/hkdev/components/inputs/text-input.postcss +108 -108
- package/dist/themes/hkdev/components/panels/plain-panel.postcss +46 -46
- package/dist/themes/hkdev/components/panels/speech-bubble.postcss +52 -52
- package/dist/themes/hkdev/components/rows/panel-grid-row.postcss +7 -7
- package/dist/themes/hkdev/components/rows/panel-row-2.postcss +9 -9
- package/dist/themes/hkdev/components.postcss +55 -55
- package/dist/themes/hkdev/debug.postcss +1 -1
- package/dist/themes/hkdev/global/layout.postcss +39 -39
- package/dist/themes/hkdev/global/on-colors.postcss +53 -53
- package/dist/themes/hkdev/global/text.postcss__ +34 -34
- package/dist/themes/hkdev/global/vars.postcss__ +7 -7
- package/dist/themes/hkdev/globals.postcss +11 -11
- package/dist/themes/hkdev/responsive.postcss +12 -12
- package/dist/themes/hkdev/theme-ext.js +15 -15
- package/dist/themes/hkdev/theme.js +227 -227
- package/dist/themes/index.js +1 -1
- package/dist/util/array/index.js +455 -455
- 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.d.ts +2 -2
- package/dist/util/design-system/css/clamp.js +66 -66
- package/dist/util/design-system/css/root-design-vars.js +100 -100
- package/dist/util/design-system/index.js +5 -5
- package/dist/util/design-system/layout/scaling.js +97 -97
- package/dist/util/design-system/tailwind.js +289 -289
- 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/http/errors.js +97 -97
- package/dist/util/http/headers.js +45 -45
- package/dist/util/http/http-request.js +273 -273
- package/dist/util/http/index.js +22 -22
- package/dist/util/http/json-request.js +143 -143
- package/dist/util/http/mocks.js +65 -65
- package/dist/util/http/response.js +228 -228
- package/dist/util/http/url.js +52 -52
- package/dist/util/image/index.js +86 -86
- package/dist/util/index.js +2 -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/index.js +184 -184
- package/dist/util/svelte/index.js +2 -2
- package/dist/util/svelte/observe/index.js +49 -49
- package/dist/util/svelte/state-context/index.js +83 -83
- 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 +82 -82
- package/dist/util/time/index.js +339 -339
- 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 +99 -99
- package/dist/themes/hkdev/components/buttons/button.postcss__ +0 -40
- package/dist/themes/hkdev/components/buttons/button.postcss___ +0 -91
@@ -1,251 +1,251 @@
|
|
1
|
-
<script>
|
2
|
-
/**
|
3
|
-
* @example
|
4
|
-
* // file.svelte
|
5
|
-
* <script>
|
6
|
-
* import AppLayout from '.../components/layout';
|
7
|
-
* <_/script>
|
8
|
-
*
|
9
|
-
* <AppLayout>
|
10
|
-
* {#snippet bgSnippet()}
|
11
|
-
* <BgGradient />
|
12
|
-
* {/snippet}
|
13
|
-
*
|
14
|
-
* {#snippet bottomSnippet()}
|
15
|
-
* <BottomBar />
|
16
|
-
* {/snippet}
|
17
|
-
*
|
18
|
-
* Main content
|
19
|
-
*
|
20
|
-
* </AppLayout>
|
21
|
-
*/
|
22
|
-
|
23
|
-
import { useResizeObserver } from '../../util/svelte/observe/index.js';
|
24
|
-
|
25
|
-
/**
|
26
|
-
* @typedef AppLayoutProps
|
27
|
-
*
|
28
|
-
* @property {import('svelte').Snippet|undefined} [bgPageSnippet]
|
29
|
-
* @property {import('svelte').Snippet|undefined} [bgSnippet]
|
30
|
-
* @property {import('svelte').Snippet|undefined} [topSnippet]
|
31
|
-
* @property {import('svelte').Snippet|undefined} [bottomSnippet]
|
32
|
-
* @property {import('svelte').Snippet} children
|
33
|
-
*/
|
34
|
-
|
35
|
-
/** @type {AppLayoutProps} */
|
36
|
-
let {
|
37
|
-
// > Functional
|
38
|
-
|
39
|
-
/** @type {boolean} */
|
40
|
-
// hasAuth = false,
|
41
|
-
|
42
|
-
bgPageSnippet,
|
43
|
-
bgSnippet,
|
44
|
-
|
45
|
-
topSnippet,
|
46
|
-
bottomSnippet,
|
47
|
-
|
48
|
-
children
|
49
|
-
|
50
|
-
// > Style
|
51
|
-
|
52
|
-
// base = '',
|
53
|
-
// bg = '',
|
54
|
-
// classes = '',
|
55
|
-
|
56
|
-
// > Background (child) styles
|
57
|
-
|
58
|
-
// > AppTop (child) styles
|
59
|
-
|
60
|
-
// appTopBase = '',
|
61
|
-
// appTopBg = '',
|
62
|
-
// appTopPadding = '',
|
63
|
-
// appTopMargin = '',
|
64
|
-
// appTopClasses = ''
|
65
|
-
} = $props();
|
66
|
-
|
67
|
-
// setAppLayoutContext({});
|
68
|
-
|
69
|
-
// Observe AppLayoutHeight
|
70
|
-
|
71
|
-
/** @type {HTMLElement|null} */
|
72
|
-
let elemAppLayout = $state(null);
|
73
|
-
let elemAppLayoutHeight = $state(0);
|
74
|
-
let elemAppLayoutWidth = $state(0);
|
75
|
-
|
76
|
-
useResizeObserver(
|
77
|
-
() => elemAppLayout,
|
78
|
-
(entries) => {
|
79
|
-
for (const { contentRect } of entries) {
|
80
|
-
// console.log('elemLayoutHeight', entry.contentRect.height);
|
81
|
-
elemAppLayoutHeight = contentRect.height;
|
82
|
-
elemAppLayoutWidth = contentRect.width;
|
83
|
-
break;
|
84
|
-
}
|
85
|
-
}
|
86
|
-
);
|
87
|
-
|
88
|
-
// Observe layoutTopHeight
|
89
|
-
|
90
|
-
/** @type {HTMLElement|null} */
|
91
|
-
// let elemLayoutTop = $state(null);
|
92
|
-
// let elemLayoutTopHeight = $state(0);
|
93
|
-
|
94
|
-
// useResizeObserver(
|
95
|
-
// () => elemLayoutTop,
|
96
|
-
// (entries) => {
|
97
|
-
// for (const entry of entries) {
|
98
|
-
// console.log('elemLayoutTopHeight', entry.contentRect.height);
|
99
|
-
// elemLayoutTopHeight = entry.contentRect.height;
|
100
|
-
// break;
|
101
|
-
// }
|
102
|
-
// }
|
103
|
-
// );
|
104
|
-
|
105
|
-
// Observe layoutContentHeight
|
106
|
-
|
107
|
-
/** @type {HTMLElement|null} */
|
108
|
-
let elemLayoutContent = $state(null);
|
109
|
-
let elemLayoutContentHeight = $state(0);
|
110
|
-
|
111
|
-
useResizeObserver(
|
112
|
-
() => elemLayoutContent,
|
113
|
-
(entries) => {
|
114
|
-
for (const entry of entries) {
|
115
|
-
// console.log('elemLayoutHeight', entry.contentRect.height);
|
116
|
-
elemLayoutContentHeight = entry.contentRect.height;
|
117
|
-
break;
|
118
|
-
}
|
119
|
-
}
|
120
|
-
);
|
121
|
-
|
122
|
-
// Observe layoutBottomHeight
|
123
|
-
|
124
|
-
/** @type {HTMLElement|null} */
|
125
|
-
let elemLayoutBottom = $state(null);
|
126
|
-
|
127
|
-
let elemLayoutBottomHeight = $state(0);
|
128
|
-
|
129
|
-
useResizeObserver(
|
130
|
-
() => elemLayoutBottom,
|
131
|
-
(entries) => {
|
132
|
-
for (const entry of entries) {
|
133
|
-
// console.log('elemLayoutBottomRect', entry.contentRect);
|
134
|
-
elemLayoutBottomHeight = entry.contentRect.height;
|
135
|
-
break;
|
136
|
-
}
|
137
|
-
}
|
138
|
-
);
|
139
|
-
|
140
|
-
let contentMarginBottom = $derived(elemLayoutBottomHeight);
|
141
|
-
|
142
|
-
let innerWidth = $state(0);
|
143
|
-
let innerHeight = $state(0);
|
144
|
-
let outerHeight = $state(0);
|
145
|
-
</script>
|
146
|
-
|
147
|
-
<svelte:window bind:innerWidth bind:innerHeight bind:outerHeight />
|
148
|
-
|
149
|
-
<div data-layout-page-bg class="fixed z-0 h-screen w-screen">
|
150
|
-
{#if bgPageSnippet}
|
151
|
-
{@render bgPageSnippet()}
|
152
|
-
{/if}
|
153
|
-
</div>
|
154
|
-
|
155
|
-
<!-- <div
|
156
|
-
data-app-layout
|
157
|
-
class="g-no-select g-no-double-tab-zoom relative z-10 mx-auto grid min-h-lvh w-full grid-cols-[1fr] place-items-stretch border-8 border-green-500"
|
158
|
-
bind:this={elemAppLayout}
|
159
|
-
> -->
|
160
|
-
<div
|
161
|
-
data-app-layout
|
162
|
-
class="g-no-select g-no-double-tab-zoom relative z-10 mx-auto min-h-svh w-full"
|
163
|
-
bind:this={elemAppLayout}
|
164
|
-
>
|
165
|
-
<!-- BG (fixed)) -->
|
166
|
-
|
167
|
-
<div
|
168
|
-
data-layout-bg
|
169
|
-
class="relative bottom-0 z-20 h-svh w-full"
|
170
|
-
style:position={elemAppLayoutWidth ? 'fixed' : 'static'}
|
171
|
-
style:width={elemAppLayoutWidth ? `${elemAppLayoutWidth}px` : 'auto'}
|
172
|
-
>
|
173
|
-
{#if bgSnippet}
|
174
|
-
{@render bgSnippet()}
|
175
|
-
{/if}
|
176
|
-
</div>
|
177
|
-
|
178
|
-
<!-- FG (top, content) -->
|
179
|
-
|
180
|
-
<div data-layout-fg class="relative z-30 flex min-h-svh w-full flex-col">
|
181
|
-
<div data-layout-top class="relative z-40 w-full">
|
182
|
-
{#if topSnippet}
|
183
|
-
{@render topSnippet()}
|
184
|
-
{/if}
|
185
|
-
</div>
|
186
|
-
|
187
|
-
<div
|
188
|
-
data-layout-content
|
189
|
-
class="relative z-40 flex w-full grow flex-col"
|
190
|
-
bind:this={elemLayoutContent}
|
191
|
-
style:margin-bottom={`${contentMarginBottom}px`}
|
192
|
-
>
|
193
|
-
<!-- <div class="border text-white">
|
194
|
-
Top height: [{elemLayoutTopHeight}]<br />
|
195
|
-
Content height: [{elemLayoutContentHeight}]<br />
|
196
|
-
Bottom height: [{elemLayoutBottomHeight}]<br />
|
197
|
-
App Layout height: [{elemAppLayoutHeight}]<br />
|
198
|
-
Content margin bottom [{contentMarginBottom}]<br />
|
199
|
-
innerWidth [{innerWidth}]<br />
|
200
|
-
innerHeight [{innerHeight}]
|
201
|
-
</div> -->
|
202
|
-
<!-- -webkit-font-smoothing: antialiased; -->
|
203
|
-
{@render children()}
|
204
|
-
</div>
|
205
|
-
</div>
|
206
|
-
|
207
|
-
<!-- Bottom (fixed) -->
|
208
|
-
|
209
|
-
<div
|
210
|
-
data-layout-bottom
|
211
|
-
bind:this={elemLayoutBottom}
|
212
|
-
class="bottom-0 z-50 mx-auto"
|
213
|
-
style:position={elemAppLayoutWidth ? 'fixed' : 'static'}
|
214
|
-
style:width={elemAppLayoutWidth ? `${elemAppLayoutWidth}px` : 'auto'}
|
215
|
-
>
|
216
|
-
{#if bottomSnippet}
|
217
|
-
{@render bottomSnippet()}
|
218
|
-
{/if}
|
219
|
-
|
220
|
-
<!-- <AppBottom
|
221
|
-
base={appTopBase}
|
222
|
-
bg={appTopBg}
|
223
|
-
padding={appTopPadding}
|
224
|
-
margin={appTopMargin}
|
225
|
-
classes={appTopClasses}
|
226
|
-
/> -->
|
227
|
-
</div>
|
228
|
-
</div>
|
229
|
-
|
230
|
-
<style>
|
231
|
-
[data-layout-page-bg] {
|
232
|
-
overflow: hidden;
|
233
|
-
}
|
234
|
-
|
235
|
-
[data-layout-bg] {
|
236
|
-
grid-area: 1 / 1 / 2 / 2; /* row-start, col-start, row-end, col-end */
|
237
|
-
overflow: hidden;
|
238
|
-
}
|
239
|
-
|
240
|
-
[data-layout-fg] {
|
241
|
-
grid-area: 1 / 1 / 2 / 2; /* row-start, col-start, row-end, col-end */
|
242
|
-
}
|
243
|
-
|
244
|
-
:global(html:not(.no-scrollbar-shift-fix)) {
|
245
|
-
/*
|
246
|
-
* Shift contents of page to the left when scrollbar appears,
|
247
|
-
* so content like tab bars stay centered
|
248
|
-
*/
|
249
|
-
padding-left: calc(100vw - 100%);
|
250
|
-
}
|
251
|
-
</style>
|
1
|
+
<script>
|
2
|
+
/**
|
3
|
+
* @example
|
4
|
+
* // file.svelte
|
5
|
+
* <script>
|
6
|
+
* import AppLayout from '.../components/layout';
|
7
|
+
* <_/script>
|
8
|
+
*
|
9
|
+
* <AppLayout>
|
10
|
+
* {#snippet bgSnippet()}
|
11
|
+
* <BgGradient />
|
12
|
+
* {/snippet}
|
13
|
+
*
|
14
|
+
* {#snippet bottomSnippet()}
|
15
|
+
* <BottomBar />
|
16
|
+
* {/snippet}
|
17
|
+
*
|
18
|
+
* Main content
|
19
|
+
*
|
20
|
+
* </AppLayout>
|
21
|
+
*/
|
22
|
+
|
23
|
+
import { useResizeObserver } from '../../util/svelte/observe/index.js';
|
24
|
+
|
25
|
+
/**
|
26
|
+
* @typedef AppLayoutProps
|
27
|
+
*
|
28
|
+
* @property {import('svelte').Snippet|undefined} [bgPageSnippet]
|
29
|
+
* @property {import('svelte').Snippet|undefined} [bgSnippet]
|
30
|
+
* @property {import('svelte').Snippet|undefined} [topSnippet]
|
31
|
+
* @property {import('svelte').Snippet|undefined} [bottomSnippet]
|
32
|
+
* @property {import('svelte').Snippet} children
|
33
|
+
*/
|
34
|
+
|
35
|
+
/** @type {AppLayoutProps} */
|
36
|
+
let {
|
37
|
+
// > Functional
|
38
|
+
|
39
|
+
/** @type {boolean} */
|
40
|
+
// hasAuth = false,
|
41
|
+
|
42
|
+
bgPageSnippet,
|
43
|
+
bgSnippet,
|
44
|
+
|
45
|
+
topSnippet,
|
46
|
+
bottomSnippet,
|
47
|
+
|
48
|
+
children
|
49
|
+
|
50
|
+
// > Style
|
51
|
+
|
52
|
+
// base = '',
|
53
|
+
// bg = '',
|
54
|
+
// classes = '',
|
55
|
+
|
56
|
+
// > Background (child) styles
|
57
|
+
|
58
|
+
// > AppTop (child) styles
|
59
|
+
|
60
|
+
// appTopBase = '',
|
61
|
+
// appTopBg = '',
|
62
|
+
// appTopPadding = '',
|
63
|
+
// appTopMargin = '',
|
64
|
+
// appTopClasses = ''
|
65
|
+
} = $props();
|
66
|
+
|
67
|
+
// setAppLayoutContext({});
|
68
|
+
|
69
|
+
// Observe AppLayoutHeight
|
70
|
+
|
71
|
+
/** @type {HTMLElement|null} */
|
72
|
+
let elemAppLayout = $state(null);
|
73
|
+
let elemAppLayoutHeight = $state(0);
|
74
|
+
let elemAppLayoutWidth = $state(0);
|
75
|
+
|
76
|
+
useResizeObserver(
|
77
|
+
() => elemAppLayout,
|
78
|
+
(entries) => {
|
79
|
+
for (const { contentRect } of entries) {
|
80
|
+
// console.log('elemLayoutHeight', entry.contentRect.height);
|
81
|
+
elemAppLayoutHeight = contentRect.height;
|
82
|
+
elemAppLayoutWidth = contentRect.width;
|
83
|
+
break;
|
84
|
+
}
|
85
|
+
}
|
86
|
+
);
|
87
|
+
|
88
|
+
// Observe layoutTopHeight
|
89
|
+
|
90
|
+
/** @type {HTMLElement|null} */
|
91
|
+
// let elemLayoutTop = $state(null);
|
92
|
+
// let elemLayoutTopHeight = $state(0);
|
93
|
+
|
94
|
+
// useResizeObserver(
|
95
|
+
// () => elemLayoutTop,
|
96
|
+
// (entries) => {
|
97
|
+
// for (const entry of entries) {
|
98
|
+
// console.log('elemLayoutTopHeight', entry.contentRect.height);
|
99
|
+
// elemLayoutTopHeight = entry.contentRect.height;
|
100
|
+
// break;
|
101
|
+
// }
|
102
|
+
// }
|
103
|
+
// );
|
104
|
+
|
105
|
+
// Observe layoutContentHeight
|
106
|
+
|
107
|
+
/** @type {HTMLElement|null} */
|
108
|
+
let elemLayoutContent = $state(null);
|
109
|
+
let elemLayoutContentHeight = $state(0);
|
110
|
+
|
111
|
+
useResizeObserver(
|
112
|
+
() => elemLayoutContent,
|
113
|
+
(entries) => {
|
114
|
+
for (const entry of entries) {
|
115
|
+
// console.log('elemLayoutHeight', entry.contentRect.height);
|
116
|
+
elemLayoutContentHeight = entry.contentRect.height;
|
117
|
+
break;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
);
|
121
|
+
|
122
|
+
// Observe layoutBottomHeight
|
123
|
+
|
124
|
+
/** @type {HTMLElement|null} */
|
125
|
+
let elemLayoutBottom = $state(null);
|
126
|
+
|
127
|
+
let elemLayoutBottomHeight = $state(0);
|
128
|
+
|
129
|
+
useResizeObserver(
|
130
|
+
() => elemLayoutBottom,
|
131
|
+
(entries) => {
|
132
|
+
for (const entry of entries) {
|
133
|
+
// console.log('elemLayoutBottomRect', entry.contentRect);
|
134
|
+
elemLayoutBottomHeight = entry.contentRect.height;
|
135
|
+
break;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
);
|
139
|
+
|
140
|
+
let contentMarginBottom = $derived(elemLayoutBottomHeight);
|
141
|
+
|
142
|
+
let innerWidth = $state(0);
|
143
|
+
let innerHeight = $state(0);
|
144
|
+
let outerHeight = $state(0);
|
145
|
+
</script>
|
146
|
+
|
147
|
+
<svelte:window bind:innerWidth bind:innerHeight bind:outerHeight />
|
148
|
+
|
149
|
+
<div data-layout-page-bg class="fixed z-0 h-screen w-screen">
|
150
|
+
{#if bgPageSnippet}
|
151
|
+
{@render bgPageSnippet()}
|
152
|
+
{/if}
|
153
|
+
</div>
|
154
|
+
|
155
|
+
<!-- <div
|
156
|
+
data-app-layout
|
157
|
+
class="g-no-select g-no-double-tab-zoom relative z-10 mx-auto grid min-h-lvh w-full grid-cols-[1fr] place-items-stretch border-8 border-green-500"
|
158
|
+
bind:this={elemAppLayout}
|
159
|
+
> -->
|
160
|
+
<div
|
161
|
+
data-app-layout
|
162
|
+
class="g-no-select g-no-double-tab-zoom relative z-10 mx-auto min-h-svh w-full"
|
163
|
+
bind:this={elemAppLayout}
|
164
|
+
>
|
165
|
+
<!-- BG (fixed)) -->
|
166
|
+
|
167
|
+
<div
|
168
|
+
data-layout-bg
|
169
|
+
class="relative bottom-0 z-20 h-svh w-full"
|
170
|
+
style:position={elemAppLayoutWidth ? 'fixed' : 'static'}
|
171
|
+
style:width={elemAppLayoutWidth ? `${elemAppLayoutWidth}px` : 'auto'}
|
172
|
+
>
|
173
|
+
{#if bgSnippet}
|
174
|
+
{@render bgSnippet()}
|
175
|
+
{/if}
|
176
|
+
</div>
|
177
|
+
|
178
|
+
<!-- FG (top, content) -->
|
179
|
+
|
180
|
+
<div data-layout-fg class="relative z-30 flex min-h-svh w-full flex-col">
|
181
|
+
<div data-layout-top class="relative z-40 w-full">
|
182
|
+
{#if topSnippet}
|
183
|
+
{@render topSnippet()}
|
184
|
+
{/if}
|
185
|
+
</div>
|
186
|
+
|
187
|
+
<div
|
188
|
+
data-layout-content
|
189
|
+
class="relative z-40 flex w-full grow flex-col"
|
190
|
+
bind:this={elemLayoutContent}
|
191
|
+
style:margin-bottom={`${contentMarginBottom}px`}
|
192
|
+
>
|
193
|
+
<!-- <div class="border text-white">
|
194
|
+
Top height: [{elemLayoutTopHeight}]<br />
|
195
|
+
Content height: [{elemLayoutContentHeight}]<br />
|
196
|
+
Bottom height: [{elemLayoutBottomHeight}]<br />
|
197
|
+
App Layout height: [{elemAppLayoutHeight}]<br />
|
198
|
+
Content margin bottom [{contentMarginBottom}]<br />
|
199
|
+
innerWidth [{innerWidth}]<br />
|
200
|
+
innerHeight [{innerHeight}]
|
201
|
+
</div> -->
|
202
|
+
<!-- -webkit-font-smoothing: antialiased; -->
|
203
|
+
{@render children()}
|
204
|
+
</div>
|
205
|
+
</div>
|
206
|
+
|
207
|
+
<!-- Bottom (fixed) -->
|
208
|
+
|
209
|
+
<div
|
210
|
+
data-layout-bottom
|
211
|
+
bind:this={elemLayoutBottom}
|
212
|
+
class="bottom-0 z-50 mx-auto"
|
213
|
+
style:position={elemAppLayoutWidth ? 'fixed' : 'static'}
|
214
|
+
style:width={elemAppLayoutWidth ? `${elemAppLayoutWidth}px` : 'auto'}
|
215
|
+
>
|
216
|
+
{#if bottomSnippet}
|
217
|
+
{@render bottomSnippet()}
|
218
|
+
{/if}
|
219
|
+
|
220
|
+
<!-- <AppBottom
|
221
|
+
base={appTopBase}
|
222
|
+
bg={appTopBg}
|
223
|
+
padding={appTopPadding}
|
224
|
+
margin={appTopMargin}
|
225
|
+
classes={appTopClasses}
|
226
|
+
/> -->
|
227
|
+
</div>
|
228
|
+
</div>
|
229
|
+
|
230
|
+
<style>
|
231
|
+
[data-layout-page-bg] {
|
232
|
+
overflow: hidden;
|
233
|
+
}
|
234
|
+
|
235
|
+
[data-layout-bg] {
|
236
|
+
grid-area: 1 / 1 / 2 / 2; /* row-start, col-start, row-end, col-end */
|
237
|
+
overflow: hidden;
|
238
|
+
}
|
239
|
+
|
240
|
+
[data-layout-fg] {
|
241
|
+
grid-area: 1 / 1 / 2 / 2; /* row-start, col-start, row-end, col-end */
|
242
|
+
}
|
243
|
+
|
244
|
+
:global(html:not(.no-scrollbar-shift-fix)) {
|
245
|
+
/*
|
246
|
+
* Shift contents of page to the left when scrollbar appears,
|
247
|
+
* so content like tab bars stay centered
|
248
|
+
*/
|
249
|
+
padding-left: calc(100vw - 100%);
|
250
|
+
}
|
251
|
+
</style>
|
@@ -1,8 +1,4 @@
|
|
1
1
|
export default HkAppLayout;
|
2
|
-
type HkAppLayout = {
|
3
|
-
$on?(type: string, callback: (e: any) => void): () => void;
|
4
|
-
$set?(props: Partial<AppLayoutProps>): void;
|
5
|
-
};
|
6
2
|
declare const HkAppLayout: import("svelte").Component<{
|
7
3
|
bgPageSnippet?: import("svelte").Snippet | undefined;
|
8
4
|
bgSnippet?: import("svelte").Snippet | undefined;
|
@@ -10,10 +6,3 @@ declare const HkAppLayout: import("svelte").Component<{
|
|
10
6
|
bottomSnippet?: import("svelte").Snippet | undefined;
|
11
7
|
children: import("svelte").Snippet;
|
12
8
|
}, {}, "">;
|
13
|
-
type AppLayoutProps = {
|
14
|
-
bgPageSnippet?: import("svelte").Snippet | undefined;
|
15
|
-
bgSnippet?: import("svelte").Snippet | undefined;
|
16
|
-
topSnippet?: import("svelte").Snippet | undefined;
|
17
|
-
bottomSnippet?: import("svelte").Snippet | undefined;
|
18
|
-
children: import("svelte").Snippet;
|
19
|
-
};
|
@@ -1,82 +1,82 @@
|
|
1
|
-
<script>
|
2
|
-
/**
|
3
|
-
* Grid Layers component
|
4
|
-
* This is a grid with only one cell. All direct children are
|
5
|
-
* place in the same cell and form a visually stacked component.
|
6
|
-
*
|
7
|
-
* This can be used to place e.g. texts over an image. Place the
|
8
|
-
* image in a layer and the text in another. The standard grid
|
9
|
-
* content placement options can be used.
|
10
|
-
*
|
11
|
-
* Following component guidelines from Skeleton
|
12
|
-
* @see https://next.skeleton.dev/docs/resources/contribute/components
|
13
|
-
*/
|
14
|
-
|
15
|
-
/**
|
16
|
-
* @type {{
|
17
|
-
* base?: string,
|
18
|
-
* bg?: string,
|
19
|
-
* padding?: string,
|
20
|
-
* margin?: string,
|
21
|
-
* height?: string,
|
22
|
-
* classes?: string,
|
23
|
-
* style?: string,
|
24
|
-
* boxBase?: string,
|
25
|
-
* boxBg?: string,
|
26
|
-
* boxPadding?: string,
|
27
|
-
* boxMargin?: string,
|
28
|
-
* boxClasses?: string,
|
29
|
-
* boxAttrs?: { [attr: string]: * },
|
30
|
-
* children: import('svelte').Snippet
|
31
|
-
* } & { [attr: string]: any }}
|
32
|
-
*/
|
33
|
-
const {
|
34
|
-
// Style
|
35
|
-
base,
|
36
|
-
bg,
|
37
|
-
padding,
|
38
|
-
margin,
|
39
|
-
height = 'h-full',
|
40
|
-
classes,
|
41
|
-
style,
|
42
|
-
boxBase,
|
43
|
-
boxBg,
|
44
|
-
boxPadding,
|
45
|
-
boxMargin,
|
46
|
-
boxClasses,
|
47
|
-
|
48
|
-
// Snippets
|
49
|
-
children,
|
50
|
-
|
51
|
-
// Attributes
|
52
|
-
...attrs
|
53
|
-
} = $props();
|
54
|
-
</script>
|
55
|
-
|
56
|
-
<div
|
57
|
-
data-hk-grid-layers-box
|
58
|
-
class="{boxBase} {boxBg} {boxPadding} {boxMargin} {boxClasses}"
|
59
|
-
{...attrs}
|
60
|
-
>
|
61
|
-
<div
|
62
|
-
data-hk-grid-layers
|
63
|
-
class="grid grid-cols-1 grid-rows-1 {base} {bg} {height} {classes} {margin} {padding}"
|
64
|
-
{style}
|
65
|
-
>
|
66
|
-
{@render children()}
|
67
|
-
</div>
|
68
|
-
</div>
|
69
|
-
|
70
|
-
<style>
|
71
|
-
[data-hk-grid-layers] > :global(.area-above) {
|
72
|
-
grid-area: 1/1/2/2;
|
73
|
-
}
|
74
|
-
|
75
|
-
[data-hk-grid-layers] > :global(*) {
|
76
|
-
grid-area: 2/1/3/2;
|
77
|
-
}
|
78
|
-
|
79
|
-
[data-hk-grid-layers] > :global(.area-below) {
|
80
|
-
grid-area: 3/1/4/2;
|
81
|
-
}
|
82
|
-
</style>
|
1
|
+
<script>
|
2
|
+
/**
|
3
|
+
* Grid Layers component
|
4
|
+
* This is a grid with only one cell. All direct children are
|
5
|
+
* place in the same cell and form a visually stacked component.
|
6
|
+
*
|
7
|
+
* This can be used to place e.g. texts over an image. Place the
|
8
|
+
* image in a layer and the text in another. The standard grid
|
9
|
+
* content placement options can be used.
|
10
|
+
*
|
11
|
+
* Following component guidelines from Skeleton
|
12
|
+
* @see https://next.skeleton.dev/docs/resources/contribute/components
|
13
|
+
*/
|
14
|
+
|
15
|
+
/**
|
16
|
+
* @type {{
|
17
|
+
* base?: string,
|
18
|
+
* bg?: string,
|
19
|
+
* padding?: string,
|
20
|
+
* margin?: string,
|
21
|
+
* height?: string,
|
22
|
+
* classes?: string,
|
23
|
+
* style?: string,
|
24
|
+
* boxBase?: string,
|
25
|
+
* boxBg?: string,
|
26
|
+
* boxPadding?: string,
|
27
|
+
* boxMargin?: string,
|
28
|
+
* boxClasses?: string,
|
29
|
+
* boxAttrs?: { [attr: string]: * },
|
30
|
+
* children: import('svelte').Snippet
|
31
|
+
* } & { [attr: string]: any }}
|
32
|
+
*/
|
33
|
+
const {
|
34
|
+
// Style
|
35
|
+
base,
|
36
|
+
bg,
|
37
|
+
padding,
|
38
|
+
margin,
|
39
|
+
height = 'h-full',
|
40
|
+
classes,
|
41
|
+
style,
|
42
|
+
boxBase,
|
43
|
+
boxBg,
|
44
|
+
boxPadding,
|
45
|
+
boxMargin,
|
46
|
+
boxClasses,
|
47
|
+
|
48
|
+
// Snippets
|
49
|
+
children,
|
50
|
+
|
51
|
+
// Attributes
|
52
|
+
...attrs
|
53
|
+
} = $props();
|
54
|
+
</script>
|
55
|
+
|
56
|
+
<div
|
57
|
+
data-hk-grid-layers-box
|
58
|
+
class="{boxBase} {boxBg} {boxPadding} {boxMargin} {boxClasses}"
|
59
|
+
{...attrs}
|
60
|
+
>
|
61
|
+
<div
|
62
|
+
data-hk-grid-layers
|
63
|
+
class="grid grid-cols-1 grid-rows-1 {base} {bg} {height} {classes} {margin} {padding}"
|
64
|
+
{style}
|
65
|
+
>
|
66
|
+
{@render children()}
|
67
|
+
</div>
|
68
|
+
</div>
|
69
|
+
|
70
|
+
<style>
|
71
|
+
[data-hk-grid-layers] > :global(.area-above) {
|
72
|
+
grid-area: 1/1/2/2;
|
73
|
+
}
|
74
|
+
|
75
|
+
[data-hk-grid-layers] > :global(*) {
|
76
|
+
grid-area: 2/1/3/2;
|
77
|
+
}
|
78
|
+
|
79
|
+
[data-hk-grid-layers] > :global(.area-below) {
|
80
|
+
grid-area: 3/1/4/2;
|
81
|
+
}
|
82
|
+
</style>
|