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,239 @@
1
+ <script>
2
+ import LoadingWheel from "../LoadingWheel/index.svelte"
3
+ import ErrorX from "../ErrorX/index.svelte"
4
+ import { intersection_observer } from "../../actions/index.js"
5
+ import Button from "../Button/index.svelte"
6
+
7
+ let { manager } = $props()
8
+ </script>
9
+
10
+ <svelte:document
11
+ onpointerup={(e) => manager?.handle_pointer_up(manager?.id, e)}
12
+ onpointermove={(e) => manager?.handle_pointer_move(manager?.id, e)}
13
+ />
14
+
15
+ <div use:intersection_observer onappeared={() => manager?.set_thumbs()}>
16
+ <div>
17
+ {#if manager?.label || manager?.error_message}
18
+ <div style="display: inline-flex;">
19
+ {#if manager?.label}
20
+ <label style="--label_font_size: {manager?.label_font_size}rem;" for={manager?.id}>{manager?.label}:</label>
21
+ {/if}
22
+ {#if manager?.error_message}
23
+ <p class="error_text">{manager?.error_message}</p>
24
+ {/if}
25
+ </div>
26
+ {/if}
27
+ <div
28
+ id={`container_${manager?.id}`}
29
+ class="container"
30
+ style="--ml: {manager?.ml}rem; --mr: {manager?.mr}rem; --mt: {manager?.mt}rem; --mb: {manager?.mb}rem;"
31
+ >
32
+ {#if manager?.is_nullable}
33
+ <div style="min-width: 9rem;">
34
+ <Button manager={manager?.toggle_null_button_manager} />
35
+ </div>
36
+ {/if}
37
+ <div
38
+ id={`slider_${manager?.id}`}
39
+ class="slider_box"
40
+ class:is_extra_padding={manager?.is_short}
41
+ style="--h: {manager?.base_height}rem; --thumb_height: {manager?.is_short
42
+ ? 1.8
43
+ : manager?.base_height - 0.4}rem; --thumb_mt: {manager?.is_short
44
+ ? -0.5
45
+ : 0.2}rem; --thumb_mx: {manager?.is_short ? 0.2 : 0}rem;"
46
+ >
47
+ {#if Array.isArray(manager?.working_val) && manager?.working_val.length > 0}
48
+ <div
49
+ id={`thumb_bg_${manager?.id}`}
50
+ class="slider_highlight_bg"
51
+ class:slider_highlight_bg_disabled={manager?.is_disabled}
52
+ style="margin-left: {manager?.slider_highlight_ml}; width: {manager?.slider_highlight_bg_width}; --color: {manager?.color}"
53
+ ></div>
54
+ <div style="display: flex; flex: 1; min-height: 100%; width: 100%; border-radius: .5rem; overflow: hidden;">
55
+ <div
56
+ style="min-height: 100%; background-color: var(--shadow1-t); margin-left: {manager?.highlight_range_start_percent}%; width: {manager?.highlight_range_width_percent}%;"
57
+ ></div>
58
+ </div>
59
+ {#each manager?.working_val as thumb, i}
60
+ <div
61
+ id={`thumb_${i}_${manager?.id}`}
62
+ role="button"
63
+ tabindex="0"
64
+ class="thumb"
65
+ class:thumb_hovered={manager?.hovered_i == i || manager?.selected_i == i}
66
+ class:thumb_dark_bg={manager?.is_short}
67
+ class:thumb_disabled={manager?.is_disabled || manager?.loading_i == i}
68
+ class:display_none={thumb == null}
69
+ style="--color: {manager?.color}"
70
+ onkeydown={(e) => manager?.handle_thumb_keydown(i, e?.key)}
71
+ onfocus={() => manager?.handle_focus(i)}
72
+ onblur={() => manager?.handle_blur(i)}
73
+ >
74
+ <div
75
+ id={`thumb_dot_${i}_${manager?.id}`}
76
+ class="thumb_dot"
77
+ class:thumb_dot_disabled={manager?.is_disabled || manager?.loading_i == i}
78
+ style="--font_size: {manager?.font_size}rem;"
79
+ ></div>
80
+ {#if manager?.loading_i == i}
81
+ <div class="thumb_float_icon">
82
+ <LoadingWheel color={manager?.is_short ? "var(--g4)" : "var(--g3)"} sw={0.2} />
83
+ </div>
84
+ {:else if manager?.manager?.loading_i == i}
85
+ <div class="thumb_float_icon">
86
+ <ErrorX color={manager?.is_short ? "var(--g4)" : "var(--g3)"} sw={42} />
87
+ </div>
88
+ {/if}
89
+ </div>
90
+ {/each}
91
+ <input
92
+ id={`input_${manager?.id}`}
93
+ type="range"
94
+ tabindex="-1"
95
+ name={manager?.name}
96
+ required={manager?.is_required}
97
+ readonly={manager?.is_read_only}
98
+ onpointerdown={(e) => manager?.handle_pointer_down(e)}
99
+ onpointerenter={(e) => manager?.handle_pointer_enter(e)}
100
+ onpointerleave={(e) => manager?.handle_pointer_leave(e)}
101
+ class="slider"
102
+ disabled={manager?.is_disabled || manager?.loading_id}
103
+ min={manager?.min}
104
+ max={manager?.max}
105
+ step={manager?.step}
106
+ />
107
+ {/if}
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </div>
112
+
113
+ <style>
114
+ .container {
115
+ margin: var(--mt) var(--mr) var(--mb) var(--ml);
116
+ display: flex;
117
+ flex: 1;
118
+ padding: 0;
119
+ }
120
+ .slider_box {
121
+ overscroll-behavior: contain;
122
+ -webkit-user-select: none;
123
+ user-select: none;
124
+ -webkit-tap-highlight-color: transparent;
125
+ margin: 0.1rem;
126
+ width: 100%;
127
+ height: var(--h);
128
+ position: relative;
129
+ display: flex;
130
+ border-radius: 2rem;
131
+ background: var(--bg2);
132
+ box-shadow: 0 0 0 1px var(--shadow7-t);
133
+ -webkit-box-shadow: 0 0 0 1px var(--shadow7-t);
134
+ }
135
+ .is_extra_padding {
136
+ margin: 0.5rem 0;
137
+ }
138
+ .slider_highlight_bg {
139
+ position: absolute;
140
+ display: flex;
141
+ height: 100%;
142
+ border-radius: 2rem;
143
+ overflow: hidden;
144
+ background: var(--color);
145
+ box-shadow:
146
+ inset 0.1rem 0.1rem 0.2rem var(--tint2-t),
147
+ inset -0.1rem -0.1rem 0.2rem var(--shadow2-t);
148
+ }
149
+ .slider_highlight_bg_disabled {
150
+ background: var(--g12-t);
151
+ }
152
+ .slider {
153
+ appearance: none;
154
+ -webkit-appearance: none;
155
+ position: absolute;
156
+ display: flex;
157
+ background: none;
158
+ outline: none;
159
+ width: 100%;
160
+ margin: 0;
161
+ }
162
+ .slider::-webkit-slider-thumb {
163
+ -webkit-appearance: none;
164
+ -moz-appearance: none;
165
+ appearance: none;
166
+ background: none;
167
+ opacity: 0;
168
+ box-shadow: transparent;
169
+ outline: none;
170
+ height: var(--thumb_height);
171
+ width: var(--thumb_height);
172
+ margin-top: var(--thumb_mt);
173
+ cursor: pointer;
174
+ }
175
+ .slider::-webkit-slider-thumb:hover {
176
+ height: var(--thumb_height);
177
+ width: var(--thumb_height);
178
+ margin-top: var(--thumb_mt);
179
+ }
180
+ .thumb {
181
+ position: absolute;
182
+ height: var(--thumb_height);
183
+ width: var(--thumb_height);
184
+ margin-top: var(--thumb_mt);
185
+ margin-left: var(--thumb_mx);
186
+ margin-right: var(--thumb_mx);
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: center;
190
+ border-radius: 50%;
191
+ transform: translateX(-50%);
192
+ cursor: pointer;
193
+ user-select: none;
194
+ background: linear-gradient(-45deg, var(--g24), var(--g20));
195
+ box-shadow: 0 0 0.4rem 0.1rem var(--shadow8);
196
+ transition: box-shadow 0.3s;
197
+ touch-action: none;
198
+ -webkit-user-select: none;
199
+ user-select: none;
200
+ }
201
+ .thumb_hovered {
202
+ box-shadow:
203
+ 0 0 0.4rem 0.1rem var(--shadow8),
204
+ 0 0 0 0.7rem var(--shadow8-t);
205
+ }
206
+ .thumb_dot {
207
+ font-size: var(--font_size);
208
+ color: var(--g2);
209
+ }
210
+ .thumb_dark_bg {
211
+ background: linear-gradient(-45deg, color-mix(in oklab, var(--primary-t), var(--g6) 20%), var(--primary-t));
212
+ }
213
+ .thumb_disabled {
214
+ background: linear-gradient(-45deg, var(--g20), var(--g18));
215
+ }
216
+ .thumb_dot_disabled {
217
+ color: var(--g13);
218
+ }
219
+ .thumb_float_icon {
220
+ position: absolute;
221
+ left: 0;
222
+ right: 0;
223
+ top: 0;
224
+ bottom: 0;
225
+ padding: 0.3rem;
226
+ display: grid;
227
+ place-items: center;
228
+ }
229
+ .display_none {
230
+ display: none;
231
+ }
232
+ label {
233
+ font-size: var(--label_font_size);
234
+ font-weight: 600;
235
+ color: var(--g12-t);
236
+ line-height: 1.6rem;
237
+ margin-right: 0.5rem;
238
+ }
239
+ </style>
@@ -0,0 +1,469 @@
1
+ import { create_unique_id, deep_copy, set_closurable, set_closurable_color, color_to_css } from "../../client/index.js"
2
+ import { create_button_manager } from "../Button/index.svelte.js"
3
+
4
+ export function create_slider_manager(config) {
5
+ const id = create_unique_id(null, 20)
6
+
7
+ let min = $state(null)
8
+ let max = $state(null)
9
+ let step = $state(null)
10
+ let hovered_i = $state(null)
11
+ let selected_i = $state(null)
12
+ let loading_i = $state(null)
13
+ let error_i = $state(null)
14
+ let val = $state(null)
15
+ let working_val = $state(null)
16
+ let active_i = $state(null)
17
+ let slider_highlight_bg_width = $state(50)
18
+ let slider_highlight_ml = $state(0)
19
+ let left = $state(0)
20
+ let is_slider_hovered = $state(false)
21
+ let is_pointer_down = $state(false)
22
+ let closest_i_at_drag_start = $state(0)
23
+ let toggle_null_button_manager = $state(null)
24
+
25
+ let label = $derived(set_closurable(config?.label, null))
26
+ let name = $derived(set_closurable(config?.name, "slider"))
27
+ let label_font_size = $derived(set_closurable(config?.label_font_size, 1.2))
28
+ let is_required = $derived(set_closurable(config?.is_required, false))
29
+ let is_read_only = $derived(set_closurable(config?.is_read_only, false))
30
+ let font_size = $derived(set_closurable(config?.font_size, 1))
31
+ let is_disabled = $derived(set_closurable(config?.is_disabled || val == null, false))
32
+ let is_nullable = $derived(set_closurable(config?.is_nullable, false))
33
+ let color = $derived(set_closurable_color(config?.color, "var(--primary-t)", true))
34
+ let is_short = $derived(set_closurable(config?.is_short, false))
35
+ let is_show_text = $derived(set_closurable(config?.is_show_text, true))
36
+ let ml = $derived(set_closurable(config?.ml, 0))
37
+ let mr = $derived(set_closurable(config?.mr, 0))
38
+ let mt = $derived(set_closurable(config?.mt, 0))
39
+ let mb = $derived(set_closurable(config?.mb, 0))
40
+ let highlight_range_start_percent = $derived(set_closurable(config?.highlight_range_start_percent, 0))
41
+ let highlight_range_end_percent = $derived(set_closurable(config?.highlight_range_end_percent, 0))
42
+ let highlight_range_width_percent = $derived(highlight_range_end_percent - highlight_range_start_percent)
43
+ let base_height = $derived(is_short ? 0.8 : 2.8)
44
+
45
+ function get_e_percentage(e) {
46
+ if (e) {
47
+ let slider_el = document?.querySelector(`#slider_${id}`)
48
+ const slider_rect = slider_el.getBoundingClientRect()
49
+ const pointer_position = e.clientX
50
+ const slider_start = slider_rect.left
51
+ const slider_width = slider_rect.width
52
+ const pointer_offset = pointer_position - slider_start
53
+ const percent_decimal = pointer_offset / slider_width
54
+ return percent_decimal
55
+ }
56
+ }
57
+
58
+ function clean_val(input, is_from_percent_decimal = false) {
59
+ let new_val = null
60
+ if (is_from_percent_decimal) {
61
+ new_val = input * (max - min) + min
62
+ } else {
63
+ new_val = input
64
+ }
65
+ if (step > 0) {
66
+ new_val = Math.round(new_val / step) * step
67
+ const step_decimal_places = (step.toString().split(".")[1] || "").length
68
+ new_val = parseFloat(new_val.toFixed(step_decimal_places))
69
+ }
70
+ return Math.max(min, Math.min(max, new_val))
71
+ }
72
+
73
+ function set_hover(e) {
74
+ const percent_decimal = get_e_percentage(e)
75
+ if (Array.isArray(working_val) && working_val.length > 0) {
76
+ const percentage_decimals = working_val.map((h) => (h - min) / (max - min))
77
+ const closest_i = percentage_decimals.reduce((closest_index, current, index, array) => {
78
+ return Math.abs(current - percent_decimal) < Math.abs(array[closest_index] - percent_decimal)
79
+ ? index
80
+ : closest_index
81
+ }, 0)
82
+ if (Math.abs(percent_decimal - percentage_decimals?.[closest_i]) < 0.1) {
83
+ hovered_i = closest_i
84
+ } else {
85
+ hovered_i = null
86
+ }
87
+ }
88
+ }
89
+
90
+ function handle_pointer_enter(e) {
91
+ is_slider_hovered = true
92
+ set_hover(e)
93
+ }
94
+
95
+ function handle_pointer_leave(e) {
96
+ is_slider_hovered = false
97
+ hovered_i = null
98
+ }
99
+
100
+ function handle_pointer_down(e) {
101
+ is_pointer_down = true
102
+ if (e) {
103
+ e.preventDefault()
104
+ e.stopPropagation()
105
+ const percent_decimal = get_e_percentage(e)
106
+ if (Array.isArray(working_val) && working_val.length > 0) {
107
+ const percentage_decimals = working_val.map((h) => (h - min) / (max - min))
108
+ closest_i_at_drag_start = percentage_decimals.reduce((closest_index, current, index, array) => {
109
+ return Math.abs(current - percent_decimal) < Math.abs(array[closest_index] - percent_decimal)
110
+ ? index
111
+ : closest_index
112
+ }, 0)
113
+ selected_i = closest_i_at_drag_start
114
+ const new_val = clean_val(percent_decimal, true)
115
+ let working_val_loc = deep_copy(working_val)
116
+ working_val_loc[closest_i_at_drag_start] = new_val
117
+ working_val = deep_copy(working_val_loc)
118
+ if (Array.isArray(working_val) && working_val.length > 1) {
119
+ let val_loc = deep_copy(val)
120
+ val_loc[closest_i_at_drag_start] = new_val
121
+ val = deep_copy(val_loc)
122
+ } else {
123
+ val = deep_copy(new_val)
124
+ }
125
+ set_thumb(closest_i_at_drag_start)
126
+ const event_val =
127
+ Array.isArray(working_val) && working_val.length > 1
128
+ ? {
129
+ index: closest_i_at_drag_start,
130
+ val: working_val?.[closest_i_at_drag_start],
131
+ }
132
+ : working_val?.[closest_i_at_drag_start]
133
+ if (config?.on_down) {
134
+ config?.on_down(event_val)
135
+ }
136
+ if (config?.on_change) {
137
+ config?.on_change(event_val)
138
+ }
139
+ } else {
140
+ closest_i_at_drag_start = 0
141
+ }
142
+ let thumb_el = document?.querySelector(`#thumb_${closest_i_at_drag_start}_${id}`)
143
+ if (thumb_el) {
144
+ thumb_el.focus()
145
+ }
146
+ }
147
+ }
148
+
149
+ function handle_pointer_up(id_input, e) {
150
+ if (e && id_input == id && is_pointer_down) {
151
+ e.preventDefault()
152
+ selected_i = null
153
+ const event_val =
154
+ Array.isArray(working_val) && working_val.length > 1
155
+ ? {
156
+ index: closest_i_at_drag_start,
157
+ val: working_val?.[closest_i_at_drag_start],
158
+ }
159
+ : working_val?.[closest_i_at_drag_start]
160
+ if (config?.on_up) {
161
+ config?.on_up(event_val)
162
+ }
163
+ }
164
+ is_pointer_down = false
165
+ closest_i_at_drag_start = 0
166
+ }
167
+
168
+ function handle_pointer_move(id_input, e) {
169
+ if (e && id_input == id) {
170
+ e.preventDefault()
171
+ if (is_slider_hovered) {
172
+ set_hover(e)
173
+ }
174
+ if (is_pointer_down) {
175
+ const percent_decimal = get_e_percentage(e)
176
+ const new_val = clean_val(percent_decimal, true)
177
+ let working_val_loc = deep_copy(working_val)
178
+ working_val_loc[closest_i_at_drag_start] = new_val
179
+ working_val = deep_copy(working_val_loc)
180
+ if (Array.isArray(working_val) && working_val.length > 1) {
181
+ let val_loc = deep_copy(val)
182
+ val_loc[closest_i_at_drag_start] = new_val
183
+ val = deep_copy(val_loc)
184
+ } else {
185
+ val = deep_copy(new_val)
186
+ }
187
+ set_thumb(closest_i_at_drag_start)
188
+ if (config?.on_change) {
189
+ config?.on_change(
190
+ Array.isArray(working_val) && working_val.length > 1
191
+ ? {
192
+ index: closest_i_at_drag_start,
193
+ val: new_val,
194
+ }
195
+ : new_val
196
+ )
197
+ }
198
+ }
199
+ }
200
+ }
201
+
202
+ function handle_focus(i) {
203
+ selected_i = i
204
+ }
205
+
206
+ function handle_blur(i) {
207
+ if (selected_i == i) {
208
+ selected_i = null
209
+ }
210
+ }
211
+
212
+ function handle_thumb_keydown(i, key) {
213
+ if (loading_i != null || is_disabled) {
214
+ return
215
+ }
216
+ if (key == "ArrowLeft") {
217
+ working_val[i] = deep_copy(clean_val(working_val[i] - step))
218
+ } else if (key == "ArrowRight") {
219
+ working_val[i] = deep_copy(clean_val(working_val[i] + step))
220
+ }
221
+ if (Array.isArray(working_val) && working_val.length > 1) {
222
+ val[i] = deep_copy(working_val[i])
223
+ } else {
224
+ val = deep_copy(working_val[i])
225
+ }
226
+ const event_val = deep_copy(
227
+ Array.isArray(working_val) && working_val.length > 1
228
+ ? {
229
+ index: i,
230
+ val: working_val[i],
231
+ }
232
+ : working_val[i]
233
+ )
234
+ set_thumbs()
235
+ if (config?.on_change) {
236
+ config?.on_change(event_val)
237
+ }
238
+ if (config?.on_up) {
239
+ config?.on_up(event_val)
240
+ }
241
+ }
242
+
243
+ function set_thumbs() {
244
+ setTimeout(() => {
245
+ let container_el = typeof document !== "undefined" ? document?.querySelector(`#container_${id}`) : null
246
+ if (container_el) {
247
+ if (Array.isArray(working_val) && working_val.length > 0) {
248
+ for (let i = 0; i < working_val.length; i++) {
249
+ set_thumb(i)
250
+ }
251
+ }
252
+ }
253
+ }, 10)
254
+ }
255
+
256
+ function set_thumb(i = 0) {
257
+ const val_percent_decimal = Number((working_val?.[i] - min) / (max - min))
258
+ left = `calc(${val_percent_decimal * 100}% + (${
259
+ base_height * 5 - val_percent_decimal * base_height * (is_short ? 16 : 10)
260
+ }px))`
261
+ const short_val = typeof working_val?.[i] == "number" ? working_val?.[i].toString().replace("0.", ".") : ""
262
+ let thumb_el = document?.querySelector(`#thumb_${i}_${id}`)
263
+ if (thumb_el) {
264
+ thumb_el.style.left = left
265
+ }
266
+ let thumb_dot_el = document?.querySelector(`#thumb_dot_${i}_${id}`)
267
+ if (thumb_dot_el) {
268
+ if (!is_short && is_show_text) {
269
+ thumb_dot_el.innerHTML = short_val
270
+ }
271
+ if (error_i != null || is_short) {
272
+ thumb_dot_el.innerHTML = ""
273
+ }
274
+ }
275
+ let slider_el = document?.querySelector(`#slider_${id}`)
276
+ if (!slider_el) {
277
+ return
278
+ }
279
+ const slider_rect = slider_el.getBoundingClientRect()
280
+ const slider_width = slider_rect.width
281
+ if (Array.isArray(working_val) && working_val.length > 1) {
282
+ const working_val_high = Math.max(...working_val)
283
+ const working_val_low = Math.min(...working_val)
284
+ const percent_decimal_filled = (working_val_high - working_val_low) / (max - min)
285
+ const percent_decimal_left = (working_val_low - min) / (max - min)
286
+ const width_num = base_height * (1 - percent_decimal_filled) + (slider_width / 10) * percent_decimal_filled
287
+ slider_highlight_bg_width = `${(width_num / slider_width) * 1000}%`
288
+ const left_num =
289
+ base_height * (1 - percent_decimal_left) - base_height + (slider_width / 10) * percent_decimal_left
290
+ slider_highlight_ml = `${(left_num / slider_width) * 1000}%`
291
+ } else {
292
+ const width_num = base_height * (1 - val_percent_decimal) + (slider_width / 10) * val_percent_decimal
293
+ slider_highlight_bg_width = `${(width_num / slider_width) * 1000}%`
294
+ slider_highlight_ml = 0
295
+ }
296
+ }
297
+
298
+ function set_val(input) {
299
+ val = deep_copy(input)
300
+ working_val = deep_copy(Array.isArray(val) ? val : [val])
301
+ set_thumbs()
302
+ }
303
+
304
+ function set_loading_i(input) {
305
+ loading_i = deep_copy(input)
306
+ }
307
+
308
+ function set_hovered_i(input) {
309
+ hovered_i = deep_copy(input)
310
+ }
311
+
312
+ function set_error_i(input) {
313
+ error_i = deep_copy(input)
314
+ }
315
+
316
+ function set_min(input) {
317
+ min = deep_copy(input)
318
+ }
319
+ function set_max(input) {
320
+ max = deep_copy(input)
321
+ }
322
+ function set_step(input) {
323
+ step = deep_copy(input)
324
+ }
325
+
326
+ function init(config) {
327
+ const deep_copy_config = deep_copy(config)
328
+ min = deep_copy_config?.min ?? 0
329
+ max = deep_copy_config?.max ?? 2
330
+ step = deep_copy_config?.step ?? 0.01
331
+ hovered_i = deep_copy_config?.hovered_i ?? null
332
+ loading_i = deep_copy_config?.loading_i ?? null
333
+ error_i = deep_copy_config?.error_i ?? null
334
+ val = deep_copy_config?.val ?? (is_nullable ? null : min)
335
+ working_val = deep_copy(Array.isArray(val) ? val : [val])
336
+ set_thumbs()
337
+ toggle_null_button_manager = create_button_manager({
338
+ type: "outlined",
339
+ font_size: 1.2,
340
+ min_height: 3,
341
+ is_no_wrap: true,
342
+ mr: 0.5,
343
+ text: () => (val == null ? "Select Value" : "Set Null"),
344
+ on_click: () => set_val(val == null ? min : null),
345
+ })
346
+ }
347
+
348
+ init(config)
349
+
350
+ return {
351
+ id,
352
+ get name() {
353
+ return name
354
+ },
355
+ get label() {
356
+ return label
357
+ },
358
+ get active_i() {
359
+ return active_i
360
+ },
361
+ get val() {
362
+ return val
363
+ },
364
+ get is_nullable() {
365
+ return is_nullable
366
+ },
367
+ get working_val() {
368
+ return working_val
369
+ },
370
+ get label_font_size() {
371
+ return label_font_size
372
+ },
373
+ get is_required() {
374
+ return is_required
375
+ },
376
+ get is_read_only() {
377
+ return is_read_only
378
+ },
379
+ get min() {
380
+ return min
381
+ },
382
+ get max() {
383
+ return max
384
+ },
385
+ get step() {
386
+ return step
387
+ },
388
+ get font_size() {
389
+ return font_size
390
+ },
391
+ get is_disabled() {
392
+ return is_disabled
393
+ },
394
+ get color() {
395
+ return color
396
+ },
397
+ get closest_i_at_drag_start() {
398
+ return closest_i_at_drag_start
399
+ },
400
+ get hovered_i() {
401
+ return hovered_i
402
+ },
403
+ get selected_i() {
404
+ return selected_i
405
+ },
406
+ get loading_i() {
407
+ return loading_i
408
+ },
409
+ get error_i() {
410
+ return error_i
411
+ },
412
+ get is_short() {
413
+ return is_short
414
+ },
415
+ get is_show_text() {
416
+ return is_show_text
417
+ },
418
+ get ml() {
419
+ return ml
420
+ },
421
+ get mr() {
422
+ return mr
423
+ },
424
+ get mt() {
425
+ return mt
426
+ },
427
+ get mb() {
428
+ return mb
429
+ },
430
+ get slider_highlight_bg_width() {
431
+ return slider_highlight_bg_width
432
+ },
433
+ get slider_highlight_ml() {
434
+ return slider_highlight_ml
435
+ },
436
+ get left() {
437
+ return left
438
+ },
439
+ get base_height() {
440
+ return base_height
441
+ },
442
+ get highlight_range_start_percent() {
443
+ return highlight_range_start_percent
444
+ },
445
+ get highlight_range_width_percent() {
446
+ return highlight_range_width_percent
447
+ },
448
+ get toggle_null_button_manager() {
449
+ return toggle_null_button_manager
450
+ },
451
+ init,
452
+ handle_pointer_enter,
453
+ handle_pointer_leave,
454
+ handle_pointer_down,
455
+ handle_pointer_move,
456
+ handle_pointer_up,
457
+ handle_thumb_keydown,
458
+ handle_focus,
459
+ handle_blur,
460
+ set_val,
461
+ set_thumbs,
462
+ set_loading_i,
463
+ set_hovered_i,
464
+ set_error_i,
465
+ set_min,
466
+ set_max,
467
+ set_step,
468
+ }
469
+ }