@hkdigital/lib-core 0.3.11 → 0.3.13

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 (293) hide show
  1. package/README.md +173 -149
  2. package/dist/assets/autospuiten/car-paint-picker.js +41 -41
  3. package/dist/assets/autospuiten/labels.js +7 -7
  4. package/dist/classes/data/IterableTree.js +242 -242
  5. package/dist/classes/data/Selector.js +190 -190
  6. package/dist/classes/data/index.js +2 -2
  7. package/dist/classes/data/typedef.js +9 -9
  8. package/dist/classes/event-emitter/EventEmitter.js +273 -273
  9. package/dist/classes/event-emitter/index.js +2 -2
  10. package/dist/classes/index.js +4 -4
  11. package/dist/classes/promise/HkPromise.js +384 -384
  12. package/dist/classes/promise/index.js +1 -1
  13. package/dist/classes/stores/SubscribersCount.js +107 -107
  14. package/dist/classes/stores/index.js +1 -1
  15. package/dist/classes/streams/LogTransformStream.js +19 -19
  16. package/dist/classes/streams/ServerEventsStore.js +111 -111
  17. package/dist/classes/streams/TimeStampSource.js +26 -26
  18. package/dist/classes/streams/index.js +3 -3
  19. package/dist/classes/svelte/finite-state-machine/FiniteStateMachine.svelte.js +133 -133
  20. package/dist/classes/svelte/finite-state-machine/index.js +1 -1
  21. package/dist/classes/svelte/index.js +1 -11
  22. package/dist/classes/svelte/loading-state-machine/LoadingStateMachine.svelte.js +109 -109
  23. package/dist/classes/svelte/loading-state-machine/constants.js +16 -16
  24. package/dist/classes/svelte/loading-state-machine/index.js +3 -3
  25. package/dist/config/README.md +197 -196
  26. package/dist/config/generators/imagetools.js +189 -189
  27. package/dist/config/generators/vite.js +148 -142
  28. package/dist/config/imagetools.d.ts +72 -72
  29. package/dist/config/vite.js +4 -4
  30. package/dist/constants/bases/index.js +13 -13
  31. package/dist/constants/http/headers.js +6 -6
  32. package/dist/constants/http/index.js +2 -2
  33. package/dist/constants/http/methods.js +14 -14
  34. package/dist/constants/index.js +6 -6
  35. package/dist/constants/mime/application.js +5 -5
  36. package/dist/constants/mime/audio.js +13 -13
  37. package/dist/constants/mime/image.js +3 -3
  38. package/dist/constants/mime/index.js +4 -4
  39. package/dist/constants/mime/text.js +2 -2
  40. package/dist/constants/regexp/README.md +96 -95
  41. package/dist/constants/regexp/index.js +31 -31
  42. package/dist/constants/regexp/inspiratie.js__ +95 -95
  43. package/dist/constants/regexp/text.d.ts +4 -4
  44. package/dist/constants/regexp/text.js +49 -49
  45. package/dist/constants/regexp/url.js +3 -3
  46. package/dist/constants/regexp/user.js +29 -29
  47. package/dist/constants/states/drag.js +6 -6
  48. package/dist/constants/states/drop.js +6 -6
  49. package/dist/constants/states/index.js +4 -4
  50. package/dist/constants/states/input.js +11 -11
  51. package/dist/constants/states/submit.js +4 -4
  52. package/dist/constants/time/index.js +28 -28
  53. package/dist/css/utilities.css +43 -43
  54. package/dist/design/README.md +405 -405
  55. package/dist/design/config/design-config.js +73 -73
  56. package/dist/design/generators/index.js +288 -288
  57. package/dist/design/index.js +96 -96
  58. package/dist/design/plugins/skeleton.js +208 -208
  59. package/dist/design/tailwind-theme-extend.js +158 -158
  60. package/dist/design/themes/README.md +102 -102
  61. package/dist/design/themes/hkdev/components/blocks/text-block.css +34 -34
  62. package/dist/design/themes/hkdev/components/boxes/game-box.css +11 -11
  63. package/dist/design/themes/hkdev/components/buttons/button-icon-steeze.css +22 -22
  64. package/dist/design/themes/hkdev/components/buttons/button-text.css +32 -32
  65. package/dist/design/themes/hkdev/components/buttons/button.css +146 -146
  66. package/dist/design/themes/hkdev/components/buttons/skip-button.css +5 -5
  67. package/dist/design/themes/hkdev/components/drag-drop/draggable.css +73 -73
  68. package/dist/design/themes/hkdev/components/drag-drop/drop-zone.css +58 -58
  69. package/dist/design/themes/hkdev/components/icons/icon-steeze.css +15 -15
  70. package/dist/design/themes/hkdev/components/inputs/text-input.css +102 -102
  71. package/dist/design/themes/hkdev/components/panels/panel.css +25 -25
  72. package/dist/design/themes/hkdev/components/rows/panel-grid-row.css +4 -4
  73. package/dist/design/themes/hkdev/components/rows/panel-row-2.css +5 -5
  74. package/dist/design/themes/hkdev/components.css +29 -29
  75. package/dist/design/themes/hkdev/debug.css +1 -1
  76. package/dist/design/themes/hkdev/global/layout.css +32 -32
  77. package/dist/design/themes/hkdev/global/on-colors.css +32 -32
  78. package/dist/design/themes/hkdev/globals.css +3 -3
  79. package/dist/design/themes/hkdev/responsive.css +12 -12
  80. package/dist/design/themes/hkdev/theme-ext.js +12 -12
  81. package/dist/design/themes/hkdev/theme.css +218 -218
  82. package/dist/design/utils/clamp.js +66 -66
  83. package/dist/design/utils/root-vars.js +102 -102
  84. package/dist/design/utils/scaling.js +228 -228
  85. package/dist/design/utils/states.js +22 -22
  86. package/dist/errors/api.js +9 -9
  87. package/dist/errors/generic.js +20 -20
  88. package/dist/errors/http.js +16 -16
  89. package/dist/errors/index.js +5 -5
  90. package/dist/errors/jwt.js +5 -5
  91. package/dist/errors/promise.js +25 -25
  92. package/dist/logging/README.md +158 -0
  93. package/dist/logging/index.d.ts +3 -1
  94. package/dist/logging/index.js +11 -7
  95. package/dist/logging/internal/adapters/console.js +114 -114
  96. package/dist/logging/internal/adapters/index.js +2 -2
  97. package/dist/logging/internal/adapters/pino.js +160 -142
  98. package/dist/logging/internal/adapters/typedef.js +10 -10
  99. package/dist/logging/internal/{unified-logger/constants.js → constants.js} +22 -22
  100. package/dist/logging/internal/factories/client.d.ts +1 -1
  101. package/dist/logging/internal/factories/client.js +21 -21
  102. package/dist/logging/internal/factories/server.d.ts +1 -1
  103. package/dist/logging/internal/factories/server.js +22 -22
  104. package/dist/logging/internal/factories/universal.d.ts +2 -2
  105. package/dist/logging/internal/factories/universal.js +22 -22
  106. package/dist/logging/internal/{unified-logger → logger}/Logger.d.ts +2 -2
  107. package/dist/logging/internal/{unified-logger → logger}/Logger.js +217 -217
  108. package/dist/logging/internal/logger/index.d.ts +1 -0
  109. package/dist/logging/internal/logger/index.js +1 -0
  110. package/dist/logging/internal/{unified-logger/typedef.d.ts → typedef.d.ts} +2 -1
  111. package/dist/logging/internal/{unified-logger/typedef.js → typedef.js} +21 -17
  112. package/dist/network/README.md +172 -172
  113. package/dist/network/cache/IndexedDbCache.js +1407 -1407
  114. package/dist/network/cache/MemoryResponseCache.js +138 -138
  115. package/dist/network/cache/index.js +5 -5
  116. package/dist/network/cache/typedef.js +41 -41
  117. package/dist/network/cache.js +3 -3
  118. package/dist/network/http/caching.js +261 -261
  119. package/dist/network/http/errors.js +97 -97
  120. package/dist/network/http/headers.js +75 -75
  121. package/dist/network/http/http-request.js +578 -578
  122. package/dist/network/http/index.js +22 -22
  123. package/dist/network/http/json-request.js +224 -224
  124. package/dist/network/http/mocks.js +65 -65
  125. package/dist/network/http/response.js +318 -318
  126. package/dist/network/http/test-data__/content-length-test-hkdigital-small.V4HfZyBQ.avif +0 -0
  127. package/dist/network/http/typedef.js +93 -93
  128. package/dist/network/http/url.js +52 -52
  129. package/dist/network/http.js +5 -5
  130. package/dist/network/loaders/README.md +254 -254
  131. package/dist/network/loaders/audio/AudioLoader.svelte.js +58 -58
  132. package/dist/network/loaders/audio/AudioScene.svelte.js +324 -324
  133. package/dist/network/loaders/audio/mocks.js +35 -35
  134. package/dist/network/loaders/audio.js +1 -1
  135. package/dist/network/loaders/image/ImageLoader.svelte.js +44 -44
  136. package/dist/network/loaders/image/ImageScene.svelte.js +248 -248
  137. package/dist/network/loaders/image/ImageVariantsLoader.svelte.js +150 -150
  138. package/dist/network/loaders/image/index.js +4 -4
  139. package/dist/network/loaders/image/mocks.js +35 -35
  140. package/dist/network/loaders/image/typedef.js +8 -8
  141. package/dist/network/loaders/image/utils/index.js +86 -86
  142. package/dist/network/loaders/image.js +7 -7
  143. package/dist/network/loaders/typedef.js +38 -38
  144. package/dist/network/loaders.js +2 -2
  145. package/dist/network/states/NetworkLoader.svelte.js +338 -338
  146. package/dist/network/states/constants.js +3 -3
  147. package/dist/network/states/index.js +3 -3
  148. package/dist/network/states/mocks.js +30 -30
  149. package/dist/network/states/typedef.js +8 -8
  150. package/dist/network/typedef.js +9 -9
  151. package/dist/services/README.md +200 -0
  152. package/dist/services/index.d.ts +6 -1
  153. package/dist/services/index.js +8 -1
  154. package/dist/services/{internal/service-base → service-base}/ServiceBase.d.ts +2 -2
  155. package/dist/services/{internal/service-base → service-base}/ServiceBase.js +462 -462
  156. package/dist/services/{internal/service-base → service-base}/constants.d.ts +0 -12
  157. package/dist/services/{internal/service-base → service-base}/constants.js +98 -110
  158. package/dist/services/{internal/service-base → service-base}/index.js +3 -3
  159. package/dist/services/{internal/service-base → service-base}/typedef.d.ts +1 -1
  160. package/dist/services/{internal/service-base → service-base}/typedef.js +101 -101
  161. package/dist/services/{internal/service-manager → service-manager}/ServiceManager.d.ts +2 -2
  162. package/dist/services/{internal/service-manager → service-manager}/ServiceManager.js +608 -608
  163. package/dist/services/{internal/service-manager → service-manager}/constants.js +6 -6
  164. package/dist/services/{internal/service-manager → service-manager}/typedef.js +90 -90
  165. package/dist/states/index.js +1 -1
  166. package/dist/states/navigation.svelte.js +55 -55
  167. package/dist/stores/index.js +1 -1
  168. package/dist/stores/theme.js +80 -80
  169. package/dist/typedef/context.js +6 -6
  170. package/dist/typedef/drag.js +25 -25
  171. package/dist/typedef/drop.js +12 -12
  172. package/dist/typedef/index.d.ts +1 -0
  173. package/dist/typedef/index.js +4 -4
  174. package/dist/ui/components/button-group/ButtonGroup.svelte +82 -82
  175. package/dist/ui/components/button-group/typedef.js +10 -10
  176. package/dist/ui/components/compare-left-right/CompareLeftRight.svelte +179 -179
  177. package/dist/ui/components/compare-left-right/index.js +1 -1
  178. package/dist/ui/components/game-box/GameBox.svelte +577 -577
  179. package/dist/ui/components/game-box/gamebox.util.js +83 -83
  180. package/dist/ui/components/hk-app-layout/HkAppLayout.state.svelte.js +25 -25
  181. package/dist/ui/components/hk-app-layout/HkAppLayout.svelte +251 -251
  182. package/dist/ui/components/image-box/ImageBox.svelte +210 -210
  183. package/dist/ui/components/image-box/index.js +5 -5
  184. package/dist/ui/components/image-box/typedef.js +32 -32
  185. package/dist/ui/components/index.js +23 -23
  186. package/dist/ui/components/presenter/ImageSlide.svelte +64 -64
  187. package/dist/ui/components/presenter/Presenter.state.svelte.js +638 -638
  188. package/dist/ui/components/presenter/Presenter.svelte +142 -142
  189. package/dist/ui/components/presenter/constants.js +7 -7
  190. package/dist/ui/components/presenter/index.js +10 -10
  191. package/dist/ui/components/presenter/typedef.js +106 -106
  192. package/dist/ui/components/presenter/util.js +210 -210
  193. package/dist/ui/components/virtual-viewport/VirtualViewport.svelte +196 -196
  194. package/dist/ui/primitives/area/HkArea.svelte +49 -49
  195. package/dist/ui/primitives/area/HkGridArea.svelte +77 -77
  196. package/dist/ui/primitives/area/index.js +2 -2
  197. package/dist/ui/primitives/buttons/button/Button.svelte +82 -82
  198. package/dist/ui/primitives/buttons/button-icon-steeze/SteezeIconButton.svelte +30 -30
  199. package/dist/ui/primitives/buttons/button-text/TextButton.svelte +21 -21
  200. package/dist/ui/primitives/buttons/index.js +3 -3
  201. package/dist/ui/primitives/debug/debug-panel-design-scaling/DebugPanelDesignScaling.svelte +146 -146
  202. package/dist/ui/primitives/debug/index.js +1 -1
  203. package/dist/ui/primitives/drag-drop/DragController.js +44 -44
  204. package/dist/ui/primitives/drag-drop/DragDropContext.svelte +111 -111
  205. package/dist/ui/primitives/drag-drop/Draggable.svelte +519 -519
  206. package/dist/ui/primitives/drag-drop/DropZone.svelte +258 -258
  207. package/dist/ui/primitives/drag-drop/DropZoneArea.svelte +119 -119
  208. package/dist/ui/primitives/drag-drop/DropZoneList.svelte +125 -125
  209. package/dist/ui/primitives/drag-drop/actions.js +26 -26
  210. package/dist/ui/primitives/drag-drop/drag-state.svelte.js +322 -322
  211. package/dist/ui/primitives/drag-drop/index.js +7 -7
  212. package/dist/ui/primitives/drag-drop/util.js +85 -85
  213. package/dist/ui/primitives/hkdev/blocks/TextBlock.svelte +46 -46
  214. package/dist/ui/primitives/hkdev/buttons/CheckButton.svelte +62 -62
  215. package/dist/ui/primitives/icons/HkIcon.svelte +86 -86
  216. package/dist/ui/primitives/icons/HkTabIcon.svelte +116 -116
  217. package/dist/ui/primitives/icons/SteezeIcon.svelte +97 -97
  218. package/dist/ui/primitives/icons/index.js +6 -6
  219. package/dist/ui/primitives/icons/typedef.js +16 -16
  220. package/dist/ui/primitives/index.js +2 -2
  221. package/dist/ui/primitives/inputs/index.js +1 -1
  222. package/dist/ui/primitives/inputs/text-input/TestTextInput.svelte__ +102 -0
  223. package/dist/ui/primitives/inputs/text-input/TextInput.svelte +223 -223
  224. package/dist/ui/primitives/inputs/text-input/TextInput.svelte___ +83 -0
  225. package/dist/ui/primitives/inputs/text-input/assets/IconInvalid.svelte +14 -14
  226. package/dist/ui/primitives/inputs/text-input/assets/IconValid.svelte +12 -12
  227. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte +63 -63
  228. package/dist/ui/primitives/layout/grid-layers/GridLayers.svelte__heightFrom__ +372 -0
  229. package/dist/ui/primitives/layout/grid-layers/util.js +74 -74
  230. package/dist/ui/primitives/layout/index.js +1 -1
  231. package/dist/ui/primitives/panels/index.js +1 -1
  232. package/dist/ui/primitives/panels/panel/Panel.svelte +43 -43
  233. package/dist/ui/primitives/rows/index.js +3 -3
  234. package/dist/ui/primitives/rows/panel-grid-row/PanelGridRow.svelte +104 -104
  235. package/dist/ui/primitives/rows/panel-row-2/PanelRow2.svelte +40 -40
  236. package/dist/ui/primitives/tab-bar/HkTabBar.state.svelte.js +149 -149
  237. package/dist/ui/primitives/tab-bar/HkTabBar.svelte +74 -74
  238. package/dist/ui/primitives/tab-bar/HkTabBarSelector.state.svelte.js +93 -93
  239. package/dist/ui/primitives/tab-bar/HkTabBarSelector.svelte +49 -49
  240. package/dist/ui/primitives/tab-bar/index.js +17 -17
  241. package/dist/ui/primitives/tab-bar/typedef.js +11 -11
  242. package/dist/util/array/index.js +436 -436
  243. package/dist/util/bases/base58.js +262 -262
  244. package/dist/util/bases/index.js +1 -1
  245. package/dist/util/compare/index.js +247 -247
  246. package/dist/util/css/css-vars.js +83 -83
  247. package/dist/util/css/index.js +1 -1
  248. package/dist/util/env/index.js +9 -9
  249. package/dist/util/exceptions/index.d.ts +4 -3
  250. package/dist/util/exceptions/index.js +26 -23
  251. package/dist/util/expect/arrays.js +47 -47
  252. package/dist/util/expect/index.js +259 -259
  253. package/dist/util/expect/primitives.js +55 -55
  254. package/dist/util/expect/url.js +60 -60
  255. package/dist/util/function/index.js +218 -218
  256. package/dist/util/geo/index.js +26 -26
  257. package/dist/util/index.js +7 -7
  258. package/dist/util/is/index.js +147 -147
  259. package/dist/util/iterate/index.js +204 -204
  260. package/dist/util/object/index.js +1345 -1345
  261. package/dist/util/singleton/index.js +97 -97
  262. package/dist/util/string/array-path.js +75 -75
  263. package/dist/util/string/convert.js +54 -54
  264. package/dist/util/string/fs.js +226 -226
  265. package/dist/util/string/index.js +5 -5
  266. package/dist/util/string/interpolate.js +61 -61
  267. package/dist/util/string/pad.js +10 -10
  268. package/dist/util/svelte/index.js +4 -4
  269. package/dist/util/svelte/loading/loading-tracker.svelte.js +108 -108
  270. package/dist/util/svelte/observe/index.js +49 -49
  271. package/dist/util/svelte/state-context/index.js +117 -117
  272. package/dist/util/svelte/wait/index.js +38 -38
  273. package/dist/util/sveltekit/index.js +1 -1
  274. package/dist/util/sveltekit/route-folders/index.js +101 -101
  275. package/dist/util/time/index.js +328 -328
  276. package/dist/util/unique/index.js +231 -231
  277. package/dist/valibot/README.md +61 -50
  278. package/dist/valibot/index.js +8 -8
  279. package/dist/valibot/parsers/date.js__ +10 -0
  280. package/dist/valibot/parsers/email.d.ts +12 -0
  281. package/dist/valibot/parsers/email.js +34 -0
  282. package/dist/valibot/parsers/url.js +110 -110
  283. package/dist/valibot/parsers/user.js +23 -23
  284. package/dist/valibot/parsers.js +3 -3
  285. package/package.json +131 -131
  286. package/dist/logging/internal/unified-logger/index.d.ts +0 -3
  287. package/dist/logging/internal/unified-logger/index.js +0 -6
  288. package/dist/services/internal/index.d.ts +0 -6
  289. package/dist/services/internal/index.js +0 -8
  290. /package/dist/logging/internal/{unified-logger/constants.d.ts → constants.d.ts} +0 -0
  291. /package/dist/services/{internal/service-base → service-base}/index.d.ts +0 -0
  292. /package/dist/services/{internal/service-manager → service-manager}/constants.d.ts +0 -0
  293. /package/dist/services/{internal/service-manager → service-manager}/typedef.d.ts +0 -0
