sveltekit-ui 1.1.16 → 1.1.18

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 (44) hide show
  1. package/dist/Components/Alert/index.svelte +88 -0
  2. package/dist/Components/Alert/index.svelte.js +101 -0
  3. package/dist/Components/Audio/index.svelte +193 -0
  4. package/dist/Components/Audio/index.svelte.js +463 -0
  5. package/dist/Components/AuthCodeInput/index.svelte +85 -0
  6. package/dist/Components/AuthCodeInput/index.svelte.js +95 -0
  7. package/dist/Components/Button/index.svelte +721 -0
  8. package/dist/Components/Button/index.svelte.js +375 -0
  9. package/dist/Components/Checkbox/index.svelte +411 -0
  10. package/dist/Components/Checkbox/index.svelte.js +178 -0
  11. package/dist/Components/Code/index.svelte +23 -0
  12. package/dist/Components/Code/index.svelte.js +33 -0
  13. package/dist/Components/EmailAddress/index.svelte +22 -0
  14. package/dist/Components/EmailAddress/index.svelte.js +45 -0
  15. package/dist/Components/Eye/index.svelte +57 -0
  16. package/dist/Components/Icon/index.svelte +412 -0
  17. package/dist/Components/Icon/index.svelte.js +116 -0
  18. package/dist/Components/InfoBox/index.svelte +89 -0
  19. package/dist/Components/Json/index.svelte +60 -0
  20. package/dist/Components/Json/index.svelte.js +594 -0
  21. package/dist/Components/Link/index.svelte +47 -0
  22. package/dist/Components/Link/index.svelte.js +136 -0
  23. package/dist/Components/LoadingSuccessDiv/index.svelte +51 -0
  24. package/dist/Components/Location/index.svelte +79 -0
  25. package/dist/Components/Location/index.svelte.js +288 -0
  26. package/dist/Components/PhoneNumber/index.svelte +22 -0
  27. package/dist/Components/PhoneNumber/index.svelte.js +41 -0
  28. package/dist/Components/Qr/index.svelte +85 -0
  29. package/dist/Components/Qr/index.svelte.js +301 -0
  30. package/dist/Components/QrInput/index.svelte +47 -0
  31. package/dist/Components/QrInput/index.svelte.js +218 -0
  32. package/dist/Components/Slider/index.svelte +239 -0
  33. package/dist/Components/Slider/index.svelte.js +469 -0
  34. package/dist/Components/SuccessCheck/index.svelte +56 -0
  35. package/dist/Components/TableAdvanced/index.svelte +275 -0
  36. package/dist/Components/TableAdvanced/index.svelte.js +1565 -0
  37. package/dist/Components/TextInput/index.svelte +223 -0
  38. package/dist/Components/TextInput/index.svelte.js +447 -0
  39. package/dist/Components/Time/index.svelte +7 -0
  40. package/dist/Components/Time/index.svelte.js +38 -0
  41. package/dist/Components/VideoTBD/index.svelte +100 -0
  42. package/dist/Components/XPost/index.svelte +52 -0
  43. package/dist/Components/XPost/index.svelte.js +64 -0
  44. package/package.json +1 -1
