sveltekit-ui 1.1.15 → 1.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/routes/+page.svelte +24 -0
- package/dist/Components/Alert/index.svelte +0 -88
- package/dist/Components/Alert/index.svelte.js +0 -101
- package/dist/Components/Audio/index.svelte +0 -193
- package/dist/Components/Audio/index.svelte.js +0 -463
- package/dist/Components/AuthCodeInput/index.svelte +0 -85
- package/dist/Components/AuthCodeInput/index.svelte.js +0 -95
- package/dist/Components/Button/index.svelte +0 -721
- package/dist/Components/Button/index.svelte.js +0 -375
- package/dist/Components/Checkbox/index.svelte +0 -411
- package/dist/Components/Checkbox/index.svelte.js +0 -178
- package/dist/Components/Code/index.svelte +0 -23
- package/dist/Components/Code/index.svelte.js +0 -33
- package/dist/Components/EmailAddress/index.svelte +0 -22
- package/dist/Components/EmailAddress/index.svelte.js +0 -45
- package/dist/Components/Eye/index.svelte +0 -57
- package/dist/Components/Icon/index.svelte +0 -412
- package/dist/Components/Icon/index.svelte.js +0 -116
- package/dist/Components/InfoBox/index.svelte +0 -89
- package/dist/Components/Json/index.svelte +0 -60
- package/dist/Components/Json/index.svelte.js +0 -594
- package/dist/Components/Link/index.svelte +0 -47
- package/dist/Components/Link/index.svelte.js +0 -136
- package/dist/Components/LoadingSuccessDiv/index.svelte +0 -51
- package/dist/Components/Location/index.svelte +0 -79
- package/dist/Components/Location/index.svelte.js +0 -288
- package/dist/Components/PhoneNumber/index.svelte +0 -22
- package/dist/Components/PhoneNumber/index.svelte.js +0 -41
- package/dist/Components/Qr/index.svelte +0 -85
- package/dist/Components/Qr/index.svelte.js +0 -301
- package/dist/Components/QrInput/index.svelte +0 -47
- package/dist/Components/QrInput/index.svelte.js +0 -218
- package/dist/Components/Slider/index.svelte +0 -239
- package/dist/Components/Slider/index.svelte.js +0 -469
- package/dist/Components/SuccessCheck/index.svelte +0 -56
- package/dist/Components/TableAdvanced/index.svelte +0 -275
- package/dist/Components/TableAdvanced/index.svelte.js +0 -1565
- package/dist/Components/TextInput/index.svelte +0 -223
- package/dist/Components/TextInput/index.svelte.js +0 -447
- package/dist/Components/Time/index.svelte +0 -7
- package/dist/Components/Time/index.svelte.js +0 -38
- package/dist/Components/VideoTBD/index.svelte +0 -100
- package/dist/Components/XPost/index.svelte +0 -52
- package/dist/Components/XPost/index.svelte.js +0 -64
|
@@ -1,239 +0,0 @@
|
|
|
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>
|
|
@@ -1,469 +0,0 @@
|
|
|
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
|
-
}
|