@rcarls/rc-slider 0.4.2 → 0.6.0
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/CHANGELOG.md +20 -0
- package/README.md +2 -2
- package/dist/custom-elements.json +15 -15
- package/dist/{rc-slider-CRGEKO0W.js → rc-slider-D_D-Ud3e.js} +21 -27
- package/dist/rc-slider-D_D-Ud3e.js.map +1 -0
- package/dist/rc-slider-define.js +1 -1
- package/dist/rc-slider.js +1 -1
- package/dist/types/packages/rc-slider/src/rc-slider.d.ts +5 -5
- package/package.json +2 -2
- package/dist/rc-slider-CRGEKO0W.js.map +0 -1
- package/dist/types/packages/rc-slider/src/rc-slider.test.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @rcarls/rc-slider
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 57370e4: Align component metadata, aggregate framework typings, development-time native-child
|
|
8
|
+
validation, controlled menu state, package declarations, and public documentation before the
|
|
9
|
+
next release.
|
|
10
|
+
- Updated dependencies [6683eb9]
|
|
11
|
+
- Updated dependencies [ee7ba6c]
|
|
12
|
+
- Updated dependencies [30eb232]
|
|
13
|
+
- @rcarls/rc-common@0.6.0
|
|
14
|
+
|
|
15
|
+
## 0.5.0
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [4ae2ef0]
|
|
20
|
+
- Updated dependencies [689340c]
|
|
21
|
+
- @rcarls/rc-common@0.5.0
|
|
22
|
+
|
|
3
23
|
## 0.4.2
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ Consumers can decorate the track with a real named slot:
|
|
|
16
16
|
```html
|
|
17
17
|
<rc-slider>
|
|
18
18
|
<span slot="track-background" class="threshold-bands"></span>
|
|
19
|
-
<input type="range" min="0" max="100" value="40"
|
|
19
|
+
<input type="range" min="0" max="100" value="40" />
|
|
20
20
|
</rc-slider>
|
|
21
21
|
```
|
|
22
22
|
|
|
@@ -27,7 +27,7 @@ The component exposes `root`, `control`, `track`, `progress`, and
|
|
|
27
27
|
Native input styling stays with the consumer:
|
|
28
28
|
|
|
29
29
|
```css
|
|
30
|
-
rc-slider > input[type=
|
|
30
|
+
rc-slider > input[type='range'] {
|
|
31
31
|
appearance: auto;
|
|
32
32
|
}
|
|
33
33
|
```
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
"type": {
|
|
256
256
|
"text": "string"
|
|
257
257
|
},
|
|
258
|
-
"default": "
|
|
258
|
+
"default": "''",
|
|
259
259
|
"description": "Screen-reader value text. When set, forwarded as `aria-valuetext` on the native input.",
|
|
260
260
|
"attribute": "value-text"
|
|
261
261
|
},
|
|
@@ -263,9 +263,9 @@
|
|
|
263
263
|
"kind": "field",
|
|
264
264
|
"name": "orientation",
|
|
265
265
|
"type": {
|
|
266
|
-
"text": "
|
|
266
|
+
"text": "'horizontal' | 'vertical'"
|
|
267
267
|
},
|
|
268
|
-
"default": "
|
|
268
|
+
"default": "'horizontal'",
|
|
269
269
|
"description": "Orientation; reflected as an attribute and forwarded to `aria-orientation`.",
|
|
270
270
|
"attribute": "orientation",
|
|
271
271
|
"reflects": true
|
|
@@ -453,7 +453,7 @@
|
|
|
453
453
|
{
|
|
454
454
|
"name": "type",
|
|
455
455
|
"type": {
|
|
456
|
-
"text": "
|
|
456
|
+
"text": "'rc-slider-input' | 'rc-slider-change'"
|
|
457
457
|
}
|
|
458
458
|
}
|
|
459
459
|
]
|
|
@@ -505,18 +505,18 @@
|
|
|
505
505
|
],
|
|
506
506
|
"events": [
|
|
507
507
|
{
|
|
508
|
-
"name": "
|
|
508
|
+
"name": "rc-slider-input",
|
|
509
509
|
"type": {
|
|
510
510
|
"text": "CustomEvent"
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
{
|
|
514
|
-
"description": "Fires continuously while the value changes. Detail: `{ value }`.",
|
|
515
|
-
"name": "rc-slider-input"
|
|
511
|
+
},
|
|
512
|
+
"description": "Fires continuously while the value changes. Detail: `{ value }`."
|
|
516
513
|
},
|
|
517
514
|
{
|
|
518
|
-
"
|
|
519
|
-
"
|
|
515
|
+
"name": "rc-slider-change",
|
|
516
|
+
"type": {
|
|
517
|
+
"text": "CustomEvent"
|
|
518
|
+
},
|
|
519
|
+
"description": "Fires when the committed value changes (on release). Detail: `{ value }`."
|
|
520
520
|
}
|
|
521
521
|
],
|
|
522
522
|
"attributes": [
|
|
@@ -596,16 +596,16 @@
|
|
|
596
596
|
"type": {
|
|
597
597
|
"text": "string"
|
|
598
598
|
},
|
|
599
|
-
"default": "
|
|
599
|
+
"default": "''",
|
|
600
600
|
"fieldName": "valueText"
|
|
601
601
|
},
|
|
602
602
|
{
|
|
603
603
|
"description": "Orientation; reflected as an attribute and forwarded to `aria-orientation`.",
|
|
604
604
|
"name": "orientation",
|
|
605
605
|
"type": {
|
|
606
|
-
"text": "
|
|
606
|
+
"text": "'horizontal' | 'vertical'"
|
|
607
607
|
},
|
|
608
|
-
"default": "
|
|
608
|
+
"default": "'horizontal'",
|
|
609
609
|
"fieldName": "orientation"
|
|
610
610
|
}
|
|
611
611
|
],
|
|
@@ -74,9 +74,7 @@ const p = class p extends f {
|
|
|
74
74
|
<span
|
|
75
75
|
part="value-display"
|
|
76
76
|
class="rc-slider-value"
|
|
77
|
-
style=${y(
|
|
78
|
-
this.display === "float" ? this._floatStyle() : void 0
|
|
79
|
-
)}
|
|
77
|
+
style=${y(this.display === "float" ? this._floatStyle() : void 0)}
|
|
80
78
|
aria-hidden="true"
|
|
81
79
|
>
|
|
82
80
|
<slot name="value-display">${this._displayText}</slot>
|
|
@@ -97,11 +95,7 @@ const p = class p extends f {
|
|
|
97
95
|
<span part="control" class="rc-slider-control">
|
|
98
96
|
<span part="track" class="rc-slider-track" aria-hidden="true">
|
|
99
97
|
<slot name="track-background"></slot>
|
|
100
|
-
<span
|
|
101
|
-
part="progress"
|
|
102
|
-
class="rc-slider-progress"
|
|
103
|
-
style=${this._progressStyle()}
|
|
104
|
-
></span>
|
|
98
|
+
<span part="progress" class="rc-slider-progress" style=${this._progressStyle()}></span>
|
|
105
99
|
</span>
|
|
106
100
|
|
|
107
101
|
<slot @slotchange=${this._onDefaultSlotChange}></slot>
|
|
@@ -156,13 +150,13 @@ const p = class p extends f {
|
|
|
156
150
|
s.value = String(this.value);
|
|
157
151
|
return;
|
|
158
152
|
}
|
|
159
|
-
this._commitInputValue(s)
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
);
|
|
153
|
+
this._commitInputValue(s);
|
|
154
|
+
const i = {
|
|
155
|
+
bubbles: !0,
|
|
156
|
+
composed: !0,
|
|
157
|
+
detail: { value: this.value }
|
|
158
|
+
};
|
|
159
|
+
e === "rc-slider-input" ? this.dispatchEvent(new CustomEvent("rc-slider-input", i)) : this.dispatchEvent(new CustomEvent("rc-slider-change", i));
|
|
166
160
|
}
|
|
167
161
|
_commitInputValue(t) {
|
|
168
162
|
const e = this.value;
|
|
@@ -195,11 +189,11 @@ p.styles = m`
|
|
|
195
189
|
line-height: var(--rc-line-height, normal);
|
|
196
190
|
}
|
|
197
191
|
|
|
198
|
-
.rc-slider-root[data-display=
|
|
192
|
+
.rc-slider-root[data-display='inline-start'] {
|
|
199
193
|
grid-template-columns: auto minmax(0, 1fr);
|
|
200
194
|
}
|
|
201
195
|
|
|
202
|
-
.rc-slider-root[data-display=
|
|
196
|
+
.rc-slider-root[data-display='inline-end'] {
|
|
203
197
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
204
198
|
}
|
|
205
199
|
|
|
@@ -227,7 +221,7 @@ p.styles = m`
|
|
|
227
221
|
z-index: 0;
|
|
228
222
|
}
|
|
229
223
|
|
|
230
|
-
::slotted([slot=
|
|
224
|
+
::slotted([slot='track-background']) {
|
|
231
225
|
position: absolute;
|
|
232
226
|
inset: 0;
|
|
233
227
|
pointer-events: none;
|
|
@@ -240,7 +234,7 @@ p.styles = m`
|
|
|
240
234
|
z-index: 1;
|
|
241
235
|
}
|
|
242
236
|
|
|
243
|
-
::slotted(input[type=
|
|
237
|
+
::slotted(input[type='range']) {
|
|
244
238
|
position: absolute;
|
|
245
239
|
inset: 0;
|
|
246
240
|
inline-size: 100%;
|
|
@@ -256,7 +250,7 @@ p.styles = m`
|
|
|
256
250
|
color: var(--rc-slider-value-color, var(--rc-text-disabled, GrayText));
|
|
257
251
|
}
|
|
258
252
|
|
|
259
|
-
.rc-slider-root[data-display=
|
|
253
|
+
.rc-slider-root[data-display='float'] .rc-slider-value {
|
|
260
254
|
position: absolute;
|
|
261
255
|
inset-block-start: var(--rc-slider-float-value-block-offset, -1.4em);
|
|
262
256
|
transform: translateX(-50%);
|
|
@@ -264,32 +258,32 @@ p.styles = m`
|
|
|
264
258
|
z-index: 3;
|
|
265
259
|
}
|
|
266
260
|
|
|
267
|
-
:host([orientation=
|
|
261
|
+
:host([orientation='vertical']) {
|
|
268
262
|
display: inline-block;
|
|
269
263
|
}
|
|
270
264
|
|
|
271
|
-
:host([orientation=
|
|
265
|
+
:host([orientation='vertical']) .rc-slider-control {
|
|
272
266
|
inline-size: var(--rc-slider-control-size, var(--rc-control-block-size, 1.5rem));
|
|
273
267
|
block-size: var(--rc-slider-vertical-size, 12.5rem);
|
|
274
268
|
}
|
|
275
269
|
|
|
276
|
-
:host([orientation=
|
|
270
|
+
:host([orientation='vertical']) .rc-slider-track {
|
|
277
271
|
inset-block: 0;
|
|
278
272
|
inset-inline: calc(50% - var(--rc-slider-track-size, 0.1875rem) / 2);
|
|
279
273
|
inline-size: var(--rc-slider-track-size, 0.1875rem);
|
|
280
274
|
block-size: auto;
|
|
281
275
|
}
|
|
282
276
|
|
|
283
|
-
:host([orientation=
|
|
277
|
+
:host([orientation='vertical']) .rc-slider-progress {
|
|
284
278
|
inset-inline: 0;
|
|
285
279
|
}
|
|
286
280
|
|
|
287
|
-
:host([orientation=
|
|
281
|
+
:host([orientation='vertical']) ::slotted(input[type='range']) {
|
|
288
282
|
writing-mode: vertical-lr;
|
|
289
283
|
direction: rtl;
|
|
290
284
|
}
|
|
291
285
|
|
|
292
|
-
:host([orientation=
|
|
286
|
+
:host([orientation='vertical']) .rc-slider-root[data-display='float'] .rc-slider-value {
|
|
293
287
|
inset-block-start: auto;
|
|
294
288
|
inset-inline-start: var(--rc-slider-float-value-inline-offset, calc(100% + 0.5rem));
|
|
295
289
|
transform: translateY(50%);
|
|
@@ -329,4 +323,4 @@ l([
|
|
|
329
323
|
export {
|
|
330
324
|
a as R
|
|
331
325
|
};
|
|
332
|
-
//# sourceMappingURL=rc-slider-
|
|
326
|
+
//# sourceMappingURL=rc-slider-D_D-Ud3e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-slider-D_D-Ud3e.js","sources":["../src/rc-slider.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from 'lit';\nimport type { ComplexAttributeConverter } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { NativeChildController, valueToPercent, warnMissingDirectChild } from '@rcarls/rc-common';\n\nexport interface RCSliderValueEvent {\n /** Current numeric slider value. */\n value: number;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'rc-slider': RCSlider;\n }\n\n interface HTMLElementEventMap {\n 'rc-slider-input': CustomEvent<RCSliderValueEvent>;\n 'rc-slider-change': CustomEvent<RCSliderValueEvent>;\n }\n}\n\ntype DisplayValue = 'float' | 'inline-start' | 'inline-end' | null;\n\n/**\n * Normalises the `display` attribute.\n * A bare boolean attribute (`display` with no value) maps to `'float'` so\n * the reflected attribute is always an explicit string, never an empty string.\n */\nconst displayConverter: ComplexAttributeConverter<DisplayValue> = {\n fromAttribute(v: string | null): DisplayValue {\n if (v === null) return null;\n if (v === '' || v === 'float') return 'float';\n if (v === 'inline-start') return 'inline-start';\n if (v === 'inline-end') return 'inline-end';\n return null;\n },\n toAttribute(v: DisplayValue): string | null {\n return v;\n },\n};\n\n/**\n * Returns the numeric value of a range input's `min`, `max`, or `step`\n * attribute string, falling back to `defaultVal` when the attribute is absent\n * (empty string) or not a valid number.\n */\nfunction parseAttr(s: string, defaultVal: number): number {\n if (s === '') return defaultVal;\n const n = parseFloat(s);\n return isNaN(n) ? defaultVal : n;\n}\n\n/**\n * Single-thumb slider backed by a native <input type=\"range\"> with custom track and value\n * display hooks, following the WAI-ARIA Slider pattern.\n *\n * Label association:\n * - Explicit `for`/`id`: `<label for=\"vol\">Volume</label><rc-slider><input id=\"vol\" …></rc-slider>`\n * - Direct `aria-label` on the input: `<input aria-label=\"Volume\" …>`\n *\n * These patterns all work without JavaScript. The component does not render a\n * label element itself — the consumer is responsible for accessible naming.\n *\n * Form participation is handled natively by the consumer-provided input's `name`\n * attribute; no `ElementInternals` setup is required.\n *\n * @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-slider rc-slider docs}\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/slider/ WAI-ARIA Slider pattern}\n *\n * @slot track-background - Optional decorative content rendered inside the track before the progress fill.\n * @slot value-display - Optional replacement for the rendered value text.\n *\n * @fires rc-slider-input - Fires continuously while the value changes. Detail: `{ value }`.\n * @fires rc-slider-change - Fires when the committed value changes (on release). Detail: `{ value }`.\n *\n * @attr min - Minimum slider value.\n * @attr max - Maximum slider value.\n * @attr step - Slider step.\n * @attr value - Current slider value. Host writes are silent.\n * @attr default-value - Initial uncontrolled slider value. Has no effect after the first user\n * interaction or `value` write.\n * @attr disabled - Disables the underlying input.\n * @attr readonly - Prevents edits while preserving normal display. Not a native range attribute.\n * @attr display - Controls the live value display: absent (none), `float`, `inline-start`, or\n * `inline-end`.\n * @attr value-text - Screen-reader value text, forwarded as `aria-valuetext` on the native input.\n * @attr orientation - Orientation, forwarded to `aria-orientation`: `horizontal` or `vertical`.\n *\n * @cssprop [--rc-thumb-radius=9px] - Half the thumb width; used to position the float value display.\n * @cssprop [--rc-slider-gap=var(--rc-control-gap)] - Gap between track and inline value display.\n * @cssprop [--rc-slider-control-size=var(--rc-control-block-size)] - Track hit-area block size.\n * @cssprop [--rc-slider-vertical-size=12.5rem] - Track length when `orientation=\"vertical\"`.\n * @cssprop [--rc-slider-track-size=0.1875rem] - Visual track thickness.\n * @cssprop [--rc-slider-track-background=CanvasText] - Unfilled track color.\n * @cssprop [--rc-slider-track-opacity=0.25] - Unfilled track opacity.\n * @cssprop [--rc-slider-track-radius=var(--rc-control-radius)] - Track border radius.\n * @cssprop [--rc-slider-progress-background=var(--rc-accent)] - Filled track color.\n * @cssprop [--rc-slider-value-color=var(--rc-text-disabled)] - Value display text color.\n * @cssprop [--rc-slider-float-value-block-offset=-1.4em] - Block-axis offset for horizontal float value display.\n * @cssprop [--rc-slider-float-value-inline-offset=calc(100% + 0.5rem)] - Inline-axis offset for vertical float value display.\n *\n * @csspart root - Root layout wrapper.\n * @csspart control - Track/input positioning wrapper.\n * @csspart track - Visual slider track.\n * @csspart progress - Filled progress segment.\n * @csspart value-display - Rendered value text.\n */\nexport class RCSlider extends LitElement {\n static override styles = css`\n :host {\n display: block;\n }\n\n .rc-slider-root {\n display: grid;\n gap: var(--rc-slider-gap, var(--rc-control-gap, 0.5rem));\n align-items: center;\n font-family: var(--rc-font-family, inherit);\n font-size: var(--rc-font-size, inherit);\n line-height: var(--rc-line-height, normal);\n }\n\n .rc-slider-root[data-display='inline-start'] {\n grid-template-columns: auto minmax(0, 1fr);\n }\n\n .rc-slider-root[data-display='inline-end'] {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n\n .rc-slider-control {\n position: relative;\n display: block;\n min-width: 0;\n min-height: var(--rc-slider-control-size, var(--rc-control-block-size, 1.5rem));\n }\n\n .rc-slider-track,\n .rc-slider-progress {\n position: absolute;\n pointer-events: none;\n }\n\n .rc-slider-track {\n inset-inline: 0;\n inset-block: calc(50% - var(--rc-slider-track-size, 0.1875rem) / 2);\n block-size: var(--rc-slider-track-size, 0.1875rem);\n background: var(--rc-slider-track-background, CanvasText);\n opacity: var(--rc-slider-track-opacity, 0.25);\n border-radius: var(--rc-slider-track-radius, var(--rc-control-radius, 0));\n overflow: hidden;\n z-index: 0;\n }\n\n ::slotted([slot='track-background']) {\n position: absolute;\n inset: 0;\n pointer-events: none;\n }\n\n .rc-slider-progress {\n inset-block: 0;\n background: var(--rc-slider-progress-background, var(--rc-accent, Highlight));\n border-radius: inherit;\n z-index: 1;\n }\n\n ::slotted(input[type='range']) {\n position: absolute;\n inset: 0;\n inline-size: 100%;\n block-size: 100%;\n margin: 0;\n background: transparent;\n z-index: 2;\n }\n\n .rc-slider-value {\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n color: var(--rc-slider-value-color, var(--rc-text-disabled, GrayText));\n }\n\n .rc-slider-root[data-display='float'] .rc-slider-value {\n position: absolute;\n inset-block-start: var(--rc-slider-float-value-block-offset, -1.4em);\n transform: translateX(-50%);\n pointer-events: none;\n z-index: 3;\n }\n\n :host([orientation='vertical']) {\n display: inline-block;\n }\n\n :host([orientation='vertical']) .rc-slider-control {\n inline-size: var(--rc-slider-control-size, var(--rc-control-block-size, 1.5rem));\n block-size: var(--rc-slider-vertical-size, 12.5rem);\n }\n\n :host([orientation='vertical']) .rc-slider-track {\n inset-block: 0;\n inset-inline: calc(50% - var(--rc-slider-track-size, 0.1875rem) / 2);\n inline-size: var(--rc-slider-track-size, 0.1875rem);\n block-size: auto;\n }\n\n :host([orientation='vertical']) .rc-slider-progress {\n inset-inline: 0;\n }\n\n :host([orientation='vertical']) ::slotted(input[type='range']) {\n writing-mode: vertical-lr;\n direction: rtl;\n }\n\n :host([orientation='vertical']) .rc-slider-root[data-display='float'] .rc-slider-value {\n inset-block-start: auto;\n inset-inline-start: var(--rc-slider-float-value-inline-offset, calc(100% + 0.5rem));\n transform: translateY(50%);\n }\n `;\n\n /** Minimum slider value. */\n @property({ type: Number }) min = 0;\n\n /** Maximum slider value. */\n @property({ type: Number }) max = 100;\n\n /** Slider step. */\n @property({ type: Number }) step = 1;\n\n private _value: number | undefined;\n private _defaultValue: number | undefined;\n private _valueInitialized = false;\n\n /** Current slider value. */\n @property({ type: Number })\n get value(): number {\n return this._value ?? this._defaultValue ?? this._nativeInputValue;\n }\n set value(v: number) {\n const old = this._value;\n this._value = v;\n this._valueInitialized = true;\n this._applyValueToInput(v);\n this.requestUpdate('value', old);\n }\n\n /** Initial uncontrolled slider value. Has no effect after the first user interaction or `value` write. */\n @property({ type: Number, attribute: 'default-value' })\n get defaultValue(): number | undefined {\n return this._defaultValue;\n }\n set defaultValue(v: number | undefined) {\n const old = this._defaultValue;\n this._defaultValue = v;\n if (!this._valueInitialized && this._value === undefined && v !== undefined) {\n this._applyValueToInput(v);\n this.requestUpdate('value', undefined);\n }\n this.requestUpdate('defaultValue', old);\n }\n\n /** Disable the underlying input. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Prevents edits while preserving normal display. Not a native range attribute. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /**\n * Controls the live value display.\n *\n * - Absent (default) — no value shown.\n * - `display` or `display=\"float\"` — floats above the thumb.\n * - `display=\"inline-start\"` — rendered before the track, inline in the grid.\n * - `display=\"inline-end\"` — rendered after the track, inline in the grid.\n */\n @property({ reflect: true, converter: displayConverter })\n display: DisplayValue = null;\n\n /** Screen-reader value text. When set, forwarded as `aria-valuetext` on the native input. */\n @property({ attribute: 'value-text' }) valueText = '';\n\n /** Orientation; reflected as an attribute and forwarded to `aria-orientation`. */\n @property({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n private _$nativeInput: HTMLInputElement | null = null;\n\n private readonly _nativeInputController = new NativeChildController<HTMLInputElement>(this, {\n selector: ':scope > input[type=\"range\"]',\n observe: true,\n onChange: ($input, $previous) => this._setupInput($input, $previous),\n onMissing: () => {\n if (import.meta.env.DEV) {\n warnMissingDirectChild(this, {\n selector: ':scope > input[type=\"range\"]',\n message: '[rc-slider] Requires a child <input type=\"range\"> element.',\n });\n }\n },\n });\n\n override disconnectedCallback(): void {\n this._unwireInput();\n super.disconnectedCallback();\n }\n\n override updated(): void {\n const $input = this._$nativeInput;\n if (!$input) return;\n\n $input.disabled = this.disabled;\n this._syncAriaAttributes($input);\n }\n\n override render() {\n const $input = this._$nativeInput;\n if (!$input) return nothing;\n\n const valueDisplay = html`\n <span\n part=\"value-display\"\n class=\"rc-slider-value\"\n style=${ifDefined(this.display === 'float' ? this._floatStyle() : undefined)}\n aria-hidden=\"true\"\n >\n <slot name=\"value-display\">${this._displayText}</slot>\n </span>\n `;\n\n return html`\n <div\n part=\"root\"\n class=\"rc-slider-root\"\n data-display=${this.display ?? nothing}\n data-orientation=${this.orientation}\n data-readonly=${this.readonly ? '' : nothing}\n data-disabled=${this.disabled ? '' : nothing}\n data-has-value-text=${this.valueText ? '' : nothing}\n >\n ${this.display === 'inline-start' ? valueDisplay : nothing}\n\n <span part=\"control\" class=\"rc-slider-control\">\n <span part=\"track\" class=\"rc-slider-track\" aria-hidden=\"true\">\n <slot name=\"track-background\"></slot>\n <span part=\"progress\" class=\"rc-slider-progress\" style=${this._progressStyle()}></span>\n </span>\n\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n ${this.display === 'float' ? valueDisplay : nothing}\n </span>\n\n ${this.display === 'inline-end' ? valueDisplay : nothing}\n </div>\n `;\n }\n\n private get _displayText(): string {\n return this.valueText || String(this.value);\n }\n\n private get _nativeInputValue(): number {\n const value = this._$nativeInput?.valueAsNumber;\n return value === undefined || isNaN(value) ? 0 : value;\n }\n\n private _setupInput($input: HTMLInputElement | null, $previous?: HTMLInputElement | null): void {\n if ($previous && $previous !== $input) {\n this._unwireInput($previous);\n }\n\n if (!$input) {\n this._$nativeInput = null;\n return;\n }\n\n // Mirror disabled state from the native input if not explicitly set on the host.\n // Pre-upgrade markup may carry <input disabled> before the component upgrades.\n if (!this.hasAttribute('disabled') && $input.disabled) {\n this.disabled = true;\n }\n\n this._$nativeInput = $input;\n this._applyInitialValueToInput($input);\n this._wireInput($input);\n this.requestUpdate();\n }\n\n private _onDefaultSlotChange = (): void => {\n this._nativeInputController.sync();\n this.requestUpdate();\n };\n\n private _applyInitialValueToInput($input: HTMLInputElement): void {\n if (this._value !== undefined) {\n this._applyValueToInput(this._value);\n return;\n }\n\n if (this._defaultValue !== undefined) {\n this._applyValueToInput(this._defaultValue);\n return;\n }\n\n const value = $input.valueAsNumber;\n if (!isNaN(value)) {\n this._defaultValue = value;\n }\n }\n\n private _applyValueToInput(value: number): void {\n if (!this._$nativeInput) return;\n\n this._$nativeInput.value = String(value);\n }\n\n private _wireInput($input: HTMLInputElement): void {\n $input.addEventListener('input', this._onInput);\n $input.addEventListener('change', this._onChange);\n $input.addEventListener('keydown', this._onKeydown);\n }\n\n private _unwireInput($input = this._$nativeInput): void {\n $input?.removeEventListener('input', this._onInput);\n $input?.removeEventListener('change', this._onChange);\n $input?.removeEventListener('keydown', this._onKeydown);\n }\n\n private _syncAriaAttributes($input: HTMLInputElement): void {\n if (this.valueText) {\n $input.setAttribute('aria-valuetext', this.valueText);\n } else {\n $input.removeAttribute('aria-valuetext');\n }\n\n if (this.orientation === 'vertical') {\n $input.setAttribute('aria-orientation', 'vertical');\n } else {\n $input.removeAttribute('aria-orientation');\n }\n\n if (this.readonly) {\n $input.setAttribute('aria-readonly', 'true');\n } else {\n $input.removeAttribute('aria-readonly');\n }\n }\n\n private readonly _onInput = (e: Event): void => {\n this._handleRangeEvent(e, 'rc-slider-input');\n };\n\n private readonly _onChange = (e: Event): void => {\n this._handleRangeEvent(e, 'rc-slider-change');\n };\n\n private _handleRangeEvent(e: Event, type: 'rc-slider-input' | 'rc-slider-change'): void {\n const $input = e.currentTarget as HTMLInputElement;\n\n if (this.readonly) {\n $input.value = String(this.value);\n return;\n }\n\n this._commitInputValue($input);\n\n const init: CustomEventInit<RCSliderValueEvent> = {\n bubbles: true,\n composed: true,\n detail: { value: this.value },\n };\n\n if (type === 'rc-slider-input') {\n this.dispatchEvent(new CustomEvent<RCSliderValueEvent>('rc-slider-input', init));\n } else {\n this.dispatchEvent(new CustomEvent<RCSliderValueEvent>('rc-slider-change', init));\n }\n }\n\n private readonly _onKeydown = (e: KeyboardEvent): void => {\n if (this.disabled || this.readonly) return;\n if (e.key !== 'PageUp' && e.key !== 'PageDown') return;\n\n e.preventDefault();\n const $input = e.currentTarget as HTMLInputElement;\n\n if (e.key === 'PageUp') $input.stepUp(10);\n else $input.stepDown(10);\n\n this._commitInputValue($input);\n\n this.dispatchEvent(\n new CustomEvent<RCSliderValueEvent>('rc-slider-input', {\n bubbles: true,\n composed: true,\n detail: { value: this.value },\n }),\n );\n };\n\n private _commitInputValue($input: HTMLInputElement): void {\n const old = this.value;\n\n this._value = $input.valueAsNumber;\n this._valueInitialized = true;\n\n this.requestUpdate('value', old);\n }\n\n private _progressStyle(): string {\n const $input = this._$nativeInput;\n if (!$input) return '';\n\n const min = parseAttr($input.min, 0);\n const max = parseAttr($input.max, 100);\n const pct = valueToPercent($input.valueAsNumber, min, max) * 100;\n\n if (this.orientation === 'vertical') {\n return `bottom:0%;height:${pct.toFixed(3)}%`;\n }\n\n return `left:0%;width:${pct.toFixed(3)}%`;\n }\n\n private _floatStyle(): string {\n const $input = this._$nativeInput;\n if (!$input) return '';\n\n const min = parseAttr($input.min, 0);\n const max = parseAttr($input.max, 100);\n const pct = valueToPercent($input.valueAsNumber, min, max);\n const k = (1 - pct * 2).toFixed(4);\n\n if (this.orientation === 'vertical') {\n return `bottom:calc(${(pct * 100).toFixed(3)}% + ${k} * var(--rc-thumb-radius, 9px))`;\n }\n\n return `left:calc(${(pct * 100).toFixed(3)}% + ${k} * var(--rc-thumb-radius, 9px))`;\n }\n}\n\nexport default RCSlider;\n"],"names":["displayConverter","v","parseAttr","s","defaultVal","n","_RCSlider","LitElement","NativeChildController","$input","$previous","e","old","nothing","valueDisplay","html","ifDefined","value","type","init","min","max","pct","valueToPercent","k","css","RCSlider","__decorateClass","property"],"mappings":"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"}
|
package/dist/rc-slider-define.js
CHANGED
package/dist/rc-slider.js
CHANGED
|
@@ -5,14 +5,14 @@ export interface RCSliderValueEvent {
|
|
|
5
5
|
}
|
|
6
6
|
declare global {
|
|
7
7
|
interface HTMLElementTagNameMap {
|
|
8
|
-
|
|
8
|
+
'rc-slider': RCSlider;
|
|
9
9
|
}
|
|
10
10
|
interface HTMLElementEventMap {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
'rc-slider-input': CustomEvent<RCSliderValueEvent>;
|
|
12
|
+
'rc-slider-change': CustomEvent<RCSliderValueEvent>;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
type DisplayValue =
|
|
15
|
+
type DisplayValue = 'float' | 'inline-start' | 'inline-end' | null;
|
|
16
16
|
/**
|
|
17
17
|
* Single-thumb slider backed by a native <input type="range"> with custom track and value
|
|
18
18
|
* display hooks, following the WAI-ARIA Slider pattern.
|
|
@@ -101,7 +101,7 @@ export declare class RCSlider extends LitElement {
|
|
|
101
101
|
/** Screen-reader value text. When set, forwarded as `aria-valuetext` on the native input. */
|
|
102
102
|
valueText: string;
|
|
103
103
|
/** Orientation; reflected as an attribute and forwarded to `aria-orientation`. */
|
|
104
|
-
orientation:
|
|
104
|
+
orientation: 'horizontal' | 'vertical';
|
|
105
105
|
private _$nativeInput;
|
|
106
106
|
private readonly _nativeInputController;
|
|
107
107
|
disconnectedCallback(): void;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.6.0",
|
|
7
7
|
"description": "Single-thumb slider backed by a native <input type=\"range\"> with custom track and value display hooks.",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"vitest-browser-lit": "^1.0.1"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@rcarls/rc-common": "0.
|
|
60
|
+
"@rcarls/rc-common": "0.6.0"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"lit": "^3.0.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rc-slider-CRGEKO0W.js","sources":["../src/rc-slider.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from \"lit\";\nimport type { ComplexAttributeConverter } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { NativeChildController, valueToPercent, warnMissingDirectChild } from \"@rcarls/rc-common\";\n\nexport interface RCSliderValueEvent {\n /** Current numeric slider value. */\n value: number;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"rc-slider\": RCSlider;\n }\n\n interface HTMLElementEventMap {\n \"rc-slider-input\": CustomEvent<RCSliderValueEvent>;\n \"rc-slider-change\": CustomEvent<RCSliderValueEvent>;\n }\n}\n\ntype DisplayValue = \"float\" | \"inline-start\" | \"inline-end\" | null;\n\n/**\n * Normalises the `display` attribute.\n * A bare boolean attribute (`display` with no value) maps to `'float'` so\n * the reflected attribute is always an explicit string, never an empty string.\n */\nconst displayConverter: ComplexAttributeConverter<DisplayValue> = {\n fromAttribute(v: string | null): DisplayValue {\n if (v === null) return null;\n if (v === \"\" || v === \"float\") return \"float\";\n if (v === \"inline-start\") return \"inline-start\";\n if (v === \"inline-end\") return \"inline-end\";\n return null;\n },\n toAttribute(v: DisplayValue): string | null {\n return v;\n },\n};\n\n/**\n * Returns the numeric value of a range input's `min`, `max`, or `step`\n * attribute string, falling back to `defaultVal` when the attribute is absent\n * (empty string) or not a valid number.\n */\nfunction parseAttr(s: string, defaultVal: number): number {\n if (s === \"\") return defaultVal;\n const n = parseFloat(s);\n return isNaN(n) ? defaultVal : n;\n}\n\n/**\n * Single-thumb slider backed by a native <input type=\"range\"> with custom track and value\n * display hooks, following the WAI-ARIA Slider pattern.\n *\n * Label association:\n * - Explicit `for`/`id`: `<label for=\"vol\">Volume</label><rc-slider><input id=\"vol\" …></rc-slider>`\n * - Direct `aria-label` on the input: `<input aria-label=\"Volume\" …>`\n *\n * These patterns all work without JavaScript. The component does not render a\n * label element itself — the consumer is responsible for accessible naming.\n *\n * Form participation is handled natively by the consumer-provided input's `name`\n * attribute; no `ElementInternals` setup is required.\n *\n * @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-slider rc-slider docs}\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/slider/ WAI-ARIA Slider pattern}\n *\n * @slot track-background - Optional decorative content rendered inside the track before the progress fill.\n * @slot value-display - Optional replacement for the rendered value text.\n *\n * @fires rc-slider-input - Fires continuously while the value changes. Detail: `{ value }`.\n * @fires rc-slider-change - Fires when the committed value changes (on release). Detail: `{ value }`.\n *\n * @attr min - Minimum slider value.\n * @attr max - Maximum slider value.\n * @attr step - Slider step.\n * @attr value - Current slider value. Host writes are silent.\n * @attr default-value - Initial uncontrolled slider value. Has no effect after the first user\n * interaction or `value` write.\n * @attr disabled - Disables the underlying input.\n * @attr readonly - Prevents edits while preserving normal display. Not a native range attribute.\n * @attr display - Controls the live value display: absent (none), `float`, `inline-start`, or\n * `inline-end`.\n * @attr value-text - Screen-reader value text, forwarded as `aria-valuetext` on the native input.\n * @attr orientation - Orientation, forwarded to `aria-orientation`: `horizontal` or `vertical`.\n *\n * @cssprop [--rc-thumb-radius=9px] - Half the thumb width; used to position the float value display.\n * @cssprop [--rc-slider-gap=var(--rc-control-gap)] - Gap between track and inline value display.\n * @cssprop [--rc-slider-control-size=var(--rc-control-block-size)] - Track hit-area block size.\n * @cssprop [--rc-slider-vertical-size=12.5rem] - Track length when `orientation=\"vertical\"`.\n * @cssprop [--rc-slider-track-size=0.1875rem] - Visual track thickness.\n * @cssprop [--rc-slider-track-background=CanvasText] - Unfilled track color.\n * @cssprop [--rc-slider-track-opacity=0.25] - Unfilled track opacity.\n * @cssprop [--rc-slider-track-radius=var(--rc-control-radius)] - Track border radius.\n * @cssprop [--rc-slider-progress-background=var(--rc-accent)] - Filled track color.\n * @cssprop [--rc-slider-value-color=var(--rc-text-disabled)] - Value display text color.\n * @cssprop [--rc-slider-float-value-block-offset=-1.4em] - Block-axis offset for horizontal float value display.\n * @cssprop [--rc-slider-float-value-inline-offset=calc(100% + 0.5rem)] - Inline-axis offset for vertical float value display.\n *\n * @csspart root - Root layout wrapper.\n * @csspart control - Track/input positioning wrapper.\n * @csspart track - Visual slider track.\n * @csspart progress - Filled progress segment.\n * @csspart value-display - Rendered value text.\n */\nexport class RCSlider extends LitElement {\n static override styles = css`\n :host {\n display: block;\n }\n\n .rc-slider-root {\n display: grid;\n gap: var(--rc-slider-gap, var(--rc-control-gap, 0.5rem));\n align-items: center;\n font-family: var(--rc-font-family, inherit);\n font-size: var(--rc-font-size, inherit);\n line-height: var(--rc-line-height, normal);\n }\n\n .rc-slider-root[data-display=\"inline-start\"] {\n grid-template-columns: auto minmax(0, 1fr);\n }\n\n .rc-slider-root[data-display=\"inline-end\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n\n .rc-slider-control {\n position: relative;\n display: block;\n min-width: 0;\n min-height: var(--rc-slider-control-size, var(--rc-control-block-size, 1.5rem));\n }\n\n .rc-slider-track,\n .rc-slider-progress {\n position: absolute;\n pointer-events: none;\n }\n\n .rc-slider-track {\n inset-inline: 0;\n inset-block: calc(50% - var(--rc-slider-track-size, 0.1875rem) / 2);\n block-size: var(--rc-slider-track-size, 0.1875rem);\n background: var(--rc-slider-track-background, CanvasText);\n opacity: var(--rc-slider-track-opacity, 0.25);\n border-radius: var(--rc-slider-track-radius, var(--rc-control-radius, 0));\n overflow: hidden;\n z-index: 0;\n }\n\n ::slotted([slot=\"track-background\"]) {\n position: absolute;\n inset: 0;\n pointer-events: none;\n }\n\n .rc-slider-progress {\n inset-block: 0;\n background: var(--rc-slider-progress-background, var(--rc-accent, Highlight));\n border-radius: inherit;\n z-index: 1;\n }\n\n ::slotted(input[type=\"range\"]) {\n position: absolute;\n inset: 0;\n inline-size: 100%;\n block-size: 100%;\n margin: 0;\n background: transparent;\n z-index: 2;\n }\n\n .rc-slider-value {\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n color: var(--rc-slider-value-color, var(--rc-text-disabled, GrayText));\n }\n\n .rc-slider-root[data-display=\"float\"] .rc-slider-value {\n position: absolute;\n inset-block-start: var(--rc-slider-float-value-block-offset, -1.4em);\n transform: translateX(-50%);\n pointer-events: none;\n z-index: 3;\n }\n\n :host([orientation=\"vertical\"]) {\n display: inline-block;\n }\n\n :host([orientation=\"vertical\"]) .rc-slider-control {\n inline-size: var(--rc-slider-control-size, var(--rc-control-block-size, 1.5rem));\n block-size: var(--rc-slider-vertical-size, 12.5rem);\n }\n\n :host([orientation=\"vertical\"]) .rc-slider-track {\n inset-block: 0;\n inset-inline: calc(50% - var(--rc-slider-track-size, 0.1875rem) / 2);\n inline-size: var(--rc-slider-track-size, 0.1875rem);\n block-size: auto;\n }\n\n :host([orientation=\"vertical\"]) .rc-slider-progress {\n inset-inline: 0;\n }\n\n :host([orientation=\"vertical\"]) ::slotted(input[type=\"range\"]) {\n writing-mode: vertical-lr;\n direction: rtl;\n }\n\n :host([orientation=\"vertical\"]) .rc-slider-root[data-display=\"float\"] .rc-slider-value {\n inset-block-start: auto;\n inset-inline-start: var(--rc-slider-float-value-inline-offset, calc(100% + 0.5rem));\n transform: translateY(50%);\n }\n `;\n\n /** Minimum slider value. */\n @property({ type: Number }) min = 0;\n\n /** Maximum slider value. */\n @property({ type: Number }) max = 100;\n\n /** Slider step. */\n @property({ type: Number }) step = 1;\n\n private _value: number | undefined;\n private _defaultValue: number | undefined;\n private _valueInitialized = false;\n\n /** Current slider value. */\n @property({ type: Number })\n get value(): number {\n return this._value ?? this._defaultValue ?? this._nativeInputValue;\n }\n set value(v: number) {\n const old = this._value;\n this._value = v;\n this._valueInitialized = true;\n this._applyValueToInput(v);\n this.requestUpdate(\"value\", old);\n }\n\n /** Initial uncontrolled slider value. Has no effect after the first user interaction or `value` write. */\n @property({ type: Number, attribute: \"default-value\" })\n get defaultValue(): number | undefined {\n return this._defaultValue;\n }\n set defaultValue(v: number | undefined) {\n const old = this._defaultValue;\n this._defaultValue = v;\n if (\n !this._valueInitialized &&\n this._value === undefined &&\n v !== undefined\n ) {\n this._applyValueToInput(v);\n this.requestUpdate(\"value\", undefined);\n }\n this.requestUpdate(\"defaultValue\", old);\n }\n\n /** Disable the underlying input. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Prevents edits while preserving normal display. Not a native range attribute. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /**\n * Controls the live value display.\n *\n * - Absent (default) — no value shown.\n * - `display` or `display=\"float\"` — floats above the thumb.\n * - `display=\"inline-start\"` — rendered before the track, inline in the grid.\n * - `display=\"inline-end\"` — rendered after the track, inline in the grid.\n */\n @property({ reflect: true, converter: displayConverter })\n display: DisplayValue = null;\n\n /** Screen-reader value text. When set, forwarded as `aria-valuetext` on the native input. */\n @property({ attribute: \"value-text\" }) valueText = \"\";\n\n /** Orientation; reflected as an attribute and forwarded to `aria-orientation`. */\n @property({ reflect: true }) orientation: \"horizontal\" | \"vertical\" =\n \"horizontal\";\n\n private _$nativeInput: HTMLInputElement | null = null;\n\n private readonly _nativeInputController = new NativeChildController<HTMLInputElement>(this, {\n selector: ':scope > input[type=\"range\"]',\n observe: true,\n onChange: ($input, $previous) => this._setupInput($input, $previous),\n onMissing: () => {\n if (import.meta.env.DEV) {\n warnMissingDirectChild(this, {\n selector: ':scope > input[type=\"range\"]',\n message: '[rc-slider] Requires a child <input type=\"range\"> element.',\n });\n }\n },\n });\n\n override disconnectedCallback(): void {\n this._unwireInput();\n super.disconnectedCallback();\n }\n\n override updated(): void {\n const $input = this._$nativeInput;\n if (!$input) return;\n\n $input.disabled = this.disabled;\n this._syncAriaAttributes($input);\n }\n\n override render() {\n const $input = this._$nativeInput;\n if (!$input) return nothing;\n\n const valueDisplay = html`\n <span\n part=\"value-display\"\n class=\"rc-slider-value\"\n style=${ifDefined(\n this.display === \"float\" ? this._floatStyle() : undefined,\n )}\n aria-hidden=\"true\"\n >\n <slot name=\"value-display\">${this._displayText}</slot>\n </span>\n `;\n\n return html`\n <div\n part=\"root\"\n class=\"rc-slider-root\"\n data-display=${this.display ?? nothing}\n data-orientation=${this.orientation}\n data-readonly=${this.readonly ? \"\" : nothing}\n data-disabled=${this.disabled ? \"\" : nothing}\n data-has-value-text=${this.valueText ? \"\" : nothing}\n >\n ${this.display === \"inline-start\" ? valueDisplay : nothing}\n\n <span part=\"control\" class=\"rc-slider-control\">\n <span part=\"track\" class=\"rc-slider-track\" aria-hidden=\"true\">\n <slot name=\"track-background\"></slot>\n <span\n part=\"progress\"\n class=\"rc-slider-progress\"\n style=${this._progressStyle()}\n ></span>\n </span>\n\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n ${this.display === \"float\" ? valueDisplay : nothing}\n </span>\n\n ${this.display === \"inline-end\" ? valueDisplay : nothing}\n </div>\n `;\n }\n\n private get _displayText(): string {\n return this.valueText || String(this.value);\n }\n\n private get _nativeInputValue(): number {\n const value = this._$nativeInput?.valueAsNumber;\n return value === undefined || isNaN(value) ? 0 : value;\n }\n\n private _setupInput($input: HTMLInputElement | null, $previous?: HTMLInputElement | null): void {\n if ($previous && $previous !== $input) {\n this._unwireInput($previous);\n }\n\n if (!$input) {\n this._$nativeInput = null;\n return;\n }\n\n // Mirror disabled state from the native input if not explicitly set on the host.\n // Pre-upgrade markup may carry <input disabled> before the component upgrades.\n if (!this.hasAttribute(\"disabled\") && $input.disabled) {\n this.disabled = true;\n }\n\n this._$nativeInput = $input;\n this._applyInitialValueToInput($input);\n this._wireInput($input);\n this.requestUpdate();\n }\n\n private _onDefaultSlotChange = (): void => {\n this._nativeInputController.sync();\n this.requestUpdate();\n };\n\n private _applyInitialValueToInput($input: HTMLInputElement): void {\n if (this._value !== undefined) {\n this._applyValueToInput(this._value);\n return;\n }\n\n if (this._defaultValue !== undefined) {\n this._applyValueToInput(this._defaultValue);\n return;\n }\n\n const value = $input.valueAsNumber;\n if (!isNaN(value)) {\n this._defaultValue = value;\n }\n }\n\n private _applyValueToInput(value: number): void {\n if (!this._$nativeInput) return;\n\n this._$nativeInput.value = String(value);\n }\n\n private _wireInput($input: HTMLInputElement): void {\n $input.addEventListener(\"input\", this._onInput);\n $input.addEventListener(\"change\", this._onChange);\n $input.addEventListener(\"keydown\", this._onKeydown);\n }\n\n private _unwireInput($input = this._$nativeInput): void {\n $input?.removeEventListener(\"input\", this._onInput);\n $input?.removeEventListener(\"change\", this._onChange);\n $input?.removeEventListener(\"keydown\", this._onKeydown);\n }\n\n private _syncAriaAttributes($input: HTMLInputElement): void {\n if (this.valueText) {\n $input.setAttribute(\"aria-valuetext\", this.valueText);\n } else {\n $input.removeAttribute(\"aria-valuetext\");\n }\n\n if (this.orientation === \"vertical\") {\n $input.setAttribute(\"aria-orientation\", \"vertical\");\n } else {\n $input.removeAttribute(\"aria-orientation\");\n }\n\n if (this.readonly) {\n $input.setAttribute(\"aria-readonly\", \"true\");\n } else {\n $input.removeAttribute(\"aria-readonly\");\n }\n }\n\n private readonly _onInput = (e: Event): void => {\n this._handleRangeEvent(e, \"rc-slider-input\");\n };\n\n private readonly _onChange = (e: Event): void => {\n this._handleRangeEvent(e, \"rc-slider-change\");\n };\n\n private _handleRangeEvent(\n e: Event,\n type: \"rc-slider-input\" | \"rc-slider-change\",\n ): void {\n const $input = e.currentTarget as HTMLInputElement;\n\n if (this.readonly) {\n $input.value = String(this.value);\n return;\n }\n\n this._commitInputValue($input);\n\n this.dispatchEvent(\n new CustomEvent<RCSliderValueEvent>(type, {\n bubbles: true,\n composed: true,\n detail: { value: this.value },\n }),\n );\n }\n\n private readonly _onKeydown = (e: KeyboardEvent): void => {\n if (this.disabled || this.readonly) return;\n if (e.key !== \"PageUp\" && e.key !== \"PageDown\") return;\n\n e.preventDefault();\n const $input = e.currentTarget as HTMLInputElement;\n\n if (e.key === \"PageUp\") $input.stepUp(10);\n else $input.stepDown(10);\n\n this._commitInputValue($input);\n\n this.dispatchEvent(\n new CustomEvent<RCSliderValueEvent>(\"rc-slider-input\", {\n bubbles: true,\n composed: true,\n detail: { value: this.value },\n }),\n );\n };\n\n private _commitInputValue($input: HTMLInputElement): void {\n const old = this.value;\n\n this._value = $input.valueAsNumber;\n this._valueInitialized = true;\n\n this.requestUpdate(\"value\", old);\n }\n\n private _progressStyle(): string {\n const $input = this._$nativeInput;\n if (!$input) return \"\";\n\n const min = parseAttr($input.min, 0);\n const max = parseAttr($input.max, 100);\n const pct = valueToPercent($input.valueAsNumber, min, max) * 100;\n\n if (this.orientation === \"vertical\") {\n return `bottom:0%;height:${pct.toFixed(3)}%`;\n }\n\n return `left:0%;width:${pct.toFixed(3)}%`;\n }\n\n private _floatStyle(): string {\n const $input = this._$nativeInput;\n if (!$input) return \"\";\n\n const min = parseAttr($input.min, 0);\n const max = parseAttr($input.max, 100);\n const pct = valueToPercent($input.valueAsNumber, min, max);\n const k = (1 - pct * 2).toFixed(4);\n\n if (this.orientation === \"vertical\") {\n return `bottom:calc(${(pct * 100).toFixed(3)}% + ${k} * var(--rc-thumb-radius, 9px))`;\n }\n\n return `left:calc(${(pct * 100).toFixed(3)}% + ${k} * var(--rc-thumb-radius, 9px))`;\n }\n}\n\nexport default RCSlider;\n"],"names":["displayConverter","v","parseAttr","s","defaultVal","n","_RCSlider","LitElement","NativeChildController","$input","$previous","e","old","nothing","valueDisplay","html","ifDefined","value","type","min","max","pct","valueToPercent","k","css","RCSlider","__decorateClass","property"],"mappings":"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"}
|
|
File without changes
|