@hkdigital/lib-sveltekit 0.1.6 → 0.1.7

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 (215) hide show
  1. package/README.md +127 -127
  2. package/dist/classes/data/IterableTree.js +243 -243
  3. package/dist/classes/data/Selector.js +190 -190
  4. package/dist/classes/data/index.js +2 -2
  5. package/dist/classes/index.js +3 -3
  6. package/dist/classes/promise/HkPromise.js +377 -377
  7. package/dist/classes/promise/index.js +1 -1
  8. package/dist/classes/stores/SubscribersCount.js +107 -107
  9. package/dist/classes/stores/index.js +1 -1
  10. package/dist/classes/streams/LogTransformStream.js +19 -19
  11. package/dist/classes/streams/ServerEventsStore.js +110 -110
  12. package/dist/classes/streams/TimeStampSource.js +26 -26
  13. package/dist/classes/streams/index.js +3 -3
  14. package/dist/classes/svelte/audio/AudioLoader.svelte.js +58 -58
  15. package/dist/classes/svelte/audio/AudioScene.svelte.js +282 -282
  16. package/dist/classes/svelte/audio/mocks.js +35 -35
  17. package/dist/classes/svelte/final-state-machine/FiniteStateMachine.svelte.js +133 -133
  18. package/dist/classes/svelte/final-state-machine/index.js +1 -1
  19. package/dist/classes/svelte/image/ImageLoader.svelte.js +47 -47
  20. package/dist/classes/svelte/image/ImageScene.svelte.js +253 -253
  21. package/dist/classes/svelte/image/ImageVariantsLoader.svelte.js +152 -152
  22. package/dist/classes/svelte/image/index.js +4 -4
  23. package/dist/classes/svelte/image/mocks.js +35 -35
  24. package/dist/classes/svelte/image/typedef.js +8 -8
  25. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  26. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  27. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  28. package/dist/classes/svelte/network-loader/NetworkLoader.svelte.js +331 -331
  29. package/dist/classes/svelte/network-loader/constants.js +3 -3
  30. package/dist/classes/svelte/network-loader/index.js +3 -3
  31. package/dist/classes/svelte/network-loader/mocks.js +30 -30
  32. package/dist/classes/svelte/network-loader/typedef.js +8 -8
  33. package/dist/components/area/HkArea.svelte +49 -49
  34. package/dist/components/area/HkArea.svelte.d.ts +14 -0
  35. package/dist/components/area/HkGridArea.svelte +77 -77
  36. package/dist/components/area/HkGridArea.svelte.d.ts +22 -0
  37. package/dist/components/area/index.js +2 -2
  38. package/dist/components/boxes/game-box/GameBox.svelte +112 -112
  39. package/dist/components/boxes/game-box/GameBox.svelte.d.ts +15 -0
  40. package/dist/components/boxes/game-box/gamebox.util.js +83 -83
  41. package/dist/components/boxes/index.js +2 -2
  42. package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte +199 -199
  43. package/dist/components/boxes/virtual-viewport/VirtualViewport.svelte.d.ts +22 -0
  44. package/dist/components/buttons/button/Button.svelte +76 -75
  45. package/dist/components/buttons/button/Button.svelte.d.ts +21 -0
  46. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -0
  47. package/dist/components/buttons/button-icon-steeze/SteezeIconButton.svelte.d.ts +16 -0
  48. package/dist/components/buttons/button-text/TextButton.svelte +21 -21
  49. package/dist/components/buttons/button-text/TextButton.svelte.d.ts +7 -0
  50. package/dist/components/buttons/index.d.ts +1 -0
  51. package/dist/components/buttons/index.js +3 -2
  52. package/dist/components/hkdev/blocks/TextBlock.svelte +46 -46
  53. package/dist/components/hkdev/blocks/TextBlock.svelte.d.ts +13 -0
  54. package/dist/components/hkdev/buttons/CheckButton.svelte +62 -62
  55. package/dist/components/hkdev/buttons/CheckButton.svelte.d.ts +18 -0
  56. package/dist/components/{icon → icons}/HkIcon.svelte +86 -86
  57. package/dist/components/icons/HkIcon.svelte.d.ts +22 -0
  58. package/dist/components/{icon → icons}/HkTabIcon.svelte +116 -116
  59. package/dist/components/icons/HkTabIcon.svelte.d.ts +40 -0
  60. package/dist/components/icons/SteezeIcon.svelte +96 -0
  61. package/dist/components/icons/SteezeIcon.svelte.d.ts +22 -0
  62. package/dist/components/{icon → icons}/index.d.ts +1 -0
  63. package/dist/components/{icon → icons}/index.js +6 -4
  64. package/dist/components/{icon → icons}/typedef.js +16 -16
  65. package/dist/components/image/ImageBox.svelte +208 -208
  66. package/dist/components/image/ImageBox.svelte.d.ts +19 -0
  67. package/dist/components/image/index.js +5 -5
  68. package/dist/components/image/typedef.js +32 -32
  69. package/dist/components/index.js +2 -2
  70. package/dist/components/inputs/index.js +1 -1
  71. package/dist/components/inputs/text-input/TestTextInput.svelte__ +102 -102
  72. package/dist/components/inputs/text-input/TextInput.svelte +226 -226
  73. package/dist/components/inputs/text-input/TextInput.svelte.d.ts +28 -0
  74. package/dist/components/inputs/text-input/TextInput.svelte___ +83 -83
  75. package/dist/components/inputs/text-input/assets/IconInvalid.svelte +14 -14
  76. package/dist/components/inputs/text-input/assets/IconValid.svelte +12 -12
  77. package/dist/components/layout/HkAppLayout.state.svelte.js +25 -25
  78. package/dist/components/layout/HkAppLayout.svelte +251 -251
  79. package/dist/components/layout/HkAppLayout.svelte.d.ts +11 -0
  80. package/dist/components/layout/HkGridLayers.svelte +82 -82
  81. package/dist/components/layout/HkGridLayers.svelte.d.ts +23 -0
  82. package/dist/components/layout/index.js +9 -9
  83. package/dist/components/panels/index.js +1 -1
  84. package/dist/components/panels/plain-panel/PlainPanel.svelte +33 -33
  85. package/dist/components/panels/plain-panel/PlainPanel.svelte.d.ts +12 -0
  86. package/dist/components/rows/index.js +3 -3
  87. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  88. package/dist/components/rows/panel-grid-row/PanelGridRow.svelte.d.ts +14 -0
  89. package/dist/components/rows/panel-row-2/PanelRow2.svelte +40 -40
  90. package/dist/components/rows/panel-row-2/PanelRow2.svelte.d.ts +14 -0
  91. package/dist/components/tab-bar/HkTabBar.state.svelte.js +149 -149
  92. package/dist/components/tab-bar/HkTabBar.svelte +74 -74
  93. package/dist/components/tab-bar/HkTabBar.svelte.d.ts +18 -0
  94. package/dist/components/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  95. package/dist/components/tab-bar/HkTabBarSelector.svelte +49 -49
  96. package/dist/components/tab-bar/HkTabBarSelector.svelte.d.ts +19 -0
  97. package/dist/components/tab-bar/index.js +17 -17
  98. package/dist/components/tab-bar/typedef.d.ts +1 -1
  99. package/dist/components/tab-bar/typedef.js +8 -8
  100. package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte +179 -179
  101. package/dist/components/widgets/compare-left-right/CompareLeftRight.svelte.d.ts +10 -0
  102. package/dist/components/widgets/compare-left-right/index.js +1 -1
  103. package/dist/components/widgets/scale-control/index.js +1 -1
  104. package/dist/config/imagetools-config.js +189 -189
  105. package/dist/config/imagetools.d.ts +71 -71
  106. package/dist/config/typedef.js +8 -8
  107. package/dist/constants/errors/api.js +9 -9
  108. package/dist/constants/errors/generic.js +5 -5
  109. package/dist/constants/errors/index.js +3 -3
  110. package/dist/constants/errors/jwt.js +5 -5
  111. package/dist/constants/http/headers.js +6 -6
  112. package/dist/constants/http/index.js +2 -2
  113. package/dist/constants/http/methods.js +2 -2
  114. package/dist/constants/index.js +3 -3
  115. package/dist/constants/mime/application.js +5 -5
  116. package/dist/constants/mime/audio.js +13 -13
  117. package/dist/constants/mime/image.js +3 -3
  118. package/dist/constants/mime/index.js +4 -4
  119. package/dist/constants/mime/text.js +2 -2
  120. package/dist/constants/regexp/index.js +31 -31
  121. package/dist/constants/regexp/inspiratie.js__ +95 -95
  122. package/dist/constants/regexp/text.js +49 -49
  123. package/dist/constants/regexp/user.js +32 -32
  124. package/dist/constants/regexp/web.js +3 -3
  125. package/dist/constants/state-labels/input-states.js +11 -11
  126. package/dist/constants/state-labels/submit-states.js +4 -4
  127. package/dist/constants/time.js +28 -28
  128. package/dist/css/tw-prose.postcss__ +259 -259
  129. package/dist/css/utilities.postcss +43 -43
  130. package/dist/design/design-config.js +73 -73
  131. package/dist/design/tailwind-theme-extend.d.ts +4 -4
  132. package/dist/design/tailwind-theme-extend.js +160 -151
  133. package/dist/schemas/index.js +1 -1
  134. package/dist/schemas/validate-url.js +180 -180
  135. package/dist/server/index.js +1 -1
  136. package/dist/server/logger.js +94 -94
  137. package/dist/states/index.js +1 -1
  138. package/dist/states/navigation.svelte.js +55 -55
  139. package/dist/stores/index.js +1 -1
  140. package/dist/stores/theme.js +80 -80
  141. package/dist/themes/hkdev/components/blocks/text-block.postcss +40 -40
  142. package/dist/themes/hkdev/components/boxes/game-box.postcss +13 -13
  143. package/dist/themes/hkdev/components/buttons/button-icon-steeze.postcss +22 -0
  144. package/dist/themes/hkdev/components/buttons/button-text.postcss +34 -34
  145. package/dist/themes/hkdev/components/buttons/button.postcss +138 -138
  146. package/dist/themes/hkdev/components/buttons/button.postcss__ +40 -0
  147. package/dist/themes/hkdev/components/buttons/button.postcss___ +91 -0
  148. package/dist/themes/hkdev/components/buttons/skip-button.postcss +8 -8
  149. package/dist/themes/hkdev/components/icons/icon-steeze.postcss +22 -0
  150. package/dist/themes/hkdev/components/inputs/text-input.postcss +108 -108
  151. package/dist/themes/hkdev/components/panels/plain-panel.postcss +46 -46
  152. package/dist/themes/hkdev/components/panels/speech-bubble.postcss +52 -52
  153. package/dist/themes/hkdev/components/rows/panel-grid-row.postcss +7 -7
  154. package/dist/themes/hkdev/components/rows/panel-row-2.postcss +9 -9
  155. package/dist/themes/hkdev/components.postcss +61 -55
  156. package/dist/themes/hkdev/debug.postcss +1 -1
  157. package/dist/themes/hkdev/global/layout.postcss +39 -39
  158. package/dist/themes/hkdev/global/on-colors.postcss +53 -53
  159. package/dist/themes/hkdev/global/text.postcss__ +34 -34
  160. package/dist/themes/hkdev/global/vars.postcss__ +7 -7
  161. package/dist/themes/hkdev/globals.postcss +11 -11
  162. package/dist/themes/hkdev/responsive.postcss +12 -12
  163. package/dist/themes/hkdev/theme-ext.js +15 -15
  164. package/dist/themes/hkdev/theme.js +227 -227
  165. package/dist/themes/index.js +1 -1
  166. package/dist/util/array/index.js +455 -455
  167. package/dist/util/compare/index.js +247 -247
  168. package/dist/util/css/css-vars.js +83 -83
  169. package/dist/util/css/index.js +1 -1
  170. package/dist/util/design-system/components/states.js +22 -22
  171. package/dist/util/design-system/css/clamp.js +66 -66
  172. package/dist/util/design-system/css/root-design-vars.js +100 -100
  173. package/dist/util/design-system/index.js +5 -5
  174. package/dist/util/design-system/layout/scaling.js +97 -97
  175. package/dist/util/design-system/tailwind.js +289 -289
  176. package/dist/util/expect/arrays.js +47 -47
  177. package/dist/util/expect/index.js +259 -259
  178. package/dist/util/expect/primitives.js +55 -55
  179. package/dist/util/expect/url.js +60 -60
  180. package/dist/util/function/index.js +218 -218
  181. package/dist/util/http/errors.js +97 -97
  182. package/dist/util/http/headers.js +45 -45
  183. package/dist/util/http/http-request.js +273 -273
  184. package/dist/util/http/index.js +22 -22
  185. package/dist/util/http/json-request.js +143 -143
  186. package/dist/util/http/mocks.js +65 -65
  187. package/dist/util/http/response.js +228 -228
  188. package/dist/util/http/url.js +52 -52
  189. package/dist/util/image/index.js +86 -86
  190. package/dist/util/index.js +2 -2
  191. package/dist/util/is/index.js +140 -140
  192. package/dist/util/iterate/index.js +234 -234
  193. package/dist/util/object/index.js +1361 -1361
  194. package/dist/util/singleton/index.js +97 -97
  195. package/dist/util/string/index.js +184 -184
  196. package/dist/util/svelte/index.js +2 -2
  197. package/dist/util/svelte/observe/index.js +49 -49
  198. package/dist/util/svelte/state-context/index.js +83 -83
  199. package/dist/util/svelte/wait/index.js +38 -38
  200. package/dist/util/sveltekit/index.js +1 -1
  201. package/dist/util/sveltekit/route-folders/index.js +82 -82
  202. package/dist/util/time/index.js +339 -339
  203. package/dist/valibot/date.js__ +10 -10
  204. package/dist/valibot/index.js +9 -9
  205. package/dist/valibot/url.js +95 -95
  206. package/dist/valibot/user.js +23 -23
  207. package/dist/zod/all.js +33 -33
  208. package/dist/zod/generic.js +11 -11
  209. package/dist/zod/javascript.js +32 -32
  210. package/dist/zod/user.js +16 -16
  211. package/dist/zod/web.js +52 -52
  212. package/package.json +99 -99
  213. package/dist/components/icon/HkIcon.svelte.d.ts +0 -10
  214. package/dist/components/icon/HkTabIcon.svelte.d.ts +0 -19
  215. /package/dist/components/{icon → icons}/typedef.d.ts +0 -0
@@ -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,4 +1,8 @@
1
1
  export default HkAppLayout;
2
+ type HkAppLayout = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<AppLayoutProps>): void;
5
+ };
2
6
  declare const HkAppLayout: import("svelte").Component<{
3
7
  bgPageSnippet?: import("svelte").Snippet | undefined;
4
8
  bgSnippet?: import("svelte").Snippet | undefined;
@@ -6,3 +10,10 @@ declare const HkAppLayout: import("svelte").Component<{
6
10
  bottomSnippet?: import("svelte").Snippet | undefined;
7
11
  children: import("svelte").Snippet;
8
12
  }, {}, "">;
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>