forked from tsai/budibase
9 changed files with 133 additions and 27 deletions
@ -0,0 +1,71 @@ |
|||||
|
<script> |
||||
|
import "@spectrum-css/slider/dist/index-vars.css" |
||||
|
import { createEventDispatcher } from "svelte" |
||||
|
|
||||
|
export let value = false |
||||
|
export let id = null |
||||
|
export let disabled = false |
||||
|
export let min = 0 |
||||
|
export let max = 100 |
||||
|
export let step = 1 |
||||
|
|
||||
|
const dispatch = createEventDispatcher() |
||||
|
const onChange = event => { |
||||
|
dispatch("change", event.target.value) |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<div> |
||||
|
<input |
||||
|
type="range" |
||||
|
{min} |
||||
|
{max} |
||||
|
{step} |
||||
|
{value} |
||||
|
{disabled} |
||||
|
{id} |
||||
|
on:change={onChange} |
||||
|
/> |
||||
|
</div> |
||||
|
|
||||
|
<style> |
||||
|
div { |
||||
|
display: grid; |
||||
|
place-items: center; |
||||
|
} |
||||
|
|
||||
|
input { |
||||
|
width: 100%; |
||||
|
padding: 0; |
||||
|
margin: 0; |
||||
|
-webkit-appearance: none; |
||||
|
background: transparent; |
||||
|
} |
||||
|
input::-webkit-slider-thumb { |
||||
|
-webkit-appearance: none; |
||||
|
} |
||||
|
input:focus { |
||||
|
outline: none; |
||||
|
} |
||||
|
|
||||
|
input[type="range"]::-webkit-slider-thumb, |
||||
|
input[type="range"]::-moz-range-thumb { |
||||
|
-webkit-appearance: none; |
||||
|
border: 2px solid var(--spectrum-global-color-gray-700); |
||||
|
height: 12px; |
||||
|
width: 12px; |
||||
|
border-radius: 50%; |
||||
|
background: var(--background); |
||||
|
cursor: pointer; |
||||
|
transition: background 130ms ease-out; |
||||
|
} |
||||
|
|
||||
|
input[type="range"]::-webkit-slider-runnable-track, |
||||
|
input[type="range"]::-moz-range-track { |
||||
|
width: 100%; |
||||
|
height: 2px; |
||||
|
cursor: pointer; |
||||
|
background: var(--spectrum-global-color-gray-300); |
||||
|
border-radius: 2px; |
||||
|
} |
||||
|
</style> |
||||
@ -0,0 +1,24 @@ |
|||||
|
<script> |
||||
|
import Field from "./Field.svelte" |
||||
|
import Slider from "./Core/Slider.svelte" |
||||
|
import { createEventDispatcher } from "svelte" |
||||
|
|
||||
|
export let value = null |
||||
|
export let label = null |
||||
|
export let labelPosition = "above" |
||||
|
export let min = 0 |
||||
|
export let max = 100 |
||||
|
export let step = 1 |
||||
|
export let disabled = false |
||||
|
export let error = null |
||||
|
|
||||
|
const dispatch = createEventDispatcher() |
||||
|
const onChange = e => { |
||||
|
value = e.detail |
||||
|
dispatch("change", e.detail) |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<Field {label} {labelPosition} {error}> |
||||
|
<Slider {disabled} {value} {min} {max} {step} on:change={onChange} /> |
||||
|
</Field> |
||||
Loading…
Reference in new issue