@geoffcox/sterling-svelte 2.0.8 → 2.0.10

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.
@@ -12,6 +12,7 @@
12
12
  max = 100,
13
13
  onChange,
14
14
  precision = 0,
15
+ reverse,
15
16
  step = 1,
16
17
  value = $bindable(0),
17
18
  vertical,
@@ -87,9 +88,17 @@
87
88
  if (!disabled) {
88
89
  event.currentTarget.setPointerCapture(event.pointerId);
89
90
  if (vertical) {
90
- setValueByOffset(sliderRef.getBoundingClientRect().bottom - event.y);
91
+ if (reverse) {
92
+ setValueByOffset(event.y - sliderRef.getBoundingClientRect().top);
93
+ } else {
94
+ setValueByOffset(sliderRef.getBoundingClientRect().bottom - event.y);
95
+ }
91
96
  } else {
92
- setValueByOffset(event.x - sliderRef.getBoundingClientRect().left);
97
+ if (reverse) {
98
+ setValueByOffset(sliderRef.getBoundingClientRect().right - event.x);
99
+ } else {
100
+ setValueByOffset(event.x - sliderRef.getBoundingClientRect().left);
101
+ }
93
102
  }
94
103
  event.preventDefault();
95
104
  focus();
@@ -101,9 +110,17 @@
101
110
  const onPointerMove: PointerEventHandler<HTMLDivElement> = (event) => {
102
111
  if (!disabled && event.currentTarget.hasPointerCapture(event.pointerId)) {
103
112
  if (vertical) {
104
- setValueByOffset(sliderRef.getBoundingClientRect().bottom - event.y);
113
+ if (reverse) {
114
+ setValueByOffset(event.y - sliderRef.getBoundingClientRect().top);
115
+ } else {
116
+ setValueByOffset(sliderRef.getBoundingClientRect().bottom - event.y);
117
+ }
105
118
  } else {
106
- setValueByOffset(event.x - sliderRef.getBoundingClientRect().left);
119
+ if (reverse) {
120
+ setValueByOffset(sliderRef.getBoundingClientRect().right - event.x);
121
+ } else {
122
+ setValueByOffset(event.x - sliderRef.getBoundingClientRect().left);
123
+ }
107
124
  }
108
125
  event.preventDefault();
109
126
  }
@@ -122,19 +139,32 @@
122
139
 
123
140
  const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {
124
141
  if (!disabled && !event.ctrlKey && !event.shiftKey && !event.altKey) {
125
- switch (event.code) {
126
- case 'ArrowDown':
127
- case 'ArrowLeft':
128
- setValue(value - step);
129
- event.preventDefault();
130
- event.stopPropagation();
131
- return;
132
- case 'ArrowRight':
133
- case 'ArrowUp':
134
- setValue(value + step);
135
- event.preventDefault();
136
- event.stopPropagation();
137
- return;
142
+ let change = 0;
143
+
144
+ if (vertical) {
145
+ switch (event.code) {
146
+ case 'ArrowDown':
147
+ change = reverse ? step : -step;
148
+ break;
149
+ case 'ArrowUp':
150
+ change = reverse ? -step : step;
151
+ break;
152
+ }
153
+ } else {
154
+ switch (event.code) {
155
+ case 'ArrowLeft':
156
+ change = reverse ? step : -step;
157
+ break;
158
+ case 'ArrowRight':
159
+ change = reverse ? -step : step;
160
+ break;
161
+ }
162
+ }
163
+
164
+ if (change !== 0) {
165
+ setValue(value + change);
166
+ event.preventDefault();
167
+ event.stopPropagation();
138
168
  }
139
169
  }
140
170
  rest?.onkeydown?.(event);
@@ -149,6 +179,7 @@
149
179
  class={['sterling-slider', _class]}
150
180
  class:disabled
151
181
  class:horizontal={!vertical}
182
+ class:reverse
152
183
  class:vertical
153
184
  role="slider"
154
185
  tabindex={!disabled ? 0 : undefined}
@@ -163,15 +194,10 @@
163
194
  bind:this={sliderRef}
164
195
  bind:clientWidth={sliderWidth}
165
196
  bind:clientHeight={sliderHeight}
197
+ style={`--valueOffset: ${valueOffset}px`}
166
198
  >
167
199
  <div class="track"></div>
168
- <div
169
- class="fill"
170
- style={vertical ? `height: ${valueOffset}px` : `width: ${valueOffset}px`}
171
- ></div>
172
- <div
173
- class="thumb"
174
- style={vertical ? `bottom: ${valueOffset}px` : `left: ${valueOffset}px`}
175
- ></div>
200
+ <div class="fill"></div>
201
+ <div class="thumb"></div>
176
202
  </div>
177
203
  </div>
@@ -4,6 +4,7 @@ export type SliderProps = HTMLAttributes<HTMLDivElement> & {
4
4
  min?: number;
5
5
  max?: number;
6
6
  precision?: number;
7
+ reverse?: boolean | null;
7
8
  step?: number;
8
9
  value?: number;
9
10
  vertical?: boolean | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geoffcox/sterling-svelte",
3
- "version": "2.0.8",
3
+ "version": "2.0.10",
4
4
  "author": "Geoff Cox",
5
5
  "description": "A modern, accessible, and lightweight component library for Svelte.",
6
6
  "license": "MIT",
@@ -74,7 +74,7 @@
74
74
  "@eslint/js": "^9.18.0",
75
75
  "@fontsource/atkinson-hyperlegible": "^5.1.1",
76
76
  "@fontsource/source-code-pro": "^4.5.14",
77
- "@geoffcox/sterling-svelte-themes": "^2.0.2",
77
+ "@geoffcox/sterling-svelte-themes": "^2.0.3",
78
78
  "@sveltejs/adapter-static": "^3.0.8",
79
79
  "@sveltejs/kit": "^2.16.0",
80
80
  "@sveltejs/package": "^2.0.0",