@spectrum-web-components/slider 0.0.0-20241209155954
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/README.md +386 -0
- package/package.json +96 -0
- package/sp-slider-handle.d.ts +6 -0
- package/sp-slider-handle.dev.js +5 -0
- package/sp-slider-handle.dev.js.map +7 -0
- package/sp-slider-handle.js +2 -0
- package/sp-slider-handle.js.map +7 -0
- package/sp-slider.d.ts +7 -0
- package/sp-slider.dev.js +6 -0
- package/sp-slider.dev.js.map +7 -0
- package/sp-slider.js +2 -0
- package/sp-slider.js.map +7 -0
- package/src/HandleController.d.ts +116 -0
- package/src/HandleController.dev.js +553 -0
- package/src/HandleController.dev.js.map +7 -0
- package/src/HandleController.js +34 -0
- package/src/HandleController.js.map +7 -0
- package/src/Slider.d.ts +97 -0
- package/src/Slider.dev.js +481 -0
- package/src/Slider.dev.js.map +7 -0
- package/src/Slider.js +105 -0
- package/src/Slider.js.map +7 -0
- package/src/SliderHandle.d.ts +57 -0
- package/src/SliderHandle.dev.js +179 -0
- package/src/SliderHandle.dev.js.map +7 -0
- package/src/SliderHandle.js +2 -0
- package/src/SliderHandle.js.map +7 -0
- package/src/index.d.ts +3 -0
- package/src/index.dev.js +5 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +2 -0
- package/src/index.js.map +7 -0
- package/src/slider-overrides.css.d.ts +2 -0
- package/src/slider-overrides.css.dev.js +7 -0
- package/src/slider-overrides.css.dev.js.map +7 -0
- package/src/slider-overrides.css.js +4 -0
- package/src/slider-overrides.css.js.map +7 -0
- package/src/slider.css.d.ts +2 -0
- package/src/slider.css.dev.js +7 -0
- package/src/slider.css.dev.js.map +7 -0
- package/src/slider.css.js +4 -0
- package/src/slider.css.js.map +7 -0
- package/src/spectrum-config.js +205 -0
- package/src/spectrum-slider.css.d.ts +2 -0
- package/src/spectrum-slider.css.dev.js +7 -0
- package/src/spectrum-slider.css.dev.js.map +7 -0
- package/src/spectrum-slider.css.js +4 -0
- package/src/spectrum-slider.css.js.map +7 -0
- package/sync/sp-slider.dev.js +4 -0
- package/sync/sp-slider.dev.js.map +7 -0
- package/sync/sp-slider.js +2 -0
- package/sync/sp-slider.js.map +7 -0
package/README.md
ADDED
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
|
|
3
|
+
`<sp-slider>` allows users to quickly select a value within a range. They should be used when the upper and lower bounds of the range are invariable.
|
|
4
|
+
|
|
5
|
+
### Usage
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/@spectrum-web-components/slider)
|
|
8
|
+
[](https://bundlephobia.com/result?p=@spectrum-web-components/slider)
|
|
9
|
+
[](https://webcomponents.dev/edit/collection/fO75441E1Q5ZlI0e9pgq/U7LQv7LsAVBwJayJXG3B/src/index.ts)
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
yarn add @spectrum-web-components/slider
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Import the side effectful registration of `<sp-slider>` via:
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
import '@spectrum-web-components/slider/sp-slider.js';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
When leveraging the `editable` attribute, the `@spectrum-web-components/number-field/sp-number-field.js` dependency will be asynchronously loaded via a dynamic import to reduce JS payload for applications not leveraging this feature. In the case that you would like to import those transverse dependencies statically, import the side effectful registration of `<sp-slider>` as follows:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
import '@spectrum-web-components/slider/sync/sp-slider.js';
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
When looking to leverage the `Slider` base class as a type and/or for extension purposes, do so via:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
import { Slider } from '@spectrum-web-components/slider';
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Sizes
|
|
34
|
+
|
|
35
|
+
<sp-tabs selected="m" auto label="Size Attribute Options">
|
|
36
|
+
<sp-tab value="s">Small</sp-tab>
|
|
37
|
+
<sp-tab-panel value="s">
|
|
38
|
+
|
|
39
|
+
```html
|
|
40
|
+
<sp-slider label="Slider Label" size="s"></sp-slider>
|
|
41
|
+
<sp-slider label="Slider Label - Editable" editable size="s"></sp-slider>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
</sp-tab-panel>
|
|
45
|
+
<sp-tab value="m">Medium</sp-tab>
|
|
46
|
+
<sp-tab-panel value="m">
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<sp-slider label="Slider Label"></sp-slider>
|
|
50
|
+
<sp-slider label="Slider Label - Editable" editable></sp-slider>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
</sp-tab-panel>
|
|
54
|
+
<sp-tab value="l">Large</sp-tab>
|
|
55
|
+
<sp-tab-panel value="l">
|
|
56
|
+
|
|
57
|
+
```html
|
|
58
|
+
<sp-slider label="Slider Label" size="l"></sp-slider>
|
|
59
|
+
<sp-slider label="Slider Label - Editable" editable size="l"></sp-slider>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
</sp-tab-panel>
|
|
63
|
+
<sp-tab value="xl">Extra Large</sp-tab>
|
|
64
|
+
<sp-tab-panel value="xl">
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<sp-slider label="Slider Label" size="xl"></sp-slider>
|
|
68
|
+
<sp-slider label="Slider Label - Editable" editable size="xl"></sp-slider>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
</sp-tab-panel>
|
|
72
|
+
</sp-tabs>
|
|
73
|
+
|
|
74
|
+
## Variants
|
|
75
|
+
|
|
76
|
+
### Standard
|
|
77
|
+
|
|
78
|
+
```html
|
|
79
|
+
<sp-slider label="Slider Label"></sp-slider>
|
|
80
|
+
<sp-slider label="Slider Label - Disabled" disabled></sp-slider>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Filled
|
|
84
|
+
|
|
85
|
+
```html
|
|
86
|
+
<sp-slider
|
|
87
|
+
label="Slider Label"
|
|
88
|
+
max="1"
|
|
89
|
+
variant="filled"
|
|
90
|
+
min="0"
|
|
91
|
+
value=".5"
|
|
92
|
+
step="0.01"
|
|
93
|
+
></sp-slider>
|
|
94
|
+
<sp-slider
|
|
95
|
+
label="Slider Label - Disabled"
|
|
96
|
+
max="1"
|
|
97
|
+
variant="filled"
|
|
98
|
+
min="0"
|
|
99
|
+
value=".5"
|
|
100
|
+
step="0.01"
|
|
101
|
+
disabled
|
|
102
|
+
></sp-slider>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### fill-start
|
|
106
|
+
|
|
107
|
+
When both `fill-start` and `variant="filled"` are used in `<sp-slider>`, the `fill-start` property takes priority, and the `variant="filled"` css will not apply.
|
|
108
|
+
|
|
109
|
+
```html
|
|
110
|
+
<sp-slider
|
|
111
|
+
label="Slider Label"
|
|
112
|
+
max="1"
|
|
113
|
+
fill-start
|
|
114
|
+
variant="filled"
|
|
115
|
+
min="0"
|
|
116
|
+
value=".5"
|
|
117
|
+
step="0.01"
|
|
118
|
+
></sp-slider>
|
|
119
|
+
<sp-slider
|
|
120
|
+
label="Slider Label"
|
|
121
|
+
max="1"
|
|
122
|
+
fill-start
|
|
123
|
+
variant="filled"
|
|
124
|
+
min="0"
|
|
125
|
+
value=".5"
|
|
126
|
+
step="0.01"
|
|
127
|
+
disabled
|
|
128
|
+
></sp-slider>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### fill-start with value
|
|
132
|
+
|
|
133
|
+
Any number (including `0`) can be used as a fill-start value. If a [custom normalization](#advanced-normalization) function is provided, it will also normalize all fill-related params.
|
|
134
|
+
|
|
135
|
+
#### Fill Start greater than value
|
|
136
|
+
|
|
137
|
+
```html
|
|
138
|
+
<sp-slider
|
|
139
|
+
id="fill-start-slider"
|
|
140
|
+
label="Fill Start greater than Value"
|
|
141
|
+
max="1"
|
|
142
|
+
min="0"
|
|
143
|
+
value=".3"
|
|
144
|
+
step="0.1"
|
|
145
|
+
fill-start="0.7"
|
|
146
|
+
variant="filled"
|
|
147
|
+
></sp-slider>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
#### Fill Start less than value
|
|
151
|
+
|
|
152
|
+
```html
|
|
153
|
+
<sp-slider
|
|
154
|
+
id="fill-start-slider"
|
|
155
|
+
label="Fill Start less than Value"
|
|
156
|
+
max="1"
|
|
157
|
+
min="0"
|
|
158
|
+
value=".7"
|
|
159
|
+
step="0.1"
|
|
160
|
+
fill-start="0.25"
|
|
161
|
+
variant="filled"
|
|
162
|
+
></sp-slider>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
#### Fill Start with 0 and negative minimum range
|
|
166
|
+
|
|
167
|
+
```html
|
|
168
|
+
<sp-slider
|
|
169
|
+
label="Fill Start with 0"
|
|
170
|
+
max="1"
|
|
171
|
+
min="-1"
|
|
172
|
+
value=".7"
|
|
173
|
+
step="0.1"
|
|
174
|
+
fill-start="0"
|
|
175
|
+
variant="filled"
|
|
176
|
+
></sp-slider>
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Tick
|
|
180
|
+
|
|
181
|
+
```html
|
|
182
|
+
<sp-slider label="Slider Label" variant="tick" tick-step="5"></sp-slider>
|
|
183
|
+
<sp-slider
|
|
184
|
+
label="Slider Label - Disabled"
|
|
185
|
+
variant="tick"
|
|
186
|
+
tick-step="5"
|
|
187
|
+
disabled
|
|
188
|
+
></sp-slider>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Tick with Labels
|
|
192
|
+
|
|
193
|
+
```html
|
|
194
|
+
<sp-slider
|
|
195
|
+
label="Slider Label"
|
|
196
|
+
variant="tick"
|
|
197
|
+
tick-step="5"
|
|
198
|
+
tick-labels
|
|
199
|
+
></sp-slider>
|
|
200
|
+
<sp-slider
|
|
201
|
+
label="Slider Label - Disabled"
|
|
202
|
+
variant="tick"
|
|
203
|
+
tick-step="5"
|
|
204
|
+
tick-labels
|
|
205
|
+
disabled
|
|
206
|
+
></sp-slider>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Ramp
|
|
210
|
+
|
|
211
|
+
```html
|
|
212
|
+
<sp-slider label="Slider Label" variant="ramp"></sp-slider>
|
|
213
|
+
<sp-slider label="Slider Label - Disabled" variant="ramp" disabled></sp-slider>
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Editable
|
|
217
|
+
|
|
218
|
+
An `<sp-slider>` element can be paired with an `<sp-number-field>` element via the `editable` attribute. The `<sp-number-field>` will be passed all of the standard options from the `<sp-slider>` element (e.g. `min`, `max`, `formatOptions`, etc.) and will also accept the `hide-stepper` attribute in order to prevent the display of its stepper UI.
|
|
219
|
+
|
|
220
|
+
```html
|
|
221
|
+
<sp-slider
|
|
222
|
+
label="Angle (editable)"
|
|
223
|
+
editable
|
|
224
|
+
hide-stepper
|
|
225
|
+
min="0"
|
|
226
|
+
max="360"
|
|
227
|
+
format-options='{
|
|
228
|
+
"style": "unit",
|
|
229
|
+
"unit": "degree",
|
|
230
|
+
"unitDisplay": "narrow"
|
|
231
|
+
}'
|
|
232
|
+
></sp-slider>
|
|
233
|
+
<sp-slider
|
|
234
|
+
label="Hours of the day (editable)"
|
|
235
|
+
editable
|
|
236
|
+
max="24"
|
|
237
|
+
min="0"
|
|
238
|
+
value="7.25"
|
|
239
|
+
step="0.25"
|
|
240
|
+
style="--spectrum-slider-editable-number-field-width: 100px;"
|
|
241
|
+
format-options='{
|
|
242
|
+
"style": "unit",
|
|
243
|
+
"unit": "hour"
|
|
244
|
+
}'
|
|
245
|
+
></sp-slider>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Quiet
|
|
249
|
+
|
|
250
|
+
```html
|
|
251
|
+
<sp-slider quiet editable value="50"></sp-slider>
|
|
252
|
+
<sp-slider quiet disabled editable value="50"></sp-slider>
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
#### Default value
|
|
256
|
+
|
|
257
|
+
Slider will reset to its `default-value` when the user double clicks on the slider handle or if the user presses the `escape` key when the slider handle is focused.
|
|
258
|
+
|
|
259
|
+
```html
|
|
260
|
+
<sp-slider value="50" default-value="20"></sp-slider>
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Note: If a slider with `default-value` attribute is contained in a modal and the slider-handle is focused then the following interaction will occur on pressing the `escape` key:
|
|
264
|
+
|
|
265
|
+
- If the slider value is different from the default value then the slider value will be reset to the default value and the modal will not be closed.
|
|
266
|
+
- If the slider value is equal to the default value then the modal will be closed.
|
|
267
|
+
|
|
268
|
+
#### Indeterminate
|
|
269
|
+
|
|
270
|
+
The indeterminate attribute will be passed to the internal `<sp-number-field>` element and alter its visual delivery until a change has been made to the `<sp-slider>` element at which point the `change` event that is dispatched can be understood as always removing the indeterminate attribute from the `<sp-slider>`.
|
|
271
|
+
|
|
272
|
+
```html
|
|
273
|
+
<sp-slider indeterminate editable value="50"></sp-slider>
|
|
274
|
+
<sp-slider indeterminate disabled editable value="50"></sp-slider>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Advanced normalization
|
|
278
|
+
|
|
279
|
+
By default, `sp-slider` assumes a linear scale between the `min` and `max` values.
|
|
280
|
+
For advanced applications, it is sometimes necessary to specify a custom
|
|
281
|
+
"normalization."
|
|
282
|
+
|
|
283
|
+
Normalization is the process of converting a slider to a value between 0 and 1 where
|
|
284
|
+
0 represents the minimum and 1 represents the maximum. See the <a href="../../storybook/index.html?path=/story/slider--three-handles-complex" target="_blank">"Three Handles Complex" example in the playground</a>.
|
|
285
|
+
|
|
286
|
+
## Labels and Formatting
|
|
287
|
+
|
|
288
|
+
An `<sp-slider>` or `<sp-slider-handle>` element will process its numeric value with `new Intl.NumberFormat(this.resolvedLanguage, this.formatOptions).format(this.value)` in order to prepare it for visual delivery in the input. In order to customize this processing supply your own `Intl.NumberFormatOptions` via the `formatOptions` property, or `format-options` attribute as seen below.
|
|
289
|
+
|
|
290
|
+
`this.resolvedLanguage` represents the language in which the `<sp-slider>` or `<sp-slider-handle>` element is currently being delivered. By default, this value will represent the language established by the `lang` attribute on the root `<html>` element while falling back to `navigator.language` when that is not present. This value can be customized via a language context provided by a parent element that listens for the `sp-language-context` event and supplies updated language settings to the `callback` function contained therein. Applications leveraging the [`<sp-theme>`](./components/theme) element to manage the visual delivery or text direction of their content will also be provided a reactive context for supplying language information to its descendants.
|
|
291
|
+
|
|
292
|
+
```html
|
|
293
|
+
<sp-slider
|
|
294
|
+
min="0"
|
|
295
|
+
max="1"
|
|
296
|
+
step="0.01"
|
|
297
|
+
value="0.5"
|
|
298
|
+
label="Slider Label"
|
|
299
|
+
format-options='{
|
|
300
|
+
"style": "percent"
|
|
301
|
+
}'
|
|
302
|
+
></sp-slider>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
More advanced formatting is available by specifying a formatting function to
|
|
306
|
+
the `getAriaHandleText` property on an `sp-slider` or `sp-slider-handle`. Or,
|
|
307
|
+
for a multi-handle slider, you can format the combined value label for all
|
|
308
|
+
handles by passing a formatting function to the `getAriaValueText` property
|
|
309
|
+
on the parent `sp-slider`.
|
|
310
|
+
|
|
311
|
+
### Units not included in `Intl.NumberFormatOptions`
|
|
312
|
+
|
|
313
|
+
While `Intl.NumberFormatOptions` does support a [wide range of units](https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier), it is possible to encounter units (e.g. the graphics units of `pixel`, `pixels`, `points`, etc.) that are not supported therein. When this occurs, an `<sp-slider>` element will attempt to polyfill support for this unit. See the following example delivering `{ style: "unit", unit: "px" }` below:
|
|
314
|
+
|
|
315
|
+
```html
|
|
316
|
+
<sp-slider
|
|
317
|
+
style="width: 200px"
|
|
318
|
+
value="500"
|
|
319
|
+
format-options='{
|
|
320
|
+
"style": "unit",
|
|
321
|
+
"unit": "px"
|
|
322
|
+
}'
|
|
323
|
+
>
|
|
324
|
+
Document width in pixels
|
|
325
|
+
</sp-slider>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Note: the polyfilling done here is very simplistic and is triggered by supplying options that would otherwise cause the `Intl.NumberFormat()` call to throw an error. Once the unsupporting unit of `px` causes the construction of the object to throw, a backup formatter/parser pair will be created without the supplied unit data. When the `style` is set to `unit`, the `unit` value will be adopted as the _static_ unit display. This means that neither pluralization nor translation will be handled within the `<sp-number-field>` element itself. If pluralization or translation is important to the delivered interface, please be sure to handle passing those strings into to element via the `formatOptions` property reactively to the value of the element or locale of that page in question.
|
|
329
|
+
|
|
330
|
+
### Label Visibility
|
|
331
|
+
|
|
332
|
+
By default, an `<sp-slider>` element has both a "text" label and a "value" label. The "value" label is output by the element itself based on its state, but the "text" label must be supplied by the consuming developer in order for the `<sp-slider>` to be delivered in an accessible manner.
|
|
333
|
+
|
|
334
|
+
Either or both of these can be suppressed visually as needed by your application UI, while still fulfilling their role in delivering a quality accessibility tree to the browser. This delivery is controlled by the `label-visibility` attribute (or `labelVisibility` property) which accepts `text`, `value`, or `none` as values.
|
|
335
|
+
|
|
336
|
+
Use `label-visibility="text"` to suppress the "value" label:
|
|
337
|
+
|
|
338
|
+
```html
|
|
339
|
+
<sp-slider
|
|
340
|
+
label="No visible value label"
|
|
341
|
+
label-visibility="text"
|
|
342
|
+
value="50"
|
|
343
|
+
></sp-slider>
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Use `label-visibility="value"` to suppress the "text" label:
|
|
347
|
+
|
|
348
|
+
```html
|
|
349
|
+
<sp-slider label="No visible text label" label-visibility="value"></sp-slider>
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Use `label-visibility="none"` to suppress the "text" label:
|
|
353
|
+
|
|
354
|
+
```html
|
|
355
|
+
<sp-slider label="No visible labels" label-visibility="none"></sp-slider>
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
In each case outlined above the content for both labels will be made available to screen readers, so be sure to manage the content delivered to visitors in that context.
|
|
359
|
+
|
|
360
|
+
## Events
|
|
361
|
+
|
|
362
|
+
Like the `<input type="range">` element after which the `<sp-slider>` is fashioned, it will dispatch `input` events in a stream culminating with a `change` event (representing the final commit of the `value` to the element) once the user has finished interacting with the element. Both other these events can access the `value` of their dispatching target via `event.target.value`. In this way, a steaming listener pattern similar to the following can prove useful:
|
|
363
|
+
|
|
364
|
+
```javascript
|
|
365
|
+
const slider = document.querySelector('sp-slider');
|
|
366
|
+
|
|
367
|
+
const endListener = ({ target }) => {
|
|
368
|
+
target.addEventListener('input', startListener);
|
|
369
|
+
target.removeEventListener('input', streamListener);
|
|
370
|
+
target.removeEventListener('change', endListener);
|
|
371
|
+
console.log(target.value);
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
const streamListener = ({ target }) => {
|
|
375
|
+
console.log(target.value);
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
const startListener = ({ target }) => {
|
|
379
|
+
target.removeEventListener('input', startListener);
|
|
380
|
+
target.addEventListener('input', streamListener);
|
|
381
|
+
target.addEventListener('change', endListener);
|
|
382
|
+
console.log(target.value);
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
slider.addEventListener('input', startListener);
|
|
386
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@spectrum-web-components/slider",
|
|
3
|
+
"version": "0.0.0-20241209155954",
|
|
4
|
+
"publishConfig": {
|
|
5
|
+
"access": "public"
|
|
6
|
+
},
|
|
7
|
+
"description": "",
|
|
8
|
+
"license": "Apache-2.0",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/adobe/spectrum-web-components.git",
|
|
12
|
+
"directory": "packages/slider"
|
|
13
|
+
},
|
|
14
|
+
"author": "",
|
|
15
|
+
"homepage": "https://opensource.adobe.com/spectrum-web-components/components/slider",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/adobe/spectrum-web-components/issues"
|
|
18
|
+
},
|
|
19
|
+
"main": "./src/index.js",
|
|
20
|
+
"module": "./src/index.js",
|
|
21
|
+
"type": "module",
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"development": "./src/index.dev.js",
|
|
25
|
+
"default": "./src/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./package.json": "./package.json",
|
|
28
|
+
"./src/HandleController.js": {
|
|
29
|
+
"development": "./src/HandleController.dev.js",
|
|
30
|
+
"default": "./src/HandleController.js"
|
|
31
|
+
},
|
|
32
|
+
"./src/Slider.js": {
|
|
33
|
+
"development": "./src/Slider.dev.js",
|
|
34
|
+
"default": "./src/Slider.js"
|
|
35
|
+
},
|
|
36
|
+
"./src/SliderHandle.js": {
|
|
37
|
+
"development": "./src/SliderHandle.dev.js",
|
|
38
|
+
"default": "./src/SliderHandle.js"
|
|
39
|
+
},
|
|
40
|
+
"./src/index.js": {
|
|
41
|
+
"development": "./src/index.dev.js",
|
|
42
|
+
"default": "./src/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./src/slider-overrides.css.js": "./src/slider-overrides.css.js",
|
|
45
|
+
"./src/slider.css.js": "./src/slider.css.js",
|
|
46
|
+
"./sp-slider.js": {
|
|
47
|
+
"development": "./sp-slider.dev.js",
|
|
48
|
+
"default": "./sp-slider.js"
|
|
49
|
+
},
|
|
50
|
+
"./sp-slider-handle.js": {
|
|
51
|
+
"development": "./sp-slider-handle.dev.js",
|
|
52
|
+
"default": "./sp-slider-handle.js"
|
|
53
|
+
},
|
|
54
|
+
"./sync/sp-slider.js": {
|
|
55
|
+
"development": "./sync/sp-slider.dev.js",
|
|
56
|
+
"default": "./sync/sp-slider.js"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"test": "echo \"Error: run tests from mono-repo root.\" && exit 1"
|
|
61
|
+
},
|
|
62
|
+
"files": [
|
|
63
|
+
"**/*.d.ts",
|
|
64
|
+
"**/*.js",
|
|
65
|
+
"**/*.js.map",
|
|
66
|
+
"custom-elements.json",
|
|
67
|
+
"!stories/",
|
|
68
|
+
"!test/"
|
|
69
|
+
],
|
|
70
|
+
"keywords": [
|
|
71
|
+
"spectrum css",
|
|
72
|
+
"web components",
|
|
73
|
+
"lit-element",
|
|
74
|
+
"lit-html"
|
|
75
|
+
],
|
|
76
|
+
"dependencies": {
|
|
77
|
+
"@internationalized/number": "^3.6.0",
|
|
78
|
+
"@lit-labs/observers": "^2.0.2",
|
|
79
|
+
"@spectrum-web-components/base": "0.0.0-20241209155954",
|
|
80
|
+
"@spectrum-web-components/field-label": "0.0.0-20241209155954",
|
|
81
|
+
"@spectrum-web-components/number-field": "0.0.0-20241209155954",
|
|
82
|
+
"@spectrum-web-components/reactive-controllers": "0.0.0-20241209155954",
|
|
83
|
+
"@spectrum-web-components/shared": "0.0.0-20241209155954",
|
|
84
|
+
"@spectrum-web-components/theme": "0.0.0-20241209155954"
|
|
85
|
+
},
|
|
86
|
+
"devDependencies": {
|
|
87
|
+
"@spectrum-css/slider": "^6.0.0-s2-foundations.17"
|
|
88
|
+
},
|
|
89
|
+
"types": "./src/index.d.ts",
|
|
90
|
+
"customElements": "custom-elements.json",
|
|
91
|
+
"sideEffects": [
|
|
92
|
+
"./sp-*.js",
|
|
93
|
+
"./**/*.dev.js",
|
|
94
|
+
"./sync/sp-*.js"
|
|
95
|
+
]
|
|
96
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-slider-handle.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2021 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { SliderHandle } from './src/SliderHandle.dev.js'\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\ndefineElement('sp-slider-handle', SliderHandle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-slider-handle': SliderHandle;\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAWA,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAE9B,cAAc,oBAAoB,YAAY;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-slider-handle.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2021 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { SliderHandle } from './src/SliderHandle.js';\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\ndefineElement('sp-slider-handle', SliderHandle);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-slider-handle': SliderHandle;\n }\n}\n"],
|
|
5
|
+
"mappings": "aAWA,OAAS,gBAAAA,MAAoB,wBAC7B,OAAS,iBAAAC,MAAqB,sDAE9BA,EAAc,mBAAoBD,CAAY",
|
|
6
|
+
"names": ["SliderHandle", "defineElement"]
|
|
7
|
+
}
|
package/sp-slider.d.ts
ADDED
package/sp-slider.dev.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-slider.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport './sp-slider-handle.dev.js' // codify sp-slider's implicit dependency on sp-slider-handle\nimport { Slider } from './src/Slider.dev.js'\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\ndefineElement('sp-slider', Slider);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-slider': Slider;\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAWA,OAAO;AACP,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAE9B,cAAc,aAAa,MAAM;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/sp-slider.js
ADDED
package/sp-slider.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-slider.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport './sp-slider-handle.js'; // codify sp-slider's implicit dependency on sp-slider-handle\nimport { Slider } from './src/Slider.js';\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\ndefineElement('sp-slider', Slider);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-slider': Slider;\n }\n}\n"],
|
|
5
|
+
"mappings": "aAWA,MAAO,wBACP,OAAS,UAAAA,MAAc,kBACvB,OAAS,iBAAAC,MAAqB,sDAE9BA,EAAc,YAAaD,CAAM",
|
|
6
|
+
"names": ["Slider", "defineElement"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { TemplateResult } from '@spectrum-web-components/base';
|
|
2
|
+
import { Slider } from './Slider.js';
|
|
3
|
+
import { SliderHandle, SliderNormalization } from './SliderHandle.js';
|
|
4
|
+
interface RangeAndClamp {
|
|
5
|
+
range: {
|
|
6
|
+
min: number;
|
|
7
|
+
max: number;
|
|
8
|
+
};
|
|
9
|
+
clamp: {
|
|
10
|
+
min: number;
|
|
11
|
+
max: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
interface ModelValue extends RangeAndClamp {
|
|
15
|
+
name: string;
|
|
16
|
+
value: number;
|
|
17
|
+
normalizedValue: number;
|
|
18
|
+
step: number;
|
|
19
|
+
highlight: boolean;
|
|
20
|
+
ariaLabel?: string;
|
|
21
|
+
normalization: SliderNormalization;
|
|
22
|
+
handle: SliderHandle;
|
|
23
|
+
}
|
|
24
|
+
interface InputWithModel extends HTMLInputElement {
|
|
25
|
+
model: ModelValue;
|
|
26
|
+
}
|
|
27
|
+
interface DataFromPointerEvent {
|
|
28
|
+
resolvedInput: boolean;
|
|
29
|
+
input: InputWithModel;
|
|
30
|
+
model?: ModelValue;
|
|
31
|
+
}
|
|
32
|
+
export interface HandleValueDictionary {
|
|
33
|
+
[key: string]: number;
|
|
34
|
+
}
|
|
35
|
+
export declare class HandleController {
|
|
36
|
+
private host;
|
|
37
|
+
private handles;
|
|
38
|
+
private model;
|
|
39
|
+
private handleOrder;
|
|
40
|
+
private draggingHandle?;
|
|
41
|
+
private handleRefMap?;
|
|
42
|
+
constructor(host: Slider);
|
|
43
|
+
get values(): HandleValueDictionary;
|
|
44
|
+
get size(): number;
|
|
45
|
+
inputForHandle(handle: SliderHandle): HTMLInputElement | undefined;
|
|
46
|
+
requestUpdate(): void;
|
|
47
|
+
/**
|
|
48
|
+
* It is possible for value attributes to be set programmatically. The <input>
|
|
49
|
+
* for a particular slider needs to have an opportunity to validate any such
|
|
50
|
+
* values
|
|
51
|
+
*
|
|
52
|
+
* @param handle Handle who's value needs validation
|
|
53
|
+
*/
|
|
54
|
+
setValueFromHandle(handle: SliderHandle): void;
|
|
55
|
+
handleHasChanged(handle: SliderHandle): void;
|
|
56
|
+
formattedValueForHandle(model: ModelValue): string;
|
|
57
|
+
get formattedValues(): Map<string, string>;
|
|
58
|
+
get focusElement(): HTMLElement;
|
|
59
|
+
protected handleOrientation: () => void;
|
|
60
|
+
hostConnected(): void;
|
|
61
|
+
hostDisconnected(): void;
|
|
62
|
+
hostUpdate(): void;
|
|
63
|
+
private waitForUpgrade;
|
|
64
|
+
private extractModelFromLightDom;
|
|
65
|
+
get activeHandle(): string;
|
|
66
|
+
get activeHandleInputId(): string;
|
|
67
|
+
activateHandle(name: string): void;
|
|
68
|
+
get activeHandleModel(): ModelValue;
|
|
69
|
+
private getActiveHandleElements;
|
|
70
|
+
private getHandleElements;
|
|
71
|
+
private clearHandleComponentCache;
|
|
72
|
+
private _boundingClientRect?;
|
|
73
|
+
private get boundingClientRect();
|
|
74
|
+
private updateBoundingRect;
|
|
75
|
+
/**
|
|
76
|
+
* Return the `input` and `model` associated with the event and
|
|
77
|
+
* whether the `input` is a `resolvedInput` meaning it was acquired
|
|
78
|
+
* from the `model` rather than the event.
|
|
79
|
+
*/
|
|
80
|
+
protected extractDataFromEvent(event: PointerEvent): DataFromPointerEvent;
|
|
81
|
+
private _activePointerEventData;
|
|
82
|
+
/**
|
|
83
|
+
* @description check for defaultvalue(value) property in sp-slider and reset on double click on sliderHandle
|
|
84
|
+
* @param event
|
|
85
|
+
*/
|
|
86
|
+
handleDoubleClick(event: PointerEvent): void;
|
|
87
|
+
handlePointerdown(event: PointerEvent): void;
|
|
88
|
+
handlePointerup(event: PointerEvent): void;
|
|
89
|
+
handlePointermove(event: PointerEvent): void;
|
|
90
|
+
cancelDrag(model?: ModelValue): void;
|
|
91
|
+
/**
|
|
92
|
+
* Keep the slider value property in sync with the input element's value
|
|
93
|
+
*/
|
|
94
|
+
private onInputChange;
|
|
95
|
+
private onInputFocus;
|
|
96
|
+
private onInputBlur;
|
|
97
|
+
private onInputKeydown;
|
|
98
|
+
private dispatchChangeEvent;
|
|
99
|
+
/**
|
|
100
|
+
* Returns the value under the cursor
|
|
101
|
+
* @param: PointerEvent on slider
|
|
102
|
+
* @return: Slider value that correlates to the position under the pointer
|
|
103
|
+
*/
|
|
104
|
+
private calculateHandlePosition;
|
|
105
|
+
renderHandle(model: ModelValue, index: number, zIndex: number, isMultiHandle: boolean): TemplateResult;
|
|
106
|
+
render(): TemplateResult[];
|
|
107
|
+
/**
|
|
108
|
+
* Returns a list of track segment [start, end] tuples where the values are
|
|
109
|
+
* normalized to be between 0 and 1.
|
|
110
|
+
* @returns A list of track segment tuples [start, end]
|
|
111
|
+
*/
|
|
112
|
+
trackSegments(): [number, number][];
|
|
113
|
+
private updateModel;
|
|
114
|
+
handleUpdatesComplete(): Promise<void>;
|
|
115
|
+
}
|
|
116
|
+
export {};
|