@@ -0,0 +1,411 @@
1
+ <script>
2
+ import LoadingWheel from "../LoadingWheel/index.svelte"
3
+ import ErrorX from "../ErrorX/index.svelte"
4
+ import Icon from "../Icon/index.svelte"
5
+ import Button from "../Button/index.svelte"
6
+
7
+ let { manager } = $props()
8
+ </script>
9
+
10
+ <div>
11
+ {#if manager?.label || manager?.error_message}
12
+ <div style="display: inline-flex;">
13
+ {#if manager?.label}
14
+ <p class="label">{manager?.label}:</p>
15
+ {/if}
16
+ {#if manager?.error_message}
17
+ <p class="error_text">{manager?.error_message}</p>
18
+ {/if}
19
+ </div>
20
+ {/if}
21
+ <div
22
+ class="container"
23
+ style="--ml: {manager?.ml}rem; --mr: {manager?.mr}rem; --mt: {manager?.mt}rem; --mb: {manager?.mb}rem; --size:{manager?.size}rem;"
24
+ >
25
+ {#if manager?.is_nullable}
26
+ <div style="min-width: 9rem;">
27
+ <Button manager={manager?.toggle_null_button_manager} />
28
+ </div>
29
+ {/if}
30
+ {#if manager?.is_nullable == false || manager?.val != null}
31
+ <label
32
+ class:checkbox_switch={manager?.type == "checkbox"}
33
+ class:toggle_switch={manager?.type == "toggle"}
34
+ class:dark_theme_switch={manager?.type == "dark_theme"}
35
+ for={manager?.id}
36
+ onpointerenter={() => manager?.handle_on_hover_change(true)}
37
+ onpointerleave={() => manager?.handle_on_hover_change(false)}
38
+ >
39
+ <input
40
+ id={manager?.id}
41
+ name={manager?.name}
42
+ required={manager?.is_required}
43
+ readonly={manager?.is_read_only}
44
+ style="min-height: {manager?.size}rem; min-width: {manager?.size}rem;"
45
+ class:dark_theme_input={manager?.type == "dark_theme"}
46
+ type="checkbox"
47
+ disabled={manager?.is_disabled}
48
+ checked={manager?.val_bool}
49
+ tabindex="0"
50
+ onkeydown={(e) => {
51
+ if (e.key === "Enter") {
52
+ manager.set_val_from_bool(!manager?.val_bool, true)
53
+ }
54
+ }}
55
+ onclick={(e) => manager?.set_val_from_bool(e?.target?.checked, true)}
56
+ />
57
+ {#if manager?.type == "checkbox"}
58
+ <span class="checkbox" style="--color: {manager?.color};" class:checkbox_is_disabled={manager?.is_disabled}>
59
+ {#if manager?.val_bool}
60
+ <Icon manager={manager?.check_icon_manager} />
61
+ {/if}
62
+ </span>
63
+ {#if manager?.is_loading}
64
+ <div class="checkbox_load">
65
+ <LoadingWheel color={manager?.val ? "var(--primary-contrast-t)" : "var(--g12-t)"} sw={0.2} />
66
+ </div>
67
+ {:else if manager?.error_message}
68
+ <div class="checkbox_icon">
69
+ <ErrorX color={manager?.val ? "var(--primary-contrast-t)" : "var(--g12-t)"} sw={50} />
70
+ </div>
71
+ {/if}
72
+ {:else if manager?.type == "toggle"}
73
+ <span
74
+ class="toggle"
75
+ style="--color: {manager?.color}; --border_color: {manager?.is_disabled
76
+ ? 'var(--g14-t)'
77
+ : manager?.val_bool
78
+ ? manager?.color
79
+ : 'var(--g11-t)'}"
80
+ class:toggle_is_disabled={manager?.is_disabled}
81
+ ></span>
82
+ {#if manager?.is_loading}
83
+ <div class="toggle_load" style="--left: {manager?.val_bool ? 1.8 : 0.4}rem;">
84
+ <LoadingWheel color="var(--g4)" sw={0.2} />
85
+ </div>
86
+ {:else if manager?.error_message}
87
+ <div class="toggle_icon" style="--left: {manager?.val_bool ? 1.6 : 0.2}rem;">
88
+ <ErrorX color="var(--g4)" sw={42} />
89
+ </div>
90
+ {/if}
91
+ {:else if manager?.type == "dark_theme"}
92
+ <span
93
+ class="dark_theme_toggle"
94
+ style="--color: {manager?.color};"
95
+ class:dark_theme_is_disabled={manager?.is_disabled}
96
+ ></span>
97
+ {#if manager?.is_loading}
98
+ <div class="dark_theme_load" style="--left: {manager?.val ? 1.8 : 0.4}rem;">
99
+ <LoadingWheel color="var(--g4)" sw={0.2} />
100
+ </div>
101
+ {:else if manager?.error_message}
102
+ <div class="dark_theme_icon" style="--left: {manager?.val ? 1.6 : 0.2}rem;">
103
+ <ErrorX color="var(--g4)" sw={42} />
104
+ </div>
105
+ {:else if manager?.val}
106
+ <div class="dark_theme_icon2" style="--left: 1.5rem;">
107
+ <Icon manager={manager?.moon_icon_manager} />
108
+ </div>
109
+ {:else}
110
+ <div class="dark_theme_icon2" style="--left: 0.5rem;">
111
+ <Icon manager={manager?.sun_icon_manager} />
112
+ </div>
113
+ {/if}
114
+ {/if}
115
+ </label>
116
+ {/if}
117
+ </div>
118
+ </div>
119
+
120
+ <style>
121
+ .label {
122
+ font-size: 1.2rem;
123
+ font-weight: 600;
124
+ color: var(--g12-t);
125
+ line-height: 1.6rem;
126
+ margin-right: 0.5rem;
127
+ }
128
+ input[type="checkbox"]:focus + .checkbox {
129
+ box-shadow:
130
+ inset 0.2rem 0.2rem 0.4rem var(--shadow2-t),
131
+ inset -0.2rem -0.2rem 0.4rem var(--shadow2-t),
132
+ inset 0 0 0 2px var(--color),
133
+ 0 0 0 1px var(--selected-t),
134
+ 0 0 0 2px var(--g1-t) !important;
135
+ }
136
+ input[type="checkbox"]:focus + .toggle {
137
+ box-shadow:
138
+ inset 0.2rem 0.2rem 0.4rem var(--shadow2-t),
139
+ inset -0.2rem -0.2rem 0.4rem var(--shadow2-t),
140
+ inset 0 0 0 1px var(--border_color),
141
+ 0 0 0 1px var(--selected-t),
142
+ 0 0 0 2px var(--g1-t) !important;
143
+ }
144
+ input[type="checkbox"]:focus + .dark_theme_toggle {
145
+ box-shadow:
146
+ inset 0.1rem 0.1rem 0.2rem var(--shadow7-t),
147
+ inset -0.1rem -0.1rem 0.2rem var(--shadow7-t),
148
+ inset 0 0 0 1px var(--g10-t),
149
+ 0 0 0 1px var(--selected-t),
150
+ 0 0 0 2px var(--g1-t) !important;
151
+ }
152
+ .error_text {
153
+ font-size: 1.2rem;
154
+ color: oklch(var(--l5-t) var(--c7) var(--h1));
155
+ line-height: 1.2rem;
156
+ line-height: 1.2rem;
157
+ }
158
+ .container {
159
+ margin-left: var(--ml);
160
+ margin-right: var(--mr);
161
+ margin-top: var(--mt);
162
+ margin-bottom: var(--mb);
163
+ display: flex;
164
+ /* padding: 0.1rem; */
165
+ }
166
+ .checkbox_switch {
167
+ position: relative;
168
+ min-width: var(--size);
169
+ max-width: var(--size);
170
+ min-height: var(--size);
171
+ max-height: var(--size);
172
+ }
173
+ .checkbox_switch input {
174
+ opacity: 0;
175
+ width: 0;
176
+ height: 0;
177
+ }
178
+ .checkbox {
179
+ position: absolute;
180
+ cursor: pointer;
181
+ top: 0;
182
+ left: 0;
183
+ right: 0;
184
+ bottom: 0;
185
+ min-width: var(--size);
186
+ max-width: var(--size);
187
+ min-height: var(--size);
188
+ max-height: var(--size);
189
+ border-radius: 0.5rem;
190
+ -webkit-transition: 0.4s;
191
+ transition: 0.4s;
192
+ background: var(--bg2);
193
+ box-shadow:
194
+ inset 0.2rem 0.2rem 0.4rem var(--shadow2-t),
195
+ inset -0.2rem -0.2rem 0.4rem var(--shadow2-t),
196
+ inset 0 0 0 2px var(--color);
197
+ display: grid;
198
+ place-items: center;
199
+ }
200
+ .checkbox:hover {
201
+ background: var(--shadow5-t);
202
+ }
203
+ input:checked + .checkbox {
204
+ background: var(--color);
205
+ }
206
+ input:checked + .checkbox_is_disabled {
207
+ background: var(--g12-t);
208
+ }
209
+ .checkbox_is_disabled {
210
+ background: var(--g12-t);
211
+ box-shadow:
212
+ inset 0.2rem 0.2rem 0.4rem var(--shadow2),
213
+ inset -0.2rem -0.2rem 0.4rem var(--shadow3),
214
+ inset 0 0 0 2px var(--g8-t) !important;
215
+ }
216
+ .checkbox_load {
217
+ position: absolute;
218
+ top: 0.5rem;
219
+ left: 0.5rem;
220
+ bottom: 0.5rem;
221
+ right: 0.5rem;
222
+ max-width: 1.5rem;
223
+ max-height: 1.5rem;
224
+ display: grid;
225
+ place-items: center;
226
+ }
227
+ .checkbox_icon {
228
+ position: absolute;
229
+ top: 0.3rem;
230
+ left: 0.3rem;
231
+ bottom: 0.3rem;
232
+ right: 0.3rem;
233
+ max-width: 2rem;
234
+ max-height: 2rem;
235
+ display: grid;
236
+ place-items: center;
237
+ }
238
+ .toggle_load {
239
+ position: absolute;
240
+ top: 0.4rem;
241
+ left: var(--left);
242
+ margin: auto;
243
+ width: 1.2rem;
244
+ height: 1.2rem;
245
+ }
246
+ .toggle_icon {
247
+ position: absolute;
248
+ top: 0.2rem;
249
+ left: var(--left);
250
+ margin: auto;
251
+ width: 1.6rem;
252
+ height: 1.6rem;
253
+ }
254
+ .toggle_switch {
255
+ position: relative;
256
+ min-width: 3.4rem;
257
+ max-width: 3.4rem;
258
+ min-height: 2rem;
259
+ max-height: 2rem;
260
+ margin-left: var(--ml);
261
+ margin-right: var(--mr);
262
+ margin-top: var(--mt);
263
+ margin-bottom: var(--mb);
264
+ }
265
+ .toggle_switch input {
266
+ opacity: 0;
267
+ }
268
+ .toggle {
269
+ position: absolute;
270
+ cursor: pointer;
271
+ top: 0;
272
+ left: 0;
273
+ right: 0;
274
+ bottom: 0;
275
+ min-width: 3.4rem;
276
+ max-width: 3.4rem;
277
+ min-height: 2rem;
278
+ max-height: 2rem;
279
+ border-radius: 1rem;
280
+ -webkit-transition: 0.4s;
281
+ transition: 0.4s;
282
+ background: var(--bg2);
283
+ box-shadow:
284
+ inset 0.2rem 0.2rem 0.4rem var(--shadow2-t),
285
+ inset -0.2rem -0.2rem 0.4rem var(--shadow2-t),
286
+ inset 0 0 0 1px var(--border_color);
287
+ }
288
+ .toggle:before {
289
+ position: absolute;
290
+ content: "";
291
+ height: 1.6rem;
292
+ width: 1.6rem;
293
+ left: 0.2rem;
294
+ bottom: 0.2rem;
295
+ border-radius: 50%;
296
+ background: linear-gradient(-45deg, var(--g24), var(--g20));
297
+ box-shadow:
298
+ 0.1rem 0.1rem 0.2rem var(--shadow3),
299
+ -0.1rem -0.1rem 0.2rem var(--shadow2);
300
+ -webkit-transition: 0.4s;
301
+ transition: 0.4s;
302
+ }
303
+ input:checked + .toggle {
304
+ background: var(--color);
305
+ }
306
+ input:checked + .toggle_is_disabled {
307
+ background: var(--g12-t);
308
+ }
309
+ input:checked + .toggle:before {
310
+ -webkit-transform: translateX(1.4rem);
311
+ -ms-transform: translateX(1.4rem);
312
+ transform: translateX(1.4rem);
313
+ }
314
+ .toggle_is_disabled:before {
315
+ background: linear-gradient(-45deg, var(--g16), var(--g16));
316
+ }
317
+
318
+ .dark_theme_input {
319
+ min-height: 2rem;
320
+ min-width: 3.4rem;
321
+ }
322
+
323
+ .dark_theme_switch {
324
+ position: relative;
325
+ min-width: 3.4rem;
326
+ max-width: 3.4rem;
327
+ min-height: 2.4rem;
328
+ max-height: 2.4rem;
329
+ margin-left: var(--ml);
330
+ margin-right: var(--mr);
331
+ margin-top: var(--mt);
332
+ margin-bottom: var(--mb);
333
+ }
334
+ .dark_theme_switch input {
335
+ opacity: 0;
336
+ width: 0;
337
+ height: 0;
338
+ }
339
+ .dark_theme_toggle {
340
+ position: absolute;
341
+ cursor: pointer;
342
+ top: 0;
343
+ left: 0;
344
+ right: 0;
345
+ bottom: 0;
346
+ min-width: 3.4rem;
347
+ max-width: 3.4rem;
348
+ min-height: 2.4rem;
349
+ max-height: 2.4rem;
350
+ border-radius: 1.2rem;
351
+ -webkit-transition: 0.4s;
352
+ transition: 0.4s;
353
+ background: var(--bg2);
354
+ overflow: hidden;
355
+ box-shadow:
356
+ inset 0.1rem 0.1rem 0.2rem var(--shadow7-t),
357
+ inset -0.1rem -0.1rem 0.2rem var(--shadow7-t),
358
+ inset 0 0 0 1px var(--g10-t);
359
+ }
360
+ .dark_theme_toggle:before {
361
+ position: absolute;
362
+ content: "";
363
+ height: 2rem;
364
+ width: 2rem;
365
+ left: 0.2rem;
366
+ bottom: 0.2rem;
367
+ border-radius: 50%;
368
+ background: linear-gradient(-45deg, var(--g24-t), var(--g22-t));
369
+ box-shadow:
370
+ 0 0 0.5rem var(--shadow8-t),
371
+ inset 0 0 0 1px var(--g16-t);
372
+ -webkit-transition: 0.4s;
373
+ transition: 0.4s;
374
+ }
375
+ input:checked + .dark_theme_is_disabled {
376
+ background: var(--g12-t);
377
+ }
378
+ input:checked + .dark_theme_toggle:before {
379
+ -webkit-transform: translateX(1rem);
380
+ -ms-transform: translateX(1rem);
381
+ transform: translateX(1rem);
382
+ }
383
+ .dark_theme_is_disabled:before {
384
+ background: linear-gradient(-45deg, var(--g16-t), var(--g16-t));
385
+ }
386
+ .dark_theme_load {
387
+ position: absolute;
388
+ top: 0.5rem;
389
+ left: var(--left);
390
+ margin: auto;
391
+ width: 1.4rem;
392
+ height: 1.4rem;
393
+ }
394
+ .dark_theme_icon {
395
+ position: absolute;
396
+ top: 0.5rem;
397
+ left: var(--left);
398
+ margin: auto;
399
+ width: 2rem;
400
+ height: 2rem;
401
+ }
402
+ .dark_theme_icon2 {
403
+ position: absolute;
404
+ top: 0.5rem;
405
+ left: var(--left);
406
+ margin: auto;
407
+ width: 1.8rem;
408
+ height: 1.8rem;
409
+ cursor: pointer;
410
+ }
411
+ </style>
@@ -0,0 +1,178 @@
1
+ import { create_unique_id, set_closurable, set_closurable_color } from "../../client/index.js"
2
+ import { create_icon_manager } from "../Icon/index.svelte.js"
3
+ import { create_button_manager } from "../Button/index.svelte.js"
4
+
5
+ export function create_checkbox_manager(config) {
6
+ let id = create_unique_id(null, 20)
7
+ let type = $derived(set_closurable(config?.type, "checkbox"))
8
+ let val_initial = $state(null)
9
+ let val = $state(null)
10
+ let val_bool = $state(false)
11
+ let label = $derived(set_closurable(config?.label, null))
12
+ let name = $derived(set_closurable(config?.name, "checkbox"))
13
+ let on_val = $derived(set_closurable(config?.on_val, true))
14
+ let off_val = $derived(set_closurable(config?.off_val, false))
15
+ let color = $derived(set_closurable_color(config?.color, "var(--primary-t)"))
16
+ let is_required = $derived(set_closurable(config?.is_required, false))
17
+ let is_read_only = $derived(set_closurable(config?.is_read_only, false))
18
+ let is_disabled = $derived(set_closurable(config?.is_disabled, false))
19
+ let is_loading = $derived(set_closurable(config?.is_loading, false))
20
+ let size = $derived(set_closurable(config?.size, 2.4))
21
+ let ml = $derived(set_closurable(config?.ml, 0))
22
+ let mr = $derived(set_closurable(config?.mr, 0))
23
+ let mt = $derived(set_closurable(config?.mt, 0))
24
+ let mb = $derived(set_closurable(config?.mb, 0))
25
+ let is_nullable = $derived(set_closurable(config?.is_nullable, false))
26
+ let error_message = $derived(set_closurable(config?.error_message, null))
27
+ let toggle_null_button_manager = $state(null)
28
+
29
+ let check_icon_manager = create_icon_manager({
30
+ icon_id: "check",
31
+ color: () => (is_disabled ? "var(--g17-t)" : "var(--primary-contrast-t)"),
32
+ size: 1.6,
33
+ sw: 75,
34
+ })
35
+
36
+ let moon_icon_manager = create_icon_manager({
37
+ icon_id: "moon",
38
+ size: 1.4,
39
+ color: "var(--g6-t)",
40
+ sw: 50,
41
+ })
42
+
43
+ let sun_icon_manager = create_icon_manager({
44
+ icon_id: "sun",
45
+ size: 1.4,
46
+ color: "var(--g6-t)",
47
+ sw: 50,
48
+ })
49
+
50
+ function set_val(val_input) {
51
+ const desired_val = val_input == on_val ? on_val : off_val
52
+ if (is_nullable && val_input == null) {
53
+ val = null
54
+ val_bool = false
55
+ } else if (val != desired_val) {
56
+ val = val_input
57
+ val_bool = val_input == on_val
58
+ }
59
+ }
60
+
61
+ function set_val_from_bool(val_bool_input, is_trigger_on_change = false) {
62
+ if (val_bool != !!val_bool_input) {
63
+ const desired_val = val_bool_input ? on_val : off_val
64
+ val = desired_val
65
+ val_bool = !!val_bool_input
66
+ if (is_trigger_on_change) {
67
+ if (config?.on_change) {
68
+ config?.on_change(desired_val)
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ function handle_on_hover_change(input) {
75
+ if (config?.on_hover_change) {
76
+ config?.on_hover_change(input)
77
+ }
78
+ }
79
+
80
+ function init(config) {
81
+ val_initial = set_closurable(config?.val) ?? null
82
+ val = set_closurable(config?.val) ?? null
83
+ val_bool = val == on_val
84
+ if (error_message) {
85
+ handle_error_trigger()
86
+ }
87
+ toggle_null_button_manager = create_button_manager({
88
+ type: "outlined",
89
+ font_size: 1.2,
90
+ min_height: 3,
91
+ is_no_wrap: true,
92
+ mr: 0.5,
93
+ text: () => (val == null ? "Select Value" : "Set Null"),
94
+ on_click: () => set_val(val == null ? true : null),
95
+ })
96
+ }
97
+
98
+ init(config)
99
+
100
+ return {
101
+ id,
102
+ get type() {
103
+ return type
104
+ },
105
+ get val_initial() {
106
+ return val_initial
107
+ },
108
+ get val() {
109
+ return val
110
+ },
111
+ get val_bool() {
112
+ return val_bool
113
+ },
114
+ get off_val() {
115
+ return off_val
116
+ },
117
+ get on_val() {
118
+ return on_val
119
+ },
120
+ get name() {
121
+ return name
122
+ },
123
+ get label() {
124
+ return label
125
+ },
126
+ get color() {
127
+ return color
128
+ },
129
+ get is_required() {
130
+ return is_required
131
+ },
132
+ get is_read_only() {
133
+ return is_read_only
134
+ },
135
+ get is_disabled() {
136
+ return is_disabled
137
+ },
138
+ get is_loading() {
139
+ return is_loading
140
+ },
141
+ get error_message() {
142
+ return error_message
143
+ },
144
+ get size() {
145
+ return size
146
+ },
147
+ get ml() {
148
+ return ml
149
+ },
150
+ get mr() {
151
+ return mr
152
+ },
153
+ get mt() {
154
+ return mt
155
+ },
156
+ get mb() {
157
+ return mb
158
+ },
159
+ get check_icon_manager() {
160
+ return check_icon_manager
161
+ },
162
+ get moon_icon_manager() {
163
+ return moon_icon_manager
164
+ },
165
+ get sun_icon_manager() {
166
+ return sun_icon_manager
167
+ },
168
+ get is_nullable() {
169
+ return is_nullable
170
+ },
171
+ get toggle_null_button_manager() {
172
+ return toggle_null_button_manager
173
+ },
174
+ set_val,
175
+ set_val_from_bool,
176
+ handle_on_hover_change,
177
+ }
178
+ }
@@ -0,0 +1,23 @@
1
+ <script>
2
+ import Button from "../Button/index.svelte"
3
+ import Audio from "../Audio/index.svelte"
4
+ import LoadingWheel from "../LoadingWheel/index.svelte"
5
+
6
+ let { manager } = $props()
7
+
8
+ // in future can figure out colors like maybe need to even call server like how images work
9
+ </script>
10
+
11
+ {#if manager?.content}
12
+ <div id={manager?.id} class="code_container">
13
+ <div class="code_top_bar">
14
+ <p>
15
+ {manager?.language ?? ""}
16
+ </p>
17
+ <Button manager={manager?.copy_button_manager} />
18
+ </div>
19
+ <pre><code id={manager?.selector_id} style="padding: .5rem 0;"
20
+ >{typeof manager?.content == "string" ? manager?.content : JSON.stringify(manager?.content, null, 2)}</code
21
+ ></pre>
22
+ </div>
23
+ {/if}
@@ -0,0 +1,33 @@
1
+ import { create_button_manager } from "../Button/index.svelte.js"
2
+ import { create_unique_id, copy_to_clipboard, set_closurable } from "../../client/index.js"
3
+
4
+ export function create_code_manager(config) {
5
+ const id = create_unique_id(null, 20)
6
+ let content = $derived(set_closurable(config?.content, null))
7
+ let copy_button_manager = $state(null)
8
+
9
+ function init() {
10
+ copy_button_manager = create_button_manager({
11
+ type: "soft",
12
+ is_uniform: true,
13
+ support_icon: "clipboard",
14
+ is_success_animation: true,
15
+ on_click: () => copy_to_clipboard(typeof content == "string" ? content : JSON.stringify(content)),
16
+ })
17
+ }
18
+
19
+ init(config)
20
+
21
+ return {
22
+ id,
23
+ get copy_button_manager() {
24
+ return copy_button_manager
25
+ },
26
+ get language() {
27
+ return config?.language
28
+ },
29
+ get content() {
30
+ return content
31
+ },
32
+ }
33
+ }
@@ -0,0 +1,22 @@
1
+ <script>
2
+ import Button from "../Button/index.svelte"
3
+
4
+ let { manager } = $props()
5
+ </script>
6
+
7
+ <div class="container">
8
+ <p class="email_field">{manager?.val}</p>
9
+ <Button manager={manager?.copy_button_manager} />
10
+ <Button manager={manager?.mail_to_button_manager} />
11
+ </div>
12
+
13
+ <style>
14
+ .container {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 0.5rem;
18
+ }
19
+ .email_field {
20
+ text-transform: lowercase;
21
+ }
22
+ </style>
@@ -0,0 +1,45 @@
1
+ import { create_button_manager } from "../Button/index.svelte.js"
2
+ import { copy_to_clipboard, set_closurable } from "../../client/index.js"
3
+
4
+ export function create_email_address_manager(config) {
5
+ let val = $derived(set_closurable(config?.val, null))
6
+
7
+ let copy_button_manager = create_button_manager({
8
+ type: "soft",
9
+ is_uniform: true,
10
+ support_icon: "copy",
11
+ icon_size: 1.5,
12
+ on_click: () => copy_to_clipboard(val),
13
+ })
14
+
15
+ let mail_to_button_manager = create_button_manager({
16
+ type: "soft",
17
+ is_uniform: true,
18
+ support_icon: "link",
19
+ icon_size: 1.5,
20
+ on_click: () => mailto(val),
21
+ })
22
+
23
+ let is_valid = $derived(
24
+ val
25
+ ? /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
26
+ val.toLowerCase()
27
+ )
28
+ : false
29
+ )
30
+
31
+ function mailto() {
32
+ window.open("mailto:" + val, "_self")
33
+ }
34
+
35
+ return {
36
+ get val() {
37
+ return val
38
+ },
39
+ get is_valid() {
40
+ return is_valid
41
+ },
42
+ copy_button_manager,
43
+ mail_to_button_manager,
44
+ }
45
+ }