Skip to content

Commit 5bcc49e

Browse files
committed
cleanup css class names, add comments, add vertical sliders
1 parent 6501879 commit 5bcc49e

File tree

3 files changed

+188
-80
lines changed

3 files changed

+188
-80
lines changed

src/RangePips.svelte

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
<script>
2-
export let values;
3-
export let min;
4-
export let max;
5-
export let step;
6-
export let range;
2+
3+
// range slider props
4+
export let range = false;
5+
export let min = 0;
6+
export let max = 100;
7+
export let step = 1;
8+
export let values = [(max + min) / 2];
9+
export let vertical = false;
10+
11+
// range pips / values props
12+
export let pipstep = ((max - min) / step >= ( vertical ? 50 : 100 ) ? (max - min) / ( vertical ? 10 : 20 ) : 1);
713
export let first = true;
814
export let last = true;
915
export let rest = true;
10-
export let pipstep = (max - min) / step >= 100 ? (max - min) / 20 : 1;
1116
17+
// formatting props
1218
export let prefix = "";
1319
export let suffix = "";
1420
export let formatter = v => v;
1521
22+
// stylistic props
1623
export let focus;
1724
export let percentOf;
1825
@@ -46,65 +53,93 @@
4653
--pip-in-range: var(--range-pip-in-range, var(--pip-active));
4754
--pip-in-range-text: var(--range-pip-in-range-text, var(--pip-active-text));
4855
}
49-
.rangeSlider__pips {
56+
:global(.rangeSlider__pips) {
5057
height: 1em;
5158
position: absolute;
5259
left: 0;
5360
right: 0;
5461
bottom: -1em;
5562
}
56-
.rangeSlider__pip {
63+
:global(.rangeSlider__pips.vertical) {
64+
height: auto;
65+
width: 1em;
66+
position: absolute;
67+
left: 100%;
68+
right: auto;
69+
top: 0;
70+
bottom: 0;
71+
}
72+
:global(.rangeSlider__pips .pip) {
5773
height: 0.4em;
5874
position: absolute;
5975
top: 0.25em;
6076
width: 1px;
6177
white-space: nowrap;
6278
}
63-
.rangeSlider__pip.selected {
79+
:global(.rangeSlider__pips.vertical .pip) {
80+
height: 1px;
81+
width: 0.4em;
82+
top: 0;
83+
left: 0.25em;
84+
}
85+
:global(.rangeSlider__pips .pip.selected) {
6486
height: 0.75em;
6587
}
66-
.rangeSlider__pipval {
88+
:global(.rangeSlider__pips.vertical .pip.selected) {
89+
height: 1px;
90+
width: 0.75em;
91+
}
92+
:global(.rangeSlider__pips .pipVal) {
6793
position: absolute;
6894
top: 0.4em;
6995
transform: translate(-50%, 25%);
7096
}
71-
.rangeSlider__pip.selected .rangeSlider__pipval {
97+
:global(.rangeSlider__pips.vertical .pipVal) {
98+
position: absolute;
99+
top: 0;
100+
left: 0.4em;
101+
transform: translate(25%, -50%);
102+
}
103+
:global(.rangeSlider__pips .pip.selected .pipVal) {
72104
font-weight: bold;
73105
top: 0.75em;
74106
}
75-
.rangeSlider__pip,
76-
.rangeSlider__pipval {
107+
:global(.rangeSlider__pips.vertical .pip.selected .pipVal) {
108+
top: 0;
109+
left: 0.75em;
110+
}
111+
:global(.rangeSlider__pips .pip, .rangeSlider__pips .pipVal) {
77112
transition: all 0.15s ease;
78113
}
79-
.rangeSlider__pip {
114+
:global(.rangeSlider__pips .pip) {
80115
color: lightslategray;
81116
color: var(--pip-text);
82117
background-color: lightslategray;
83118
background-color: var(--pip);
84119
}
85-
.rangeSlider__pip.selected {
120+
:global(.rangeSlider__pips .pip.selected) {
86121
color: darkslategrey;
87122
color: var(--pip-active-text);
88123
background-color: darkslategrey;
89124
background-color: var(--pip-active);
90125
}
91-
.rangeSlider__pip.in-range {
126+
:global(.rangeSlider__pips .pip.in-range) {
92127
color: darkslategrey;
93128
color: var(--pip-in-range-text);
94129
background-color: darkslategrey;
95130
background-color: var(--pip-in-range);
96131
}
97132
</style>
98133

99-
<div class="rangeSlider__pips" class:focus>
134+
<div class="rangeSlider__pips" class:focus class:vertical>
100135
{#if first}
101136
<span
102-
class="rangeSlider__pip is-first"
137+
class="pip first"
103138
class:selected={isSelected(min)}
104139
class:in-range={inRange(min)}
105-
style="left: 0%;">
140+
style="{vertical ? 'top' : 'left'}: 0%;">
106141
{#if first === 'label'}
107-
<span class="rangeSlider__pipval">
142+
<span class="pipVal">
108143
{prefix}{formatter(min)}{suffix}
109144
</span>
110145
{/if}
@@ -114,12 +149,12 @@
114149
{#each Array(pipCount + 1) as _, i}
115150
{#if pipVal(i) !== min && pipVal(i) !== max}
116151
<span
117-
class="rangeSlider__pip"
152+
class="pip"
118153
class:selected={isSelected(pipVal(i))}
119154
class:in-range={inRange(pipVal(i))}
120-
style="left: {percentOf(pipVal(i))}%;">
155+
style="{vertical ? 'top' : 'left'}: {percentOf(pipVal(i))}%;">
121156
{#if rest === 'label'}
122-
<span class="rangeSlider__pipval">
157+
<span class="pipVal">
123158
{prefix}{formatter(pipVal(i))}{suffix}
124159
</span>
125160
{/if}
@@ -129,12 +164,12 @@
129164
{/if}
130165
{#if last}
131166
<span
132-
class="rangeSlider__pip is-last"
167+
class="pip last"
133168
class:selected={isSelected(max)}
134169
class:in-range={inRange(max)}
135-
style="left: 100%;">
170+
style="{vertical ? 'top' : 'left'}: 100%;">
136171
{#if last === 'label'}
137-
<span class="rangeSlider__pipval">
172+
<span class="pipVal">
138173
{prefix}{formatter(max)}{suffix}
139174
</span>
140175
{/if}

0 commit comments

Comments
 (0)