@@ -1,223 +1,223 @@
1
- <script>
2
- import IconValid from './assets/IconValid.svelte';
3
- import IconInvalid from './assets/IconInvalid.svelte';
4
-
5
- import { Star, ExclamationTriangle, CheckCircle } from '@steeze-ui/heroicons';
6
-
7
- import { HkIcon } from '../../icons/index.js';
8
-
9
- import {
10
- PRISTINE,
11
- DIRTY,
12
- FOCUSED,
13
- UNFOCUSED,
14
- VALID,
15
- INVALID,
16
- REQUIRED,
17
- DISABLED
18
- } from '../../../../constants/states/input.js';
19
-
20
- /**
21
- * @type {{
22
- * base?: string,
23
- * borderShape?: string,
24
- * classes?: string,
25
- * inputBase?: string,
26
- * inputClasses?: string,
27
- * legendBase?: string,
28
- * legendClasses?: string,
29
- * iconClasses?: string,
30
- * initialValue?: string,
31
- * value?: string,
32
- * type?: 'text' | 'url' | 'email' | 'number',
33
- * pattern?: string,
34
- * required?: boolean,
35
- * title?: string,
36
- * placeholder?: string,
37
- * isValid?: boolean,
38
- * isPristine?: boolean,
39
- * hasFocus?: boolean,
40
- * validate?: (value: string) => string | undefined,
41
- * iconRequired?: import('svelte').Snippet,
42
- * iconValid?: import('svelte').Snippet,
43
- * iconInvalid?: import('svelte').Snippet
44
- * } & { [attr: string]: any }}
45
- */
46
- let {
47
- initialValue = '',
48
- value = $bindable(''),
49
-
50
- isValid = $bindable(true),
51
- isPristine = $bindable(true),
52
- hasFocus = $bindable(false),
53
-
54
- // Fieldset
55
- base = 'px-10p pb-10p',
56
- borderShape = 'border-1p rounded-xs',
57
-
58
- classes = '',
59
-
60
- // Input
61
- inputBase = 'w-full outline-none border-none bg-transparent',
62
- inputClasses,
63
-
64
- // Legend
65
- legendBase,
66
- legendClasses,
67
-
68
- // Icon
69
- iconBase = 'w-[24px] h-[24px]',
70
- iconClasses = '',
71
-
72
- // Input type and built-in validation
73
-
74
- type = 'text',
75
- required = false,
76
- disabled = false,
77
-
78
- title = '',
79
- placeholder = '',
80
-
81
- // legend = 'Invalid',
82
- // legendInvalid?
83
-
84
- iconRequired,
85
- iconValid,
86
- iconInvalid,
87
-
88
- validate,
89
-
90
- ...attrs
91
- } = $props();
92
-
93
- let inputRef = $state();
94
- let validationMessage = $state('');
95
-
96
- $effect(() => {
97
- if (!inputRef) return;
98
- validateInput(inputRef, initialValue);
99
- value = initialValue;
100
- });
101
-
102
- function validateInput(input, currentValue) {
103
- input.setCustomValidity('');
104
- const isBuiltInValid = input.checkValidity();
105
-
106
- if (isBuiltInValid && validate) {
107
- const customError = validate(currentValue);
108
- input.setCustomValidity(customError || '');
109
- }
110
-
111
- isPristine = currentValue === initialValue;
112
- isValid = input.validity.valid;
113
- validationMessage = input.validationMessage;
114
- }
115
-
116
- function handleInput(event) {
117
- validateInput(event.target, event.target.value);
118
- }
119
-
120
- // let legendHeight = $state(0);
121
-
122
- // let paddingBottomStyle = $derived.by(() => {
123
- // return `padding-bottom: ${legendHeight / 2}px;`;
124
- // });
125
-
126
- let hideLegendStyle = $derived.by(() => {
127
- if (isValid && !title) {
128
- return 'width: 0;';
129
- }
130
- });
131
-
132
- let stateClasses = $derived.by(() => {
133
- //
134
- // Return CSS classes that indicate the component's state
135
- //
136
- // @see $lib/constants/states
137
- //
138
- const outArr = [];
139
-
140
- outArr.push(isPristine ? PRISTINE : DIRTY);
141
- outArr.push(hasFocus ? FOCUSED : UNFOCUSED);
142
- outArr.push(isValid ? VALID : INVALID);
143
-
144
- if (required) {
145
- outArr.push(REQUIRED);
146
- }
147
-
148
- if (disabled) {
149
- outArr.push(DISABLED);
150
- }
151
-
152
- return outArr.join(' ');
153
- });
154
- </script>
155
-
156
- <!-- {#snippet defaultWarning()}
157
- <WarningIcon />
158
- {/snippet} -->
159
-
160
- <fieldset
161
- data-input="text-input"
162
- class="{base} {borderShape} {classes} {stateClasses}"
163
- >
164
- <legend
165
- data-child="legend"
166
- class="{legendBase} {legendClasses}"
167
- style={hideLegendStyle}
168
- >
169
- {#if title}
170
- {title}
171
- <!-- {:else if !isValid}
172
- {invalidTitle} -->
173
- {:else}
174
- &nbsp;
175
- {/if}
176
- </legend>
177
-
178
- <div class="grid grid-cols-[1fr_auto] items-center">
179
- <input
180
- data-child="input"
181
- bind:this={inputRef}
182
- {type}
183
- {required}
184
- {disabled}
185
- bind:value
186
- {placeholder}
187
- class="{inputBase} {inputClasses}"
188
- aria-invalid={!isValid}
189
- aria-errormessage={!isValid ? 'validation-message' : undefined}
190
- oninput={handleInput}
191
- onfocus={() => {
192
- hasFocus = true;
193
- }}
194
- onblur={() => {
195
- hasFocus = false;
196
- }}
197
- {...attrs}
198
- />
199
-
200
- <div data-child="icon-box" class="{iconBase} {iconClasses}">
201
- {#if isPristine && required}
202
- {#if iconRequired}
203
- {@render iconRequired()}
204
- {:else}
205
- <HkIcon src={Star} theme="solid" />
206
- {/if}
207
- {:else if isValid}
208
- {#if iconValid}
209
- {@render iconValid()}
210
- {:else}
211
- <HkIcon src={CheckCircle} theme="solid" />
212
- {/if}
213
- {:else if iconInvalid}
214
- {@render iconInvalid()}
215
- {:else}
216
- <HkIcon src={ExclamationTriangle} theme="solid" />
217
- {/if}
218
- </div>
219
- </div>
220
- </fieldset>
221
-
222
- <style>
223
- </style>
1
+ <script>
2
+ import IconValid from './assets/IconValid.svelte';
3
+ import IconInvalid from './assets/IconInvalid.svelte';
4
+
5
+ import { Star, ExclamationTriangle, CheckCircle } from '@steeze-ui/heroicons';
6
+
7
+ import { HkIcon } from '../../icons/index.js';
8
+
9
+ import {
10
+ PRISTINE,
11
+ DIRTY,
12
+ FOCUSED,
13
+ UNFOCUSED,
14
+ VALID,
15
+ INVALID,
16
+ REQUIRED,
17
+ DISABLED
18
+ } from '../../../../constants/states/input.js';
19
+
20
+ /**
21
+ * @type {{
22
+ * base?: string,
23
+ * borderShape?: string,
24
+ * classes?: string,
25
+ * inputBase?: string,
26
+ * inputClasses?: string,
27
+ * legendBase?: string,
28
+ * legendClasses?: string,
29
+ * iconClasses?: string,
30
+ * initialValue?: string,
31
+ * value?: string,
32
+ * type?: 'text' | 'url' | 'email' | 'number',
33
+ * pattern?: string,
34
+ * required?: boolean,
35
+ * title?: string,
36
+ * placeholder?: string,
37
+ * isValid?: boolean,
38
+ * isPristine?: boolean,
39
+ * hasFocus?: boolean,
40
+ * validate?: (value: string) => string | undefined,
41
+ * iconRequired?: import('svelte').Snippet,
42
+ * iconValid?: import('svelte').Snippet,
43
+ * iconInvalid?: import('svelte').Snippet
44
+ * } & { [attr: string]: any }}
45
+ */
46
+ let {
47
+ initialValue = '',
48
+ value = $bindable(''),
49
+
50
+ isValid = $bindable(true),
51
+ isPristine = $bindable(true),
52
+ hasFocus = $bindable(false),
53
+
54
+ // Fieldset
55
+ base = 'px-10p pb-10p',
56
+ borderShape = 'border-1p rounded-xs',
57
+
58
+ classes = '',
59
+
60
+ // Input
61
+ inputBase = 'w-full outline-none border-none bg-transparent',
62
+ inputClasses,
63
+
64
+ // Legend
65
+ legendBase,
66
+ legendClasses,
67
+
68
+ // Icon
69
+ iconBase = 'w-[24px] h-[24px]',
70
+ iconClasses = '',
71
+
72
+ // Input type and built-in validation
73
+
74
+ type = 'text',
75
+ required = false,
76
+ disabled = false,
77
+
78
+ title = '',
79
+ placeholder = '',
80
+
81
+ // legend = 'Invalid',
82
+ // legendInvalid?
83
+
84
+ iconRequired,
85
+ iconValid,
86
+ iconInvalid,
87
+
88
+ validate,
89
+
90
+ ...attrs
91
+ } = $props();
92
+
93
+ let inputRef = $state();
94
+ let validationMessage = $state('');
95
+
96
+ $effect(() => {
97
+ if (!inputRef) return;
98
+ validateInput(inputRef, initialValue);
99
+ value = initialValue;
100
+ });
101
+
102
+ function validateInput(input, currentValue) {
103
+ input.setCustomValidity('');
104
+ const isBuiltInValid = input.checkValidity();
105
+
106
+ if (isBuiltInValid && validate) {
107
+ const customError = validate(currentValue);
108
+ input.setCustomValidity(customError || '');
109
+ }
110
+
111
+ isPristine = currentValue === initialValue;
112
+ isValid = input.validity.valid;
113
+ validationMessage = input.validationMessage;
114
+ }
115
+
116
+ function handleInput(event) {
117
+ validateInput(event.target, event.target.value);
118
+ }
119
+
120
+ // let legendHeight = $state(0);
121
+
122
+ // let paddingBottomStyle = $derived.by(() => {
123
+ // return `padding-bottom: ${legendHeight / 2}px;`;
124
+ // });
125
+
126
+ let hideLegendStyle = $derived.by(() => {
127
+ if (isValid && !title) {
128
+ return 'width: 0;';
129
+ }
130
+ });
131
+
132
+ let stateClasses = $derived.by(() => {
133
+ //
134
+ // Return CSS classes that indicate the component's state
135
+ //
136
+ // @see $lib/constants/states
137
+ //
138
+ const outArr = [];
139
+
140
+ outArr.push(isPristine ? PRISTINE : DIRTY);
141
+ outArr.push(hasFocus ? FOCUSED : UNFOCUSED);
142
+ outArr.push(isValid ? VALID : INVALID);
143
+
144
+ if (required) {
145
+ outArr.push(REQUIRED);
146
+ }
147
+
148
+ if (disabled) {
149
+ outArr.push(DISABLED);
150
+ }
151
+
152
+ return outArr.join(' ');
153
+ });
154
+ </script>
155
+
156
+ <!-- {#snippet defaultWarning()}
157
+ <WarningIcon />
158
+ {/snippet} -->
159
+
160
+ <fieldset
161
+ data-input="text-input"
162
+ class="{base} {borderShape} {classes} {stateClasses}"
163
+ >
164
+ <legend
165
+ data-child="legend"
166
+ class="{legendBase} {legendClasses}"
167
+ style={hideLegendStyle}
168
+ >
169
+ {#if title}
170
+ {title}
171
+ <!-- {:else if !isValid}
172
+ {invalidTitle} -->
173
+ {:else}
174
+ &nbsp;
175
+ {/if}
176
+ </legend>
177
+
178
+ <div class="grid grid-cols-[1fr_auto] items-center">
179
+ <input
180
+ data-child="input"
181
+ bind:this={inputRef}
182
+ {type}
183
+ {required}
184
+ {disabled}
185
+ bind:value
186
+ {placeholder}
187
+ class="{inputBase} {inputClasses}"
188
+ aria-invalid={!isValid}
189
+ aria-errormessage={!isValid ? 'validation-message' : undefined}
190
+ oninput={handleInput}
191
+ onfocus={() => {
192
+ hasFocus = true;
193
+ }}
194
+ onblur={() => {
195
+ hasFocus = false;
196
+ }}
197
+ {...attrs}
198
+ />
199
+
200
+ <div data-child="icon-box" class="{iconBase} {iconClasses}">
201
+ {#if isPristine && required}
202
+ {#if iconRequired}
203
+ {@render iconRequired()}
204
+ {:else}
205
+ <HkIcon src={Star} theme="solid" />
206
+ {/if}
207
+ {:else if isValid}
208
+ {#if iconValid}
209
+ {@render iconValid()}
210
+ {:else}
211
+ <HkIcon src={CheckCircle} theme="solid" />
212
+ {/if}
213
+ {:else if iconInvalid}
214
+ {@render iconInvalid()}
215
+ {:else}
216
+ <HkIcon src={ExclamationTriangle} theme="solid" />
217
+ {/if}
218
+ </div>
219
+ </div>
220
+ </fieldset>
221
+
222
+ <style>
223
+ </style>
@@ -0,0 +1,83 @@
1
+ <script>
2
+ /**
3
+ * @type {{
4
+ * classes?: string,
5
+ * fieldClasses?: string,
6
+ * legendClasses?: string,
7
+ * legendTitle?: string,
8
+ * error?: boolean,
9
+ * type?: string,
10
+ * placeholder: string,
11
+ * required: boolean,
12
+ * snippetWarning?: import('svelte').Snippet,
13
+ * } & { [attr: string]: any }}
14
+ */
15
+ let {
16
+ // Style
17
+ classes,
18
+ fieldClasses,
19
+ legendClasses,
20
+
21
+ // Functionality
22
+ name,
23
+ disabled,
24
+ required,
25
+
26
+ // initialValue
27
+ // value
28
+ // readonly
29
+ // pattern
30
+ // minlength
31
+ // maxlength
32
+
33
+ // Text placeholders
34
+ legendTitle,
35
+ placeholder,
36
+
37
+ type,
38
+ snippetWarning,
39
+
40
+ // Attributes
41
+ ...attrs
42
+ } = $props();
43
+ </script>
44
+
45
+ {#snippet defaultWarning()}
46
+ <svg
47
+ width="17"
48
+ height="16"
49
+ viewBox="0 0 17 16"
50
+ fill="none"
51
+ xmlns="http://www.w3.org/2000/svg"
52
+ >
53
+ <path
54
+ fill-rule="evenodd"
55
+ clip-rule="evenodd"
56
+ d="M6.36747 1.28014C7.3152 -0.426712 9.68492 -0.426712 10.6318 1.28014L16.6669 12.1596C17.6138 13.8664 16.429 16 14.5343 16H2.46497C0.570331 16 -0.613713 13.8664 0.333194 12.1596L6.36665 1.28014H6.36747ZM8.50006 5.75805C8.66328 5.75805 8.81981 5.82549 8.93522 5.94553C9.05063 6.06556 9.11547 6.22837 9.11547 6.39812V9.59846C9.11547 9.76822 9.05063 9.93102 8.93522 10.0511C8.81981 10.1711 8.66328 10.2385 8.50006 10.2385C8.33684 10.2385 8.18031 10.1711 8.0649 10.0511C7.94949 9.93102 7.88465 9.76822 7.88465 9.59846V6.39812C7.88465 6.22837 7.94949 6.06556 8.0649 5.94553C8.18031 5.82549 8.33684 5.75805 8.50006 5.75805ZM8.50006 12.7988C8.66328 12.7988 8.81981 12.7314 8.93522 12.6113C9.05063 12.4913 9.11547 12.3285 9.11547 12.1587C9.11547 11.989 9.05063 11.8262 8.93522 11.7061C8.81981 11.5861 8.66328 11.5187 8.50006 11.5187C8.33684 11.5187 8.18031 11.5861 8.0649 11.7061C7.94949 11.8262 7.88465 11.989 7.88465 12.1587C7.88465 12.3285 7.94949 12.4913 8.0649 12.6113C8.18031 12.7314 8.33684 12.7988 8.50006 12.7988Z"
57
+ fill="#F8705E"
58
+ />
59
+ </svg>
60
+ {/snippet}
61
+
62
+ <fieldset
63
+ data-input="text-input"
64
+ class="flex w-full items-center rounded {fieldClasses}"
65
+ >
66
+ <legend class="px-2 {legendClasses}" class:error>{legendTitle}</legend>
67
+ <input
68
+ class="w-full border-none bg-transparent {classes}"
69
+ {type}
70
+ {placeholder}
71
+ {name}
72
+ {required}
73
+ {...attrs}
74
+ />
75
+ {#if error}
76
+ {#if snippetWarning}
77
+ {@render snippetWarning()}
78
+ {:else}
79
+ {@render defaultWarning()}
80
+ {/if}
81
+ <!-- <img src={warningSymbol} class="mb-2 mr-8" alt="Warning" /> -->
82
+ {/if}
83
+ </fieldset>
@@ -1,14 +1,14 @@
1
- <svg
2
- width="17"
3
- height="16"
4
- viewBox="0 0 17 16"
5
- fill="none"
6
- xmlns="http://www.w3.org/2000/svg"
7
- >
8
- <path
9
- fill-rule="evenodd"
10
- clip-rule="evenodd"
11
- d="M6.36747 1.28014C7.3152 -0.426712 9.68492 -0.426712 10.6318 1.28014L16.6669 12.1596C17.6138 13.8664 16.429 16 14.5343 16H2.46497C0.570331 16 -0.613713 13.8664 0.333194 12.1596L6.36665 1.28014H6.36747ZM8.50006 5.75805C8.66328 5.75805 8.81981 5.82549 8.93522 5.94553C9.05063 6.06556 9.11547 6.22837 9.11547 6.39812V9.59846C9.11547 9.76822 9.05063 9.93102 8.93522 10.0511C8.81981 10.1711 8.66328 10.2385 8.50006 10.2385C8.33684 10.2385 8.18031 10.1711 8.0649 10.0511C7.94949 9.93102 7.88465 9.76822 7.88465 9.59846V6.39812C7.88465 6.22837 7.94949 6.06556 8.0649 5.94553C8.18031 5.82549 8.33684 5.75805 8.50006 5.75805ZM8.50006 12.7988C8.66328 12.7988 8.81981 12.7314 8.93522 12.6113C9.05063 12.4913 9.11547 12.3285 9.11547 12.1587C9.11547 11.989 9.05063 11.8262 8.93522 11.7061C8.81981 11.5861 8.66328 11.5187 8.50006 11.5187C8.33684 11.5187 8.18031 11.5861 8.0649 11.7061C7.94949 11.8262 7.88465 11.989 7.88465 12.1587C7.88465 12.3285 7.94949 12.4913 8.0649 12.6113C8.18031 12.7314 8.33684 12.7988 8.50006 12.7988Z"
12
- fill="currentColor"
13
- />
14
- </svg>
1
+ <svg
2
+ width="17"
3
+ height="16"
4
+ viewBox="0 0 17 16"
5
+ fill="none"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ >
8
+ <path
9
+ fill-rule="evenodd"
10
+ clip-rule="evenodd"
11
+ d="M6.36747 1.28014C7.3152 -0.426712 9.68492 -0.426712 10.6318 1.28014L16.6669 12.1596C17.6138 13.8664 16.429 16 14.5343 16H2.46497C0.570331 16 -0.613713 13.8664 0.333194 12.1596L6.36665 1.28014H6.36747ZM8.50006 5.75805C8.66328 5.75805 8.81981 5.82549 8.93522 5.94553C9.05063 6.06556 9.11547 6.22837 9.11547 6.39812V9.59846C9.11547 9.76822 9.05063 9.93102 8.93522 10.0511C8.81981 10.1711 8.66328 10.2385 8.50006 10.2385C8.33684 10.2385 8.18031 10.1711 8.0649 10.0511C7.94949 9.93102 7.88465 9.76822 7.88465 9.59846V6.39812C7.88465 6.22837 7.94949 6.06556 8.0649 5.94553C8.18031 5.82549 8.33684 5.75805 8.50006 5.75805ZM8.50006 12.7988C8.66328 12.7988 8.81981 12.7314 8.93522 12.6113C9.05063 12.4913 9.11547 12.3285 9.11547 12.1587C9.11547 11.989 9.05063 11.8262 8.93522 11.7061C8.81981 11.5861 8.66328 11.5187 8.50006 11.5187C8.33684 11.5187 8.18031 11.5861 8.0649 11.7061C7.94949 11.8262 7.88465 11.989 7.88465 12.1587C7.88465 12.3285 7.94949 12.4913 8.0649 12.6113C8.18031 12.7314 8.33684 12.7988 8.50006 12.7988Z"
12
+ fill="currentColor"
13
+ />
14
+ </svg>
@@ -1,12 +1,12 @@
1
- <svg
2
- xmlns="http://www.w3.org/2000/svg"
3
- viewBox="0 0 24 24"
4
- fill="currentColor"
5
- class="size-6"
6
- >
7
- <path
8
- fill-rule="evenodd"
9
- d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z"
10
- clip-rule="evenodd"
11
- />
12
- </svg>
1
+ <svg
2
+ xmlns="http://www.w3.org/2000/svg"
3
+ viewBox="0 0 24 24"
4
+ fill="currentColor"
5
+ class="size-6"
6
+ >
7
+ <path
8
+ fill-rule="evenodd"
9
+ d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z"
10
+ clip-rule="evenodd"
11
+ />
12
+ </svg>