@rcarls/rc-range-slider 0.1.0 → 0.3.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/README.md +3 -2
- package/dist/custom-elements.json +18 -1
- package/dist/{rc-range-slider-CL02oFwb.js → rc-range-slider-ZmdGXQZw.js} +28 -22
- package/dist/rc-range-slider-ZmdGXQZw.js.map +1 -0
- package/dist/rc-range-slider-define.js +1 -1
- package/dist/rc-range-slider.js +1 -1
- package/dist/types/packages/rc-range-slider/src/rc-range-slider.d.ts +7 -2
- package/package.json +7 -10
- package/dist/demo.css +0 -85
- package/dist/demo.js +0 -40
- package/dist/rc-range-slider-CL02oFwb.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# @rcarls/rc-range-slider
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
Two-thumb range slider backed by native range inputs for min/max values, following the [WAI-ARIA Multi-Thumb Slider pattern](https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/).
|
|
4
|
+
|
|
5
|
+
Docs: [https://richardcarls.github.io/rc-webcomponents/components/rc-range-slider](https://richardcarls.github.io/rc-webcomponents/components/rc-range-slider).
|
|
5
6
|
|
|
6
7
|
`rc-range-slider` progressively enhances two direct child
|
|
7
8
|
`<input type="range">` elements. Before upgrade, those inputs are the usable
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"declarations": [
|
|
47
47
|
{
|
|
48
48
|
"kind": "class",
|
|
49
|
-
"description": "
|
|
49
|
+
"description": "Two-thumb range slider backed by native range inputs for min/max values, following the\nWAI-ARIA Multi-Thumb Slider pattern.\n\nConsumers provide two direct child `<input type=\"range\">` elements. Before\nupgrade, those inputs are the usable progressive-enhancement fallback. After\nupgrade, the inputs remain in light DOM as hidden form reflectors while the\nshadow thumbs become the focusable, accessible interaction surface.\n\nForm participation is handled natively by each input's `name` attribute.",
|
|
50
50
|
"name": "RCRangeSlider",
|
|
51
51
|
"cssProperties": [
|
|
52
52
|
{
|
|
@@ -389,6 +389,13 @@
|
|
|
389
389
|
"privacy": "private",
|
|
390
390
|
"default": "false"
|
|
391
391
|
},
|
|
392
|
+
{
|
|
393
|
+
"kind": "field",
|
|
394
|
+
"name": "_rangeInputController",
|
|
395
|
+
"privacy": "private",
|
|
396
|
+
"readonly": true,
|
|
397
|
+
"default": "new NativeChildController<HTMLInputElement>(this, { selector: ':scope > input[type=\"range\"]', observe: true, onChange: () => this._resetInputs(), onMissing: () => { if (import.meta.env.DEV) { warnMissingDirectChild(this, { selector: ':scope > input[type=\"range\"]', message: '[rc-range-slider] Requires two child <input type=\"range\"> elements.', }); } }, })"
|
|
398
|
+
},
|
|
392
399
|
{
|
|
393
400
|
"kind": "method",
|
|
394
401
|
"name": "_renderThumb",
|
|
@@ -418,6 +425,16 @@
|
|
|
418
425
|
"name": "_onDefaultSlotChange",
|
|
419
426
|
"privacy": "private"
|
|
420
427
|
},
|
|
428
|
+
{
|
|
429
|
+
"kind": "method",
|
|
430
|
+
"name": "_resetInputs",
|
|
431
|
+
"privacy": "private",
|
|
432
|
+
"return": {
|
|
433
|
+
"type": {
|
|
434
|
+
"text": "void"
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
},
|
|
421
438
|
{
|
|
422
439
|
"kind": "field",
|
|
423
440
|
"name": "_nativeInputValue",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { LitElement as
|
|
2
|
-
import { property as h, state as
|
|
3
|
-
import { snapToStep as _, valueToPercent as b } from "@rcarls/rc-common";
|
|
4
|
-
var
|
|
5
|
-
for (var i = r > 1 ? void 0 : r ?
|
|
1
|
+
import { LitElement as x, css as k, nothing as u, html as m } from "lit";
|
|
2
|
+
import { property as h, state as I } from "lit/decorators.js";
|
|
3
|
+
import { NativeChildController as T, getDirectChildren as C, snapToStep as _, valueToPercent as b } from "@rcarls/rc-common";
|
|
4
|
+
var $ = Object.defineProperty, z = Object.getOwnPropertyDescriptor, n = (o, t, e, r) => {
|
|
5
|
+
for (var i = r > 1 ? void 0 : r ? z(t, e) : t, a = o.length - 1, l; a >= 0; a--)
|
|
6
6
|
(l = o[a]) && (i = (r ? l(t, e, i) : l(i)) || i);
|
|
7
|
-
return r && i &&
|
|
7
|
+
return r && i && $(t, e, i), i;
|
|
8
8
|
};
|
|
9
|
-
const
|
|
9
|
+
const P = {
|
|
10
10
|
fromAttribute(o) {
|
|
11
11
|
return o === null ? null : o === "" || o === "float" ? "float" : o === "inline-start" ? "inline-start" : o === "inline-end" ? "inline-end" : null;
|
|
12
12
|
},
|
|
@@ -19,10 +19,16 @@ function v(o, t) {
|
|
|
19
19
|
const e = parseFloat(o);
|
|
20
20
|
return isNaN(e) ? t : e;
|
|
21
21
|
}
|
|
22
|
-
const f = class f extends
|
|
22
|
+
const f = class f extends x {
|
|
23
23
|
constructor() {
|
|
24
|
-
super(...arguments), this.min = 0, this.max = 100, this.step = 1, this._valueInitialized = !1, this.disabled = !1, this.readonly = !1, this.lowLabel = "Minimum", this.highLabel = "Maximum", this.lowValueText = "", this.highValueText = "", this.display = null, this.orientation = "horizontal", this._lowValue = 0, this._highValue = 100, this._lowInput = null, this._highInput = null, this._dragThumb = null, this._dragPointerId = null, this._addedHostRole = !1, this.
|
|
25
|
-
|
|
24
|
+
super(...arguments), this.min = 0, this.max = 100, this.step = 1, this._valueInitialized = !1, this.disabled = !1, this.readonly = !1, this.lowLabel = "Minimum", this.highLabel = "Maximum", this.lowValueText = "", this.highValueText = "", this.display = null, this.orientation = "horizontal", this._lowValue = 0, this._highValue = 100, this._lowInput = null, this._highInput = null, this._dragThumb = null, this._dragPointerId = null, this._addedHostRole = !1, this._rangeInputController = new T(this, {
|
|
25
|
+
selector: ':scope > input[type="range"]',
|
|
26
|
+
observe: !0,
|
|
27
|
+
onChange: () => this._resetInputs(),
|
|
28
|
+
onMissing: () => {
|
|
29
|
+
}
|
|
30
|
+
}), this._onDefaultSlotChange = () => {
|
|
31
|
+
this._rangeInputController.sync(), this._resetInputs();
|
|
26
32
|
}, this._onLowInput = (t) => {
|
|
27
33
|
if (this.readonly) {
|
|
28
34
|
this._applyValueToInputs([this._lowValue, this._highValue]);
|
|
@@ -72,7 +78,7 @@ const f = class f extends I {
|
|
|
72
78
|
this._defaultValue = t === void 0 ? void 0 : this._normalizeValue(t), !this._valueInitialized && this._value === void 0 && this._defaultValue !== void 0 && (this._applyValueToInputs(this._defaultValue), this.requestUpdate("value", void 0)), this.requestUpdate("defaultValue", e);
|
|
73
79
|
}
|
|
74
80
|
connectedCallback() {
|
|
75
|
-
super.connectedCallback(), this._syncHostRole()
|
|
81
|
+
super.connectedCallback(), this._syncHostRole();
|
|
76
82
|
}
|
|
77
83
|
disconnectedCallback() {
|
|
78
84
|
this._unwireInputs(), this._restoreInputs(), this._addedHostRole && (this.removeAttribute("role"), this._addedHostRole = !1), super.disconnectedCallback();
|
|
@@ -163,18 +169,18 @@ const f = class f extends I {
|
|
|
163
169
|
* reflectors.
|
|
164
170
|
*/
|
|
165
171
|
_findInputs() {
|
|
166
|
-
const t =
|
|
167
|
-
this
|
|
172
|
+
const t = C(
|
|
173
|
+
this,
|
|
174
|
+
':scope > input[type="range"]'
|
|
168
175
|
).slice(0, 2);
|
|
169
|
-
if (t.length < 2)
|
|
170
|
-
console.warn(
|
|
171
|
-
'[rc-range-slider] Requires two child <input type="range"> elements.'
|
|
172
|
-
);
|
|
176
|
+
if (t.length < 2)
|
|
173
177
|
return;
|
|
174
|
-
}
|
|
175
178
|
const [e, r] = t;
|
|
176
179
|
!this.hasAttribute("disabled") && (e.disabled || r.disabled) && (this.disabled = !0), this._lowInput = e, this._highInput = r, this._applyInitialValueToInputs(e, r), this._wireInput(e, this._onLowInput, this._onLowChange), this._wireInput(r, this._onHighInput, this._onHighChange), this._syncInputReflectors();
|
|
177
180
|
}
|
|
181
|
+
_resetInputs() {
|
|
182
|
+
this._unwireInputs(), this._restoreInputs(), this._findInputs(), this.requestUpdate();
|
|
183
|
+
}
|
|
178
184
|
get _nativeInputValue() {
|
|
179
185
|
const t = this._lowInput?.valueAsNumber, e = this._highInput?.valueAsNumber;
|
|
180
186
|
return [
|
|
@@ -596,18 +602,18 @@ n([
|
|
|
596
602
|
h({ attribute: "high-value-text" })
|
|
597
603
|
], s.prototype, "highValueText", 2);
|
|
598
604
|
n([
|
|
599
|
-
h({ reflect: !0, converter:
|
|
605
|
+
h({ reflect: !0, converter: P })
|
|
600
606
|
], s.prototype, "display", 2);
|
|
601
607
|
n([
|
|
602
608
|
h({ reflect: !0 })
|
|
603
609
|
], s.prototype, "orientation", 2);
|
|
604
610
|
n([
|
|
605
|
-
|
|
611
|
+
I()
|
|
606
612
|
], s.prototype, "_lowValue", 2);
|
|
607
613
|
n([
|
|
608
|
-
|
|
614
|
+
I()
|
|
609
615
|
], s.prototype, "_highValue", 2);
|
|
610
616
|
export {
|
|
611
617
|
s as R
|
|
612
618
|
};
|
|
613
|
-
//# sourceMappingURL=rc-range-slider-
|
|
619
|
+
//# sourceMappingURL=rc-range-slider-ZmdGXQZw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-range-slider-ZmdGXQZw.js","sources":["../src/rc-range-slider.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from \"lit\";\nimport type { ComplexAttributeConverter } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport {\n NativeChildController,\n getDirectChildren,\n snapToStep,\n valueToPercent,\n warnMissingDirectChild,\n} from \"@rcarls/rc-common\";\n\nexport interface RCRangeSliderValueEvent {\n /** Current [low, high] value tuple. */\n value: [number, number];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"rc-range-slider\": RCRangeSlider;\n }\n\n interface HTMLElementEventMap {\n \"rc-range-slider-input\": CustomEvent<RCRangeSliderValueEvent>;\n \"rc-range-slider-change\": CustomEvent<RCRangeSliderValueEvent>;\n }\n}\n\ntype DisplayValue = \"float\" | \"inline-start\" | \"inline-end\" | null;\ntype RangeThumb = \"low\" | \"high\";\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\n const n = parseFloat(s);\n\n return isNaN(n) ? defaultVal : n;\n}\n\n/**\n * Two-thumb range slider backed by native range inputs for min/max values, following the\n * WAI-ARIA Multi-Thumb Slider pattern.\n *\n * Consumers provide two direct child `<input type=\"range\">` elements. Before\n * upgrade, those inputs are the usable progressive-enhancement fallback. After\n * upgrade, the inputs remain in light DOM as hidden form reflectors while the\n * shadow thumbs become the focusable, accessible interaction surface.\n *\n * Form participation is handled natively by each input's `name` attribute.\n *\n * @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-range-slider rc-range-slider docs}\n * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/ WAI-ARIA Multi-Thumb Slider pattern}\n *\n * @slot - Consumer-provided native range inputs.\n * @slot track-background - Optional decorative content rendered inside the track before the selected range fill.\n * @slot low-value-display - Optional replacement for the low value text.\n * @slot high-value-display - Optional replacement for the high value text.\n *\n * @fires rc-range-slider-input - Fires while either thumb moves. Detail: `{ value }`.\n * @fires rc-range-slider-change - Fires when a thumb commits a new value. Detail: `{ value }`.\n *\n * @cssprop [--rc-range-slider-accent=Highlight] - Accent color for selected range, thumb border, focus, hover, and active states.\n * @cssprop [--rc-range-slider-gap=var(--rc-control-gap)] - Gap between track and inline value display.\n * @cssprop [--rc-range-slider-control-size=var(--rc-control-block-size)] - Track hit-area block size.\n * @cssprop [--rc-range-slider-track-background=color-mix(in srgb, CanvasText 25%, Canvas)] - Unselected track color.\n * @cssprop [--rc-range-slider-track-radius=var(--rc-control-radius)] - Track border radius.\n * @cssprop [--rc-range-slider-thumb-background=ButtonFace] - Thumb background color.\n * @cssprop [--rc-range-slider-thumb-border=var(--rc-range-slider-accent)] - Thumb border color.\n * @cssprop [--rc-range-slider-thumb-size=1.125rem] - Visual thumb inline/block size.\n * @cssprop [--rc-range-slider-value-color=var(--rc-text-disabled)] - Value display text color.\n * @cssprop [--rc-thumb-radius=9px] - Half the thumb width; used to align float value displays and range fill.\n * @cssprop [--rc-range-slider-float-value-block-offset=-1.4em] - Block-axis offset for horizontal float value displays.\n * @cssprop [--rc-range-slider-float-value-inline-offset=calc(100% + 0.5rem)] - Inline-axis offset for vertical float value displays.\n *\n * @csspart root - Root layout wrapper.\n * @csspart group - Slider group wrapper.\n * @csspart track - Visual slider track.\n * @csspart range - Filled selected range segment.\n * @csspart thumb - Shared custom slider thumb.\n * @csspart low-thumb - Low-value custom slider thumb.\n * @csspart high-thumb - High-value custom slider thumb.\n * @csspart value-display - Shared rendered value text.\n * @csspart low-value-display - Rendered low value text.\n * @csspart high-value-display - Rendered high value text.\n */\nexport class RCRangeSlider extends LitElement {\n static override styles = css`\n :host {\n --rc-range-slider-accent: var(--rc-accent, Highlight);\n --rc-range-slider-track-background: color-mix(in srgb, CanvasText 25%, Canvas);\n --rc-range-slider-range-background: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-background: ButtonFace;\n --rc-range-slider-thumb-border: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-hover-background: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-hover-border: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-active-background: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-active-border: var(--rc-range-slider-accent);\n --rc-range-slider-focus-outline: var(--rc-range-slider-accent);\n display: block;\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 :host([disabled]) {\n --rc-range-slider-accent: GrayText;\n --rc-range-slider-track-background: color-mix(in srgb, GrayText 35%, Canvas);\n --rc-range-slider-range-background: GrayText;\n --rc-range-slider-thumb-border: GrayText;\n --rc-range-slider-thumb-hover-background: ButtonFace;\n --rc-range-slider-thumb-hover-border: GrayText;\n --rc-range-slider-thumb-active-background: ButtonFace;\n --rc-range-slider-thumb-active-border: GrayText;\n --rc-range-slider-focus-outline: GrayText;\n }\n\n .rc-range-slider-root {\n display: grid;\n gap: var(--rc-range-slider-gap, var(--rc-control-gap, 0.5rem));\n align-items: center;\n }\n\n .rc-range-slider-root[data-display=\"inline-start\"] {\n grid-template-columns: auto minmax(0, 1fr);\n }\n\n .rc-range-slider-root[data-display=\"inline-end\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n\n .rc-range-slider-group {\n position: relative;\n display: block;\n min-width: 0;\n min-height: var(--rc-range-slider-control-size, var(--rc-control-block-size, 1.5rem));\n touch-action: none;\n }\n\n .rc-range-slider-track,\n .rc-range-slider-range {\n position: absolute;\n pointer-events: none;\n }\n\n .rc-range-slider-track {\n inset-inline: 0;\n inset-block: calc(50% - var(--rc-range-slider-track-size, 0.1875rem) / 2);\n block-size: var(--rc-range-slider-track-size, 0.1875rem);\n background: var(--rc-range-slider-track-background);\n border-radius: var(--rc-range-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-range-slider-range {\n inset-block: 0;\n background: var(--rc-range-slider-range-background);\n border-radius: inherit;\n z-index: 1;\n }\n\n .rc-range-slider-thumb {\n position: absolute;\n z-index: 2;\n inline-size: var(--rc-range-slider-thumb-size, 1.125rem);\n block-size: var(--rc-range-slider-thumb-size, 1.125rem);\n background: var(--rc-range-slider-thumb-background);\n border: 2px solid var(--rc-range-slider-thumb-border);\n border-radius: 50%;\n box-sizing: border-box;\n cursor: grab;\n transform: translate(-50%, -50%);\n transition:\n background-color 120ms ease,\n border-color 120ms ease,\n box-shadow 120ms ease,\n transform var(--rc-motion-duration, 120ms) ease;\n }\n\n .rc-range-slider-thumb:focus-visible {\n outline: var(--rc-focus-ring, 2px solid var(--rc-range-slider-focus-outline));\n outline-offset: var(--rc-focus-ring-offset, 2px);\n }\n\n :host(:not([disabled]):not([readonly])) .rc-range-slider-thumb:hover {\n background: var(--rc-range-slider-thumb-hover-background);\n border-color: var(--rc-range-slider-thumb-hover-border);\n box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--rc-range-slider-accent) 20%, transparent);\n }\n\n :host(:not([disabled]):not([readonly])) .rc-range-slider-thumb:active {\n background: var(--rc-range-slider-thumb-active-background);\n border-color: var(--rc-range-slider-thumb-active-border);\n box-shadow: 0 0 0 0.35rem color-mix(in srgb, var(--rc-range-slider-accent) 28%, transparent);\n cursor: grabbing;\n }\n\n :host(:not([disabled]):not([readonly])) .rc-range-slider-group:hover .rc-range-slider-track {\n background: color-mix(in srgb, var(--rc-range-slider-track-background) 70%, CanvasText);\n }\n\n .rc-range-slider-thumb[aria-disabled=\"true\"],\n .rc-range-slider-thumb[aria-readonly=\"true\"] {\n cursor: default;\n }\n\n :host([disabled]) .rc-range-slider-root {\n opacity: 0.65;\n }\n\n ::slotted(input[type=\"range\"]) {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip-path: inset(50%);\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n }\n\n .rc-range-slider-values {\n pointer-events: none;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n color: var(--rc-range-slider-value-color, var(--rc-text-disabled, GrayText));\n }\n\n .rc-range-slider-root[data-display=\"float\"] .rc-range-slider-values {\n position: absolute;\n inset: 0;\n z-index: 5;\n }\n\n .rc-range-slider-root[data-display=\"float\"] .rc-range-slider-value {\n position: absolute;\n inset-block-start: var(--rc-range-slider-float-value-block-offset, -1.4em);\n transform: translateX(-50%);\n }\n\n .rc-range-slider-root[data-display=\"inline-start\"] .rc-range-slider-values,\n .rc-range-slider-root[data-display=\"inline-end\"] .rc-range-slider-values {\n display: flex;\n gap: 0.25em;\n align-items: center;\n }\n\n .rc-range-slider-root[data-display=\"inline-start\"] .rc-range-slider-value:first-child::after,\n .rc-range-slider-root[data-display=\"inline-end\"] .rc-range-slider-value:first-child::after {\n content: \" -\";\n }\n\n :host([orientation=\"vertical\"]) {\n display: inline-block;\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-group {\n inline-size: var(--rc-range-slider-control-size, var(--rc-control-block-size, 1.5rem));\n block-size: var(--rc-range-slider-vertical-size, 12.5rem);\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-track {\n inset-block: 0;\n inset-inline: calc(50% - var(--rc-range-slider-track-size, 0.1875rem) / 2);\n inline-size: var(--rc-range-slider-track-size, 0.1875rem);\n block-size: auto;\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-range {\n inset-inline: 0;\n inset-block-start: auto;\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-thumb {\n inset-inline-start: 50%;\n transform: translate(-50%, 50%);\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-root[data-display=\"float\"] .rc-range-slider-value {\n inset-block-start: auto;\n inset-inline-start: var(--rc-range-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, number] | undefined;\n private _defaultValue: [number, number] | undefined;\n private _valueInitialized = false;\n\n /** Current [low, high] value. Assign a new tuple reference to trigger a re-render. */\n @property({ attribute: false })\n get value(): [number, number] {\n return this._value ?? this._defaultValue ?? this._nativeInputValue;\n }\n set value(v: [number, number]) {\n const old = this._value;\n this._value = this._normalizeValue(v);\n this._valueInitialized = true;\n this._applyValueToInputs(this._value);\n if (this._value !== old) {\n this.requestUpdate(\"value\", old);\n }\n }\n\n /** Initial uncontrolled [low, high] value. Has no effect after the first user interaction or `value` write. */\n @property({ attribute: false })\n get defaultValue(): [number, number] | undefined {\n return this._defaultValue;\n }\n set defaultValue(v: [number, number] | undefined) {\n const old = this._defaultValue;\n this._defaultValue = v === undefined ? undefined : this._normalizeValue(v);\n if (\n !this._valueInitialized &&\n this._value === undefined &&\n this._defaultValue !== undefined\n ) {\n this._applyValueToInputs(this._defaultValue);\n this.requestUpdate(\"value\", undefined);\n }\n this.requestUpdate(\"defaultValue\", old);\n }\n\n /** Disable both thumbs and their hidden native input reflectors. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Prevents edits while preserving normal focus and display. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Accessible label for the low (min) thumb when the input does not provide one. */\n @property({ attribute: \"low-label\" }) lowLabel = \"Minimum\";\n\n /** Accessible label for the high (max) thumb when the input does not provide one. */\n @property({ attribute: \"high-label\" }) highLabel = \"Maximum\";\n\n /** Formatted screen-reader text for the low value. Falls back to the raw number. */\n @property({ attribute: \"low-value-text\" }) lowValueText = \"\";\n\n /** Formatted screen-reader text for the high value. Falls back to the raw number. */\n @property({ attribute: \"high-value-text\" }) highValueText = \"\";\n\n /**\n * Controls the live value display.\n *\n * - Absent (default) — no value shown.\n * - `display` or `display=\"float\"` — floats each value above its thumb.\n * - `display=\"inline-start\"` — renders the value container before the track.\n * - `display=\"inline-end\"` — renders the value container after the track.\n */\n @property({ reflect: true, converter: displayConverter })\n display: DisplayValue = null;\n\n /** Orientation; reflected as an attribute and forwarded to custom thumbs. */\n @property({ reflect: true }) orientation: \"horizontal\" | \"vertical\" =\n \"horizontal\";\n\n @state() private _lowValue = 0;\n @state() private _highValue = 100;\n\n private _lowInput: HTMLInputElement | null = null;\n private _highInput: HTMLInputElement | null = null;\n private _dragThumb: RangeThumb | null = null;\n private _dragPointerId: number | null = null;\n private _addedHostRole = false;\n private readonly _rangeInputController = new NativeChildController<HTMLInputElement>(this, {\n selector: ':scope > input[type=\"range\"]',\n observe: true,\n onChange: () => this._resetInputs(),\n onMissing: () => {\n if (import.meta.env.DEV) {\n warnMissingDirectChild(this, {\n selector: ':scope > input[type=\"range\"]',\n message: '[rc-range-slider] Requires two child <input type=\"range\"> elements.',\n });\n }\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._syncHostRole();\n }\n\n override disconnectedCallback(): void {\n this._unwireInputs();\n this._restoreInputs();\n if (this._addedHostRole) {\n this.removeAttribute(\"role\");\n this._addedHostRole = false;\n }\n super.disconnectedCallback();\n }\n\n override updated(): void {\n this._syncInputReflectors();\n }\n\n override render() {\n const lo = this._lowInput;\n const hi = this._highInput;\n if (!lo || !hi) return nothing;\n\n const lowText = this.lowValueText || String(this._lowValue);\n const highText = this.highValueText || String(this._highValue);\n\n const valuesContainer = html`\n <span class=\"rc-range-slider-values\" aria-hidden=\"true\">\n <span\n part=\"value-display low-value-display\"\n class=\"rc-range-slider-value\"\n style=${this.display === \"float\"\n ? this._floatStyle(this._lowValue)\n : nothing}\n ><slot name=\"low-value-display\">${lowText}</slot></span\n >\n <span\n part=\"value-display high-value-display\"\n class=\"rc-range-slider-value\"\n style=${this.display === \"float\"\n ? this._floatStyle(this._highValue)\n : nothing}\n ><slot name=\"high-value-display\">${highText}</slot></span\n >\n </span>\n `;\n\n return html`\n <div\n part=\"root\"\n class=\"rc-range-slider-root\"\n data-display=${this.display ?? nothing}\n data-orientation=${this.orientation}\n >\n ${this.display === \"inline-start\" ? valuesContainer : nothing}\n\n <div\n part=\"group\"\n class=\"rc-range-slider-group\"\n @pointerdown=${this._onGroupPointerDown}\n @pointermove=${this._onGroupPointerMove}\n @pointerup=${this._onGroupPointerUp}\n @pointercancel=${this._onGroupPointerCancel}\n >\n <span part=\"track\" class=\"rc-range-slider-track\" aria-hidden=\"true\">\n <slot name=\"track-background\"></slot>\n <span\n part=\"range\"\n class=\"rc-range-slider-range\"\n style=${this._rangeStyle()}\n ></span>\n </span>\n\n ${this._renderThumb(\"low\")} ${this._renderThumb(\"high\")}\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n ${this.display === \"float\" ? valuesContainer : nothing}\n </div>\n\n ${this.display === \"inline-end\" ? valuesContainer : nothing}\n </div>\n `;\n }\n\n private _renderThumb(thumb: RangeThumb) {\n const isLow = thumb === \"low\";\n const input = isLow ? this._lowInput : this._highInput;\n const value = isLow ? this._lowValue : this._highValue;\n const valueText = isLow ? this.lowValueText : this.highValueText;\n const label = this._thumbLabel(thumb);\n const labelledBy = input?.getAttribute(\"aria-labelledby\");\n\n return html`\n <span\n part=${isLow ? \"thumb low-thumb\" : \"thumb high-thumb\"}\n class=\"rc-range-slider-thumb\"\n data-thumb=${thumb}\n role=\"slider\"\n tabindex=${this.disabled ? \"-1\" : \"0\"}\n aria-label=${label ?? nothing}\n aria-labelledby=${labelledBy ?? nothing}\n aria-valuemin=${String(isLow ? this._min() : this._lowValue)}\n aria-valuemax=${String(isLow ? this._highValue : this._max())}\n aria-valuenow=${String(value)}\n aria-valuetext=${valueText || nothing}\n aria-orientation=${this.orientation}\n aria-disabled=${this.disabled ? \"true\" : nothing}\n aria-readonly=${this.readonly ? \"true\" : nothing}\n style=${this._thumbStyle(value)}\n @keydown=${isLow ? this._onLowKeydown : this._onHighKeydown}\n ></span>\n `;\n }\n\n /**\n * Finds the first two child `<input type=\"range\">` elements and wires them.\n * Inputs remain in the DOM permanently as form/progressive-enhancement\n * reflectors.\n */\n private _findInputs(): void {\n const inputs = getDirectChildren<HTMLInputElement>(\n this,\n ':scope > input[type=\"range\"]',\n ).slice(0, 2);\n\n if (inputs.length < 2) {\n if (import.meta.env.DEV && inputs.length > 0) {\n warnMissingDirectChild(this, {\n selector: ':scope > input[type=\"range\"]',\n minimum: 2,\n message: '[rc-range-slider] Requires two child <input type=\"range\"> elements.',\n });\n }\n return;\n }\n\n const [lo, hi] = inputs as [HTMLInputElement, HTMLInputElement];\n\n if (!this.hasAttribute(\"disabled\") && (lo.disabled || hi.disabled)) {\n this.disabled = true;\n }\n\n this._lowInput = lo;\n this._highInput = hi;\n this._applyInitialValueToInputs(lo, hi);\n\n this._wireInput(lo, this._onLowInput, this._onLowChange);\n this._wireInput(hi, this._onHighInput, this._onHighChange);\n this._syncInputReflectors();\n }\n\n private _onDefaultSlotChange = (): void => {\n this._rangeInputController.sync();\n this._resetInputs();\n };\n\n private _resetInputs(): void {\n this._unwireInputs();\n this._restoreInputs();\n this._findInputs();\n this.requestUpdate();\n }\n\n private get _nativeInputValue(): [number, number] {\n const low = this._lowInput?.valueAsNumber;\n const high = this._highInput?.valueAsNumber;\n\n return [\n low === undefined || isNaN(low) ? this.min : low,\n high === undefined || isNaN(high) ? this.max : high,\n ];\n }\n\n private _applyInitialValueToInputs(\n lowInput: HTMLInputElement,\n highInput: HTMLInputElement,\n ): void {\n if (this._value !== undefined) {\n this._applyValueToInputs(this._value);\n return;\n }\n\n if (this._defaultValue !== undefined) {\n this._applyValueToInputs(this._defaultValue);\n return;\n }\n\n const lowValue = lowInput.valueAsNumber;\n const highValue = highInput.valueAsNumber;\n\n this._lowValue = isNaN(lowValue) ? this._min() : lowValue;\n this._highValue = isNaN(highValue) ? this._max() : highValue;\n this._defaultValue = this._normalizeValue([this._lowValue, this._highValue]);\n this._applyValueToInputs(this._defaultValue);\n }\n\n private _applyValueToInputs(value: [number, number]): void {\n const [low, high] = this._normalizeValue(value);\n this._lowValue = low;\n this._highValue = high;\n\n if (this._lowInput) this._lowInput.value = String(low);\n if (this._highInput) this._highInput.value = String(high);\n }\n\n private _setCurrentValue(value: [number, number]): void {\n const [low, high] = this._normalizeValue(value);\n this._value = [low, high];\n this._valueInitialized = true;\n this._applyValueToInputs(this._value);\n this.requestUpdate(\"value\");\n }\n\n private _wireInput(\n input: HTMLInputElement,\n onInput: (e: Event) => void,\n onChange: (e: Event) => void,\n ): void {\n input.addEventListener(\"input\", onInput);\n input.addEventListener(\"change\", onChange);\n }\n\n private _unwireInputs(): void {\n this._lowInput?.removeEventListener(\"input\", this._onLowInput);\n this._lowInput?.removeEventListener(\"change\", this._onLowChange);\n\n this._highInput?.removeEventListener(\"input\", this._onHighInput);\n this._highInput?.removeEventListener(\"change\", this._onHighChange);\n }\n\n private _restoreInputs(): void {\n for (const input of [this._lowInput, this._highInput]) {\n input?.removeAttribute(\"aria-hidden\");\n input?.removeAttribute(\"tabindex\");\n input?.removeAttribute(\"data-rc-range-slider-reflector\");\n input?.style.removeProperty(\"display\");\n }\n }\n\n private _syncInputReflectors(): void {\n const lo = this._lowInput;\n const hi = this._highInput;\n if (!lo || !hi) return;\n\n for (const input of [lo, hi]) {\n input.disabled = this.disabled;\n input.tabIndex = -1;\n input.setAttribute(\"aria-hidden\", \"true\");\n input.setAttribute(\"data-rc-range-slider-reflector\", \"\");\n }\n }\n\n private _syncHostRole(): void {\n if (this.hasAttribute(\"role\")) return;\n\n this.setAttribute(\"role\", \"group\");\n this._addedHostRole = true;\n }\n\n private readonly _onLowInput = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([input.valueAsNumber, this._highValue]);\n this._dispatch(\"rc-range-slider-input\", this.value);\n };\n\n private readonly _onLowChange = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([input.valueAsNumber, this._highValue]);\n this._dispatch(\"rc-range-slider-change\", this.value);\n };\n\n private readonly _onHighInput = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([this._lowValue, input.valueAsNumber]);\n this._dispatch(\"rc-range-slider-input\", this.value);\n };\n\n private readonly _onHighChange = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([this._lowValue, input.valueAsNumber]);\n this._dispatch(\"rc-range-slider-change\", this.value);\n };\n\n /** APG keyboard contract for the low thumb. */\n private readonly _onLowKeydown = (e: KeyboardEvent): void => {\n this._handleThumbKeydown(e, \"low\");\n };\n\n /** APG keyboard contract for the high thumb. */\n private readonly _onHighKeydown = (e: KeyboardEvent): void => {\n this._handleThumbKeydown(e, \"high\");\n };\n\n private _handleThumbKeydown(e: KeyboardEvent, thumb: RangeThumb): void {\n if (this.disabled || this.readonly) return;\n\n const min = this._min();\n const max = this._max();\n const step = this._step();\n const bigStep = step * 10;\n const low = this._lowValue;\n const high = this._highValue;\n const current = thumb === \"low\" ? low : high;\n const effectiveMin = thumb === \"low\" ? min : low;\n const effectiveMax = thumb === \"low\" ? high : max;\n\n let next: number | null = null;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n next = current + step;\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n next = current - step;\n break;\n case \"PageUp\":\n next = current + bigStep;\n break;\n case \"PageDown\":\n next = current - bigStep;\n break;\n case \"Home\":\n next = effectiveMin;\n break;\n case \"End\":\n next = effectiveMax;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n const nextValue = snapToStep(next, effectiveMin, effectiveMax, step);\n if (nextValue === current) return;\n\n this._setThumbValue(thumb, nextValue);\n this._dispatch(\"rc-range-slider-input\", this.value);\n }\n\n private _onGroupPointerDown(e: PointerEvent): void {\n if (this.disabled || this.readonly || e.button !== 0) return;\n\n const thumb = this._nearestThumb(e);\n const thumbEl = this._thumbElement(thumb);\n this._dragThumb = thumb;\n this._dragPointerId = e.pointerId;\n\n e.preventDefault();\n try {\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n } catch {\n // Synthetic browser-test PointerEvents are not active pointer streams.\n }\n thumbEl?.focus();\n this._setThumbValue(thumb, this._valueFromPointer(e, thumb));\n this._dispatch(\"rc-range-slider-input\", this.value);\n }\n\n private _onGroupPointerMove(e: PointerEvent): void {\n if (this._dragPointerId !== e.pointerId || this._dragThumb === null) return;\n\n e.preventDefault();\n this._setThumbValue(this._dragThumb, this._valueFromPointer(e, this._dragThumb));\n this._dispatch(\"rc-range-slider-input\", this.value);\n }\n\n private _onGroupPointerUp(e: PointerEvent): void {\n if (this._dragPointerId !== e.pointerId || this._dragThumb === null) return;\n\n const thumb = this._dragThumb;\n this._dragThumb = null;\n this._dragPointerId = null;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // Synthetic browser-test PointerEvents are not active pointer streams.\n }\n this._dispatch(\"rc-range-slider-change\", this.value);\n this._thumbElement(thumb)?.focus();\n }\n\n private _onGroupPointerCancel(e: PointerEvent): void {\n if (this._dragPointerId !== e.pointerId) return;\n\n this._dragThumb = null;\n this._dragPointerId = null;\n }\n\n private _setThumbValue(thumb: RangeThumb, value: number): void {\n if (thumb === \"low\") {\n this._setCurrentValue([value, this._highValue]);\n return;\n }\n\n this._setCurrentValue([this._lowValue, value]);\n }\n\n private _valueFromPointer(e: PointerEvent, thumb: RangeThumb): number {\n const rect = this._groupRect();\n if (!rect) return thumb === \"low\" ? this._lowValue : this._highValue;\n\n const min = thumb === \"low\" ? this._min() : this._lowValue;\n const max = thumb === \"low\" ? this._highValue : this._max();\n const span = this._max() - this._min();\n if (span <= 0) return min;\n\n const pct =\n this.orientation === \"vertical\"\n ? 1 - (e.clientY - rect.top) / rect.height\n : (e.clientX - rect.left) / rect.width;\n const raw = pct * span + this._min();\n\n return snapToStep(raw, min, max, this._step());\n }\n\n private _nearestThumb(e: PointerEvent): RangeThumb {\n const value = this._valueFromPointer(e, \"low\");\n const lowDistance = Math.abs(value - this._lowValue);\n const highDistance = Math.abs(value - this._highValue);\n\n if (lowDistance === highDistance) {\n return value < this._lowValue ? \"low\" : \"high\";\n }\n\n return lowDistance < highDistance ? \"low\" : \"high\";\n }\n\n private _rangeStyle(): string {\n const loPct = valueToPercent(this._lowValue, this._min(), this._max());\n const hiPct = valueToPercent(this._highValue, this._min(), this._max());\n const loCenter = this._thumbCenterStyle(loPct);\n const hiCenter = this._thumbCenterStyle(hiPct);\n\n if (this.orientation === \"vertical\") {\n return [\n `bottom:${loCenter}`,\n `height:max(0px, calc(${hiCenter} - ${loCenter}))`,\n ].join(\";\");\n }\n\n return [\n `left:${loCenter}`,\n `width:max(0px, calc(${hiCenter} - ${loCenter}))`,\n ].join(\";\");\n }\n\n private _thumbStyle(value: number): string {\n const pct = valueToPercent(value, this._min(), this._max());\n const center = this._thumbCenterStyle(pct);\n\n if (this.orientation === \"vertical\") {\n return `bottom:${center}`;\n }\n\n return `left:${center};top:50%`;\n }\n\n private _thumbCenterStyle(pct: number): string {\n const k = (1 - pct * 2).toFixed(4);\n\n return `calc(${(pct * 100).toFixed(3)}% + ${k} * var(--rc-thumb-radius, 9px))`;\n }\n\n private _floatStyle(value: number): string {\n const pct = valueToPercent(value, this._min(), this._max());\n const center = this._thumbCenterStyle(pct);\n\n if (this.orientation === \"vertical\") {\n return `bottom:${center}`;\n }\n\n return `left:${center}`;\n }\n\n private _normalizeValue([low, high]: [number, number]): [number, number] {\n const min = this._min();\n const max = this._max();\n const steppedLow = snapToStep(low, min, max, this._step());\n const steppedHigh = snapToStep(high, min, max, this._step());\n\n return [Math.min(steppedLow, steppedHigh), Math.max(steppedLow, steppedHigh)];\n }\n\n private _min(): number {\n return parseAttr(this._lowInput?.min ?? \"\", this.min);\n }\n\n private _max(): number {\n return parseAttr(this._highInput?.max ?? \"\", this.max);\n }\n\n private _step(): number {\n return parseAttr(this._lowInput?.step ?? \"\", this.step);\n }\n\n private _groupRect(): DOMRect | null {\n return this.shadowRoot\n ?.querySelector<HTMLElement>(\".rc-range-slider-group\")\n ?.getBoundingClientRect() ?? null;\n }\n\n private _thumbElement(thumb: RangeThumb): HTMLElement | null {\n return (\n this.shadowRoot?.querySelector<HTMLElement>(`[data-thumb=\"${thumb}\"]`) ??\n null\n );\n }\n\n private _thumbLabel(thumb: RangeThumb): string | null {\n const input = thumb === \"low\" ? this._lowInput : this._highInput;\n const fallback = thumb === \"low\" ? this.lowLabel : this.highLabel;\n const explicitLabel = input?.getAttribute(\"aria-label\");\n if (explicitLabel) return explicitLabel;\n\n const nativeLabel = input?.labels?.[0]?.textContent?.trim();\n if (nativeLabel) return nativeLabel;\n\n return fallback || null;\n }\n\n private _dispatch(\n type: \"rc-range-slider-input\" | \"rc-range-slider-change\",\n value: [number, number],\n ): void {\n this.dispatchEvent(\n new CustomEvent<RCRangeSliderValueEvent>(type, {\n bubbles: true,\n composed: true,\n detail: { value },\n }),\n );\n }\n}\n\nexport default RCRangeSlider;\n"],"names":["displayConverter","v","parseAttr","s","defaultVal","n","_RCRangeSlider","LitElement","NativeChildController","e","input","old","lo","hi","nothing","lowText","highText","valuesContainer","html","thumb","isLow","value","valueText","label","labelledBy","inputs","getDirectChildren","low","high","lowInput","highInput","lowValue","highValue","onInput","onChange","min","max","step","bigStep","current","effectiveMin","effectiveMax","next","nextValue","snapToStep","thumbEl","rect","span","raw","lowDistance","highDistance","loPct","valueToPercent","hiPct","loCenter","hiCenter","pct","center","k","steppedLow","steppedHigh","fallback","explicitLabel","nativeLabel","type","css","RCRangeSlider","__decorateClass","property","state"],"mappings":"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"}
|
package/dist/rc-range-slider.js
CHANGED
|
@@ -14,8 +14,8 @@ declare global {
|
|
|
14
14
|
}
|
|
15
15
|
type DisplayValue = "float" | "inline-start" | "inline-end" | null;
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* Two-thumb range slider backed by native range inputs for min/max values, following the
|
|
18
|
+
* WAI-ARIA Multi-Thumb Slider pattern.
|
|
19
19
|
*
|
|
20
20
|
* Consumers provide two direct child `<input type="range">` elements. Before
|
|
21
21
|
* upgrade, those inputs are the usable progressive-enhancement fallback. After
|
|
@@ -24,6 +24,9 @@ type DisplayValue = "float" | "inline-start" | "inline-end" | null;
|
|
|
24
24
|
*
|
|
25
25
|
* Form participation is handled natively by each input's `name` attribute.
|
|
26
26
|
*
|
|
27
|
+
* @see {@link https://richardcarls.github.io/rc-webcomponents/components/rc-range-slider rc-range-slider docs}
|
|
28
|
+
* @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/ WAI-ARIA Multi-Thumb Slider pattern}
|
|
29
|
+
*
|
|
27
30
|
* @slot - Consumer-provided native range inputs.
|
|
28
31
|
* @slot track-background - Optional decorative content rendered inside the track before the selected range fill.
|
|
29
32
|
* @slot low-value-display - Optional replacement for the low value text.
|
|
@@ -103,6 +106,7 @@ export declare class RCRangeSlider extends LitElement {
|
|
|
103
106
|
private _dragThumb;
|
|
104
107
|
private _dragPointerId;
|
|
105
108
|
private _addedHostRole;
|
|
109
|
+
private readonly _rangeInputController;
|
|
106
110
|
connectedCallback(): void;
|
|
107
111
|
disconnectedCallback(): void;
|
|
108
112
|
updated(): void;
|
|
@@ -115,6 +119,7 @@ export declare class RCRangeSlider extends LitElement {
|
|
|
115
119
|
*/
|
|
116
120
|
private _findInputs;
|
|
117
121
|
private _onDefaultSlotChange;
|
|
122
|
+
private _resetInputs;
|
|
118
123
|
private get _nativeInputValue();
|
|
119
124
|
private _applyInitialValueToInputs;
|
|
120
125
|
private _applyValueToInputs;
|
package/package.json
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
7
|
-
"description": "
|
|
6
|
+
"version": "0.3.0",
|
|
7
|
+
"description": "Two-thumb range slider backed by native range inputs for min/max values.",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/richardcarls/rc-webcomponents.git",
|
|
11
11
|
"directory": "packages/rc-range-slider"
|
|
12
12
|
},
|
|
13
|
-
"homepage": "https://github.
|
|
13
|
+
"homepage": "https://richardcarls.github.io/rc-webcomponents/components/rc-range-slider",
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"files": [
|
|
@@ -37,18 +37,15 @@
|
|
|
37
37
|
],
|
|
38
38
|
"customElements": "dist/custom-elements.json",
|
|
39
39
|
"scripts": {
|
|
40
|
-
"dev": "vite",
|
|
41
40
|
"build": "tsc && vite build && cem analyze",
|
|
42
41
|
"cem:analyze": "cem analyze",
|
|
43
42
|
"preview": "vite preview",
|
|
44
|
-
"test:browser": "vitest",
|
|
45
|
-
"test:browser:chrome": "vitest --project=chromium",
|
|
46
|
-
"test:browser:firefox": "vitest --project=firefox"
|
|
47
|
-
"yalc:publish": "yalc publish --push"
|
|
43
|
+
"test:browser": "vitest --run",
|
|
44
|
+
"test:browser:chrome": "vitest --run --project=chromium",
|
|
45
|
+
"test:browser:firefox": "vitest --run --project=firefox"
|
|
48
46
|
},
|
|
49
47
|
"devDependencies": {
|
|
50
48
|
"@custom-elements-manifest/analyzer": "0.11.0",
|
|
51
|
-
"@guanghechen/rollup-plugin-copy": "^6.0.9",
|
|
52
49
|
"@vitest/browser-playwright": "4.1.5",
|
|
53
50
|
"lit": "^3.0.0",
|
|
54
51
|
"playwright": "^1.56.0",
|
|
@@ -60,7 +57,7 @@
|
|
|
60
57
|
"vitest-browser-lit": "^1.0.1"
|
|
61
58
|
},
|
|
62
59
|
"dependencies": {
|
|
63
|
-
"@rcarls/rc-common": "workspace
|
|
60
|
+
"@rcarls/rc-common": "workspace:*"
|
|
64
61
|
},
|
|
65
62
|
"peerDependencies": {
|
|
66
63
|
"lit": "^3.0.0"
|
package/dist/demo.css
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
*, *::before, *::after {
|
|
2
|
-
box-sizing: border-box;
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
:root {
|
|
6
|
-
color-scheme: light dark;
|
|
7
|
-
--rc-accent: Highlight; /* Chrome doesn't support AccentColor on the open web */
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
@supports (color: AccentColor) {
|
|
11
|
-
:root {
|
|
12
|
-
--rc-accent: AccentColor;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
[data-theme="light"] { color-scheme: light; }
|
|
17
|
-
[data-theme="dark"] { color-scheme: dark; }
|
|
18
|
-
|
|
19
|
-
[data-theme="solarized-light"] {
|
|
20
|
-
color-scheme: light;
|
|
21
|
-
--rc-surface: #fdf6e3;
|
|
22
|
-
--rc-text: #657b83;
|
|
23
|
-
--rc-border: 1px solid #93a1a1;
|
|
24
|
-
--rc-shadow: 0 2px 8px rgba(0, 0, 0, .12);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
[data-theme="solarized-dark"] {
|
|
28
|
-
color-scheme: dark;
|
|
29
|
-
--rc-surface: #002b36;
|
|
30
|
-
--rc-text: #839496;
|
|
31
|
-
--rc-border: 1px solid #586e75;
|
|
32
|
-
--rc-shadow: 0 2px 8px rgba(0, 0, 0, .3);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
body {
|
|
36
|
-
font-family: system-ui, sans-serif;
|
|
37
|
-
margin: 0;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.demo-page {
|
|
41
|
-
max-width: 60rem;
|
|
42
|
-
margin: 0 auto;
|
|
43
|
-
padding: 2rem 1.5rem;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.demo-controls {
|
|
47
|
-
display: flex;
|
|
48
|
-
align-items: center;
|
|
49
|
-
gap: 1rem;
|
|
50
|
-
margin-bottom: 2rem;
|
|
51
|
-
padding-bottom: 1rem;
|
|
52
|
-
border-bottom: 1px solid ButtonBorder;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.demo-controls .demo-title {
|
|
56
|
-
flex: 1;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.demo-controls h1 {
|
|
60
|
-
margin: 0 0 0.15rem;
|
|
61
|
-
font-size: 1.5rem;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.demo-controls a {
|
|
65
|
-
font-size: 0.8rem;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.demo-section {
|
|
69
|
-
margin-bottom: 2rem;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
.demo-section h2 {
|
|
73
|
-
margin: 0 0 0.5rem;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
.theme-picker {
|
|
77
|
-
padding: 0.35em 0.75em;
|
|
78
|
-
font-family: inherit;
|
|
79
|
-
font-size: 0.8rem;
|
|
80
|
-
cursor: pointer;
|
|
81
|
-
border: 1px solid ButtonBorder;
|
|
82
|
-
border-radius: 4px;
|
|
83
|
-
background: Canvas;
|
|
84
|
-
color: CanvasText;
|
|
85
|
-
}
|
package/dist/demo.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
const THEMES = ['', 'light', 'dark', 'solarized-light', 'solarized-dark'];
|
|
2
|
-
const LABELS = ['Auto', 'Light', 'Dark', 'Solarized ☀', 'Solarized ☾'];
|
|
3
|
-
|
|
4
|
-
const stored = localStorage.getItem('rc-demo-theme') ?? '';
|
|
5
|
-
applyTheme(stored);
|
|
6
|
-
|
|
7
|
-
function applyTheme(theme) {
|
|
8
|
-
if (theme) {
|
|
9
|
-
document.documentElement.dataset.theme = theme;
|
|
10
|
-
} else {
|
|
11
|
-
delete document.documentElement.dataset.theme;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function currentIndex() {
|
|
16
|
-
const current = document.documentElement.dataset.theme ?? '';
|
|
17
|
-
const idx = THEMES.indexOf(current);
|
|
18
|
-
return idx === -1 ? 0 : idx;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function updateButtons() {
|
|
22
|
-
const label = LABELS[currentIndex()];
|
|
23
|
-
document.querySelectorAll('.theme-picker').forEach((btn) => {
|
|
24
|
-
btn.textContent = label;
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
window.cycleTheme = function () {
|
|
29
|
-
const next = THEMES[(currentIndex() + 1) % THEMES.length];
|
|
30
|
-
applyTheme(next);
|
|
31
|
-
localStorage.setItem('rc-demo-theme', next);
|
|
32
|
-
updateButtons();
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
36
|
-
updateButtons();
|
|
37
|
-
document.querySelectorAll('.theme-picker').forEach((btn) => {
|
|
38
|
-
btn.addEventListener('click', window.cycleTheme);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rc-range-slider-CL02oFwb.js","sources":["../src/rc-range-slider.ts"],"sourcesContent":["import { LitElement, css, html, nothing } from \"lit\";\nimport type { ComplexAttributeConverter } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { snapToStep, valueToPercent } from \"@rcarls/rc-common\";\n\nexport interface RCRangeSliderValueEvent {\n /** Current [low, high] value tuple. */\n value: [number, number];\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"rc-range-slider\": RCRangeSlider;\n }\n\n interface HTMLElementEventMap {\n \"rc-range-slider-input\": CustomEvent<RCRangeSliderValueEvent>;\n \"rc-range-slider-change\": CustomEvent<RCRangeSliderValueEvent>;\n }\n}\n\ntype DisplayValue = \"float\" | \"inline-start\" | \"inline-end\" | null;\ntype RangeThumb = \"low\" | \"high\";\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\n const n = parseFloat(s);\n\n return isNaN(n) ? defaultVal : n;\n}\n\n/**\n * Dual-thumb range slider implementing the WAI-ARIA APG Slider (Multi-Thumb)\n * pattern with custom shadow-DOM slider thumbs.\n *\n * Consumers provide two direct child `<input type=\"range\">` elements. Before\n * upgrade, those inputs are the usable progressive-enhancement fallback. After\n * upgrade, the inputs remain in light DOM as hidden form reflectors while the\n * shadow thumbs become the focusable, accessible interaction surface.\n *\n * Form participation is handled natively by each input's `name` attribute.\n *\n * @slot - Consumer-provided native range inputs.\n * @slot track-background - Optional decorative content rendered inside the track before the selected range fill.\n * @slot low-value-display - Optional replacement for the low value text.\n * @slot high-value-display - Optional replacement for the high value text.\n *\n * @fires rc-range-slider-input - Fires while either thumb moves. Detail: `{ value }`.\n * @fires rc-range-slider-change - Fires when a thumb commits a new value. Detail: `{ value }`.\n *\n * @cssprop [--rc-range-slider-accent=Highlight] - Accent color for selected range, thumb border, focus, hover, and active states.\n * @cssprop [--rc-range-slider-gap=var(--rc-control-gap)] - Gap between track and inline value display.\n * @cssprop [--rc-range-slider-control-size=var(--rc-control-block-size)] - Track hit-area block size.\n * @cssprop [--rc-range-slider-track-background=color-mix(in srgb, CanvasText 25%, Canvas)] - Unselected track color.\n * @cssprop [--rc-range-slider-track-radius=var(--rc-control-radius)] - Track border radius.\n * @cssprop [--rc-range-slider-thumb-background=ButtonFace] - Thumb background color.\n * @cssprop [--rc-range-slider-thumb-border=var(--rc-range-slider-accent)] - Thumb border color.\n * @cssprop [--rc-range-slider-thumb-size=1.125rem] - Visual thumb inline/block size.\n * @cssprop [--rc-range-slider-value-color=var(--rc-text-disabled)] - Value display text color.\n * @cssprop [--rc-thumb-radius=9px] - Half the thumb width; used to align float value displays and range fill.\n * @cssprop [--rc-range-slider-float-value-block-offset=-1.4em] - Block-axis offset for horizontal float value displays.\n * @cssprop [--rc-range-slider-float-value-inline-offset=calc(100% + 0.5rem)] - Inline-axis offset for vertical float value displays.\n *\n * @csspart root - Root layout wrapper.\n * @csspart group - Slider group wrapper.\n * @csspart track - Visual slider track.\n * @csspart range - Filled selected range segment.\n * @csspart thumb - Shared custom slider thumb.\n * @csspart low-thumb - Low-value custom slider thumb.\n * @csspart high-thumb - High-value custom slider thumb.\n * @csspart value-display - Shared rendered value text.\n * @csspart low-value-display - Rendered low value text.\n * @csspart high-value-display - Rendered high value text.\n */\nexport class RCRangeSlider extends LitElement {\n static override styles = css`\n :host {\n --rc-range-slider-accent: var(--rc-accent, Highlight);\n --rc-range-slider-track-background: color-mix(in srgb, CanvasText 25%, Canvas);\n --rc-range-slider-range-background: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-background: ButtonFace;\n --rc-range-slider-thumb-border: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-hover-background: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-hover-border: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-active-background: var(--rc-range-slider-accent);\n --rc-range-slider-thumb-active-border: var(--rc-range-slider-accent);\n --rc-range-slider-focus-outline: var(--rc-range-slider-accent);\n display: block;\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 :host([disabled]) {\n --rc-range-slider-accent: GrayText;\n --rc-range-slider-track-background: color-mix(in srgb, GrayText 35%, Canvas);\n --rc-range-slider-range-background: GrayText;\n --rc-range-slider-thumb-border: GrayText;\n --rc-range-slider-thumb-hover-background: ButtonFace;\n --rc-range-slider-thumb-hover-border: GrayText;\n --rc-range-slider-thumb-active-background: ButtonFace;\n --rc-range-slider-thumb-active-border: GrayText;\n --rc-range-slider-focus-outline: GrayText;\n }\n\n .rc-range-slider-root {\n display: grid;\n gap: var(--rc-range-slider-gap, var(--rc-control-gap, 0.5rem));\n align-items: center;\n }\n\n .rc-range-slider-root[data-display=\"inline-start\"] {\n grid-template-columns: auto minmax(0, 1fr);\n }\n\n .rc-range-slider-root[data-display=\"inline-end\"] {\n grid-template-columns: minmax(0, 1fr) auto;\n }\n\n .rc-range-slider-group {\n position: relative;\n display: block;\n min-width: 0;\n min-height: var(--rc-range-slider-control-size, var(--rc-control-block-size, 1.5rem));\n touch-action: none;\n }\n\n .rc-range-slider-track,\n .rc-range-slider-range {\n position: absolute;\n pointer-events: none;\n }\n\n .rc-range-slider-track {\n inset-inline: 0;\n inset-block: calc(50% - var(--rc-range-slider-track-size, 0.1875rem) / 2);\n block-size: var(--rc-range-slider-track-size, 0.1875rem);\n background: var(--rc-range-slider-track-background);\n border-radius: var(--rc-range-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-range-slider-range {\n inset-block: 0;\n background: var(--rc-range-slider-range-background);\n border-radius: inherit;\n z-index: 1;\n }\n\n .rc-range-slider-thumb {\n position: absolute;\n z-index: 2;\n inline-size: var(--rc-range-slider-thumb-size, 1.125rem);\n block-size: var(--rc-range-slider-thumb-size, 1.125rem);\n background: var(--rc-range-slider-thumb-background);\n border: 2px solid var(--rc-range-slider-thumb-border);\n border-radius: 50%;\n box-sizing: border-box;\n cursor: grab;\n transform: translate(-50%, -50%);\n transition:\n background-color 120ms ease,\n border-color 120ms ease,\n box-shadow 120ms ease,\n transform var(--rc-motion-duration, 120ms) ease;\n }\n\n .rc-range-slider-thumb:focus-visible {\n outline: var(--rc-focus-ring, 2px solid var(--rc-range-slider-focus-outline));\n outline-offset: var(--rc-focus-ring-offset, 2px);\n }\n\n :host(:not([disabled]):not([readonly])) .rc-range-slider-thumb:hover {\n background: var(--rc-range-slider-thumb-hover-background);\n border-color: var(--rc-range-slider-thumb-hover-border);\n box-shadow: 0 0 0 0.25rem color-mix(in srgb, var(--rc-range-slider-accent) 20%, transparent);\n }\n\n :host(:not([disabled]):not([readonly])) .rc-range-slider-thumb:active {\n background: var(--rc-range-slider-thumb-active-background);\n border-color: var(--rc-range-slider-thumb-active-border);\n box-shadow: 0 0 0 0.35rem color-mix(in srgb, var(--rc-range-slider-accent) 28%, transparent);\n cursor: grabbing;\n }\n\n :host(:not([disabled]):not([readonly])) .rc-range-slider-group:hover .rc-range-slider-track {\n background: color-mix(in srgb, var(--rc-range-slider-track-background) 70%, CanvasText);\n }\n\n .rc-range-slider-thumb[aria-disabled=\"true\"],\n .rc-range-slider-thumb[aria-readonly=\"true\"] {\n cursor: default;\n }\n\n :host([disabled]) .rc-range-slider-root {\n opacity: 0.65;\n }\n\n ::slotted(input[type=\"range\"]) {\n position: absolute;\n inline-size: 1px;\n block-size: 1px;\n margin: 0;\n padding: 0;\n border: 0;\n clip-path: inset(50%);\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n }\n\n .rc-range-slider-values {\n pointer-events: none;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n color: var(--rc-range-slider-value-color, var(--rc-text-disabled, GrayText));\n }\n\n .rc-range-slider-root[data-display=\"float\"] .rc-range-slider-values {\n position: absolute;\n inset: 0;\n z-index: 5;\n }\n\n .rc-range-slider-root[data-display=\"float\"] .rc-range-slider-value {\n position: absolute;\n inset-block-start: var(--rc-range-slider-float-value-block-offset, -1.4em);\n transform: translateX(-50%);\n }\n\n .rc-range-slider-root[data-display=\"inline-start\"] .rc-range-slider-values,\n .rc-range-slider-root[data-display=\"inline-end\"] .rc-range-slider-values {\n display: flex;\n gap: 0.25em;\n align-items: center;\n }\n\n .rc-range-slider-root[data-display=\"inline-start\"] .rc-range-slider-value:first-child::after,\n .rc-range-slider-root[data-display=\"inline-end\"] .rc-range-slider-value:first-child::after {\n content: \" -\";\n }\n\n :host([orientation=\"vertical\"]) {\n display: inline-block;\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-group {\n inline-size: var(--rc-range-slider-control-size, var(--rc-control-block-size, 1.5rem));\n block-size: var(--rc-range-slider-vertical-size, 12.5rem);\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-track {\n inset-block: 0;\n inset-inline: calc(50% - var(--rc-range-slider-track-size, 0.1875rem) / 2);\n inline-size: var(--rc-range-slider-track-size, 0.1875rem);\n block-size: auto;\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-range {\n inset-inline: 0;\n inset-block-start: auto;\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-thumb {\n inset-inline-start: 50%;\n transform: translate(-50%, 50%);\n }\n\n :host([orientation=\"vertical\"]) .rc-range-slider-root[data-display=\"float\"] .rc-range-slider-value {\n inset-block-start: auto;\n inset-inline-start: var(--rc-range-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, number] | undefined;\n private _defaultValue: [number, number] | undefined;\n private _valueInitialized = false;\n\n /** Current [low, high] value. Assign a new tuple reference to trigger a re-render. */\n @property({ attribute: false })\n get value(): [number, number] {\n return this._value ?? this._defaultValue ?? this._nativeInputValue;\n }\n set value(v: [number, number]) {\n const old = this._value;\n this._value = this._normalizeValue(v);\n this._valueInitialized = true;\n this._applyValueToInputs(this._value);\n if (this._value !== old) {\n this.requestUpdate(\"value\", old);\n }\n }\n\n /** Initial uncontrolled [low, high] value. Has no effect after the first user interaction or `value` write. */\n @property({ attribute: false })\n get defaultValue(): [number, number] | undefined {\n return this._defaultValue;\n }\n set defaultValue(v: [number, number] | undefined) {\n const old = this._defaultValue;\n this._defaultValue = v === undefined ? undefined : this._normalizeValue(v);\n if (\n !this._valueInitialized &&\n this._value === undefined &&\n this._defaultValue !== undefined\n ) {\n this._applyValueToInputs(this._defaultValue);\n this.requestUpdate(\"value\", undefined);\n }\n this.requestUpdate(\"defaultValue\", old);\n }\n\n /** Disable both thumbs and their hidden native input reflectors. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /** Prevents edits while preserving normal focus and display. */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Accessible label for the low (min) thumb when the input does not provide one. */\n @property({ attribute: \"low-label\" }) lowLabel = \"Minimum\";\n\n /** Accessible label for the high (max) thumb when the input does not provide one. */\n @property({ attribute: \"high-label\" }) highLabel = \"Maximum\";\n\n /** Formatted screen-reader text for the low value. Falls back to the raw number. */\n @property({ attribute: \"low-value-text\" }) lowValueText = \"\";\n\n /** Formatted screen-reader text for the high value. Falls back to the raw number. */\n @property({ attribute: \"high-value-text\" }) highValueText = \"\";\n\n /**\n * Controls the live value display.\n *\n * - Absent (default) — no value shown.\n * - `display` or `display=\"float\"` — floats each value above its thumb.\n * - `display=\"inline-start\"` — renders the value container before the track.\n * - `display=\"inline-end\"` — renders the value container after the track.\n */\n @property({ reflect: true, converter: displayConverter })\n display: DisplayValue = null;\n\n /** Orientation; reflected as an attribute and forwarded to custom thumbs. */\n @property({ reflect: true }) orientation: \"horizontal\" | \"vertical\" =\n \"horizontal\";\n\n @state() private _lowValue = 0;\n @state() private _highValue = 100;\n\n private _lowInput: HTMLInputElement | null = null;\n private _highInput: HTMLInputElement | null = null;\n private _dragThumb: RangeThumb | null = null;\n private _dragPointerId: number | null = null;\n private _addedHostRole = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._syncHostRole();\n this._findInputs();\n }\n\n override disconnectedCallback(): void {\n this._unwireInputs();\n this._restoreInputs();\n if (this._addedHostRole) {\n this.removeAttribute(\"role\");\n this._addedHostRole = false;\n }\n super.disconnectedCallback();\n }\n\n override updated(): void {\n this._syncInputReflectors();\n }\n\n override render() {\n const lo = this._lowInput;\n const hi = this._highInput;\n if (!lo || !hi) return nothing;\n\n const lowText = this.lowValueText || String(this._lowValue);\n const highText = this.highValueText || String(this._highValue);\n\n const valuesContainer = html`\n <span class=\"rc-range-slider-values\" aria-hidden=\"true\">\n <span\n part=\"value-display low-value-display\"\n class=\"rc-range-slider-value\"\n style=${this.display === \"float\"\n ? this._floatStyle(this._lowValue)\n : nothing}\n ><slot name=\"low-value-display\">${lowText}</slot></span\n >\n <span\n part=\"value-display high-value-display\"\n class=\"rc-range-slider-value\"\n style=${this.display === \"float\"\n ? this._floatStyle(this._highValue)\n : nothing}\n ><slot name=\"high-value-display\">${highText}</slot></span\n >\n </span>\n `;\n\n return html`\n <div\n part=\"root\"\n class=\"rc-range-slider-root\"\n data-display=${this.display ?? nothing}\n data-orientation=${this.orientation}\n >\n ${this.display === \"inline-start\" ? valuesContainer : nothing}\n\n <div\n part=\"group\"\n class=\"rc-range-slider-group\"\n @pointerdown=${this._onGroupPointerDown}\n @pointermove=${this._onGroupPointerMove}\n @pointerup=${this._onGroupPointerUp}\n @pointercancel=${this._onGroupPointerCancel}\n >\n <span part=\"track\" class=\"rc-range-slider-track\" aria-hidden=\"true\">\n <slot name=\"track-background\"></slot>\n <span\n part=\"range\"\n class=\"rc-range-slider-range\"\n style=${this._rangeStyle()}\n ></span>\n </span>\n\n ${this._renderThumb(\"low\")} ${this._renderThumb(\"high\")}\n <slot @slotchange=${this._onDefaultSlotChange}></slot>\n ${this.display === \"float\" ? valuesContainer : nothing}\n </div>\n\n ${this.display === \"inline-end\" ? valuesContainer : nothing}\n </div>\n `;\n }\n\n private _renderThumb(thumb: RangeThumb) {\n const isLow = thumb === \"low\";\n const input = isLow ? this._lowInput : this._highInput;\n const value = isLow ? this._lowValue : this._highValue;\n const valueText = isLow ? this.lowValueText : this.highValueText;\n const label = this._thumbLabel(thumb);\n const labelledBy = input?.getAttribute(\"aria-labelledby\");\n\n return html`\n <span\n part=${isLow ? \"thumb low-thumb\" : \"thumb high-thumb\"}\n class=\"rc-range-slider-thumb\"\n data-thumb=${thumb}\n role=\"slider\"\n tabindex=${this.disabled ? \"-1\" : \"0\"}\n aria-label=${label ?? nothing}\n aria-labelledby=${labelledBy ?? nothing}\n aria-valuemin=${String(isLow ? this._min() : this._lowValue)}\n aria-valuemax=${String(isLow ? this._highValue : this._max())}\n aria-valuenow=${String(value)}\n aria-valuetext=${valueText || nothing}\n aria-orientation=${this.orientation}\n aria-disabled=${this.disabled ? \"true\" : nothing}\n aria-readonly=${this.readonly ? \"true\" : nothing}\n style=${this._thumbStyle(value)}\n @keydown=${isLow ? this._onLowKeydown : this._onHighKeydown}\n ></span>\n `;\n }\n\n /**\n * Finds the first two child `<input type=\"range\">` elements and wires them.\n * Inputs remain in the DOM permanently as form/progressive-enhancement\n * reflectors.\n */\n private _findInputs(): void {\n const inputs = Array.from(\n this.querySelectorAll<HTMLInputElement>('input[type=\"range\"]'),\n ).slice(0, 2);\n\n if (inputs.length < 2) {\n console.warn(\n '[rc-range-slider] Requires two child <input type=\"range\"> elements.',\n );\n return;\n }\n\n const [lo, hi] = inputs as [HTMLInputElement, HTMLInputElement];\n\n if (!this.hasAttribute(\"disabled\") && (lo.disabled || hi.disabled)) {\n this.disabled = true;\n }\n\n this._lowInput = lo;\n this._highInput = hi;\n this._applyInitialValueToInputs(lo, hi);\n\n this._wireInput(lo, this._onLowInput, this._onLowChange);\n this._wireInput(hi, this._onHighInput, this._onHighChange);\n this._syncInputReflectors();\n }\n\n private _onDefaultSlotChange = (): void => {\n this._unwireInputs();\n this._restoreInputs();\n this._findInputs();\n this.requestUpdate();\n };\n\n private get _nativeInputValue(): [number, number] {\n const low = this._lowInput?.valueAsNumber;\n const high = this._highInput?.valueAsNumber;\n\n return [\n low === undefined || isNaN(low) ? this.min : low,\n high === undefined || isNaN(high) ? this.max : high,\n ];\n }\n\n private _applyInitialValueToInputs(\n lowInput: HTMLInputElement,\n highInput: HTMLInputElement,\n ): void {\n if (this._value !== undefined) {\n this._applyValueToInputs(this._value);\n return;\n }\n\n if (this._defaultValue !== undefined) {\n this._applyValueToInputs(this._defaultValue);\n return;\n }\n\n const lowValue = lowInput.valueAsNumber;\n const highValue = highInput.valueAsNumber;\n\n this._lowValue = isNaN(lowValue) ? this._min() : lowValue;\n this._highValue = isNaN(highValue) ? this._max() : highValue;\n this._defaultValue = this._normalizeValue([this._lowValue, this._highValue]);\n this._applyValueToInputs(this._defaultValue);\n }\n\n private _applyValueToInputs(value: [number, number]): void {\n const [low, high] = this._normalizeValue(value);\n this._lowValue = low;\n this._highValue = high;\n\n if (this._lowInput) this._lowInput.value = String(low);\n if (this._highInput) this._highInput.value = String(high);\n }\n\n private _setCurrentValue(value: [number, number]): void {\n const [low, high] = this._normalizeValue(value);\n this._value = [low, high];\n this._valueInitialized = true;\n this._applyValueToInputs(this._value);\n this.requestUpdate(\"value\");\n }\n\n private _wireInput(\n input: HTMLInputElement,\n onInput: (e: Event) => void,\n onChange: (e: Event) => void,\n ): void {\n input.addEventListener(\"input\", onInput);\n input.addEventListener(\"change\", onChange);\n }\n\n private _unwireInputs(): void {\n this._lowInput?.removeEventListener(\"input\", this._onLowInput);\n this._lowInput?.removeEventListener(\"change\", this._onLowChange);\n\n this._highInput?.removeEventListener(\"input\", this._onHighInput);\n this._highInput?.removeEventListener(\"change\", this._onHighChange);\n }\n\n private _restoreInputs(): void {\n for (const input of [this._lowInput, this._highInput]) {\n input?.removeAttribute(\"aria-hidden\");\n input?.removeAttribute(\"tabindex\");\n input?.removeAttribute(\"data-rc-range-slider-reflector\");\n input?.style.removeProperty(\"display\");\n }\n }\n\n private _syncInputReflectors(): void {\n const lo = this._lowInput;\n const hi = this._highInput;\n if (!lo || !hi) return;\n\n for (const input of [lo, hi]) {\n input.disabled = this.disabled;\n input.tabIndex = -1;\n input.setAttribute(\"aria-hidden\", \"true\");\n input.setAttribute(\"data-rc-range-slider-reflector\", \"\");\n }\n }\n\n private _syncHostRole(): void {\n if (this.hasAttribute(\"role\")) return;\n\n this.setAttribute(\"role\", \"group\");\n this._addedHostRole = true;\n }\n\n private readonly _onLowInput = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([input.valueAsNumber, this._highValue]);\n this._dispatch(\"rc-range-slider-input\", this.value);\n };\n\n private readonly _onLowChange = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([input.valueAsNumber, this._highValue]);\n this._dispatch(\"rc-range-slider-change\", this.value);\n };\n\n private readonly _onHighInput = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([this._lowValue, input.valueAsNumber]);\n this._dispatch(\"rc-range-slider-input\", this.value);\n };\n\n private readonly _onHighChange = (e: Event): void => {\n if (this.readonly) {\n this._applyValueToInputs([this._lowValue, this._highValue]);\n return;\n }\n\n const input = e.currentTarget as HTMLInputElement;\n this._setCurrentValue([this._lowValue, input.valueAsNumber]);\n this._dispatch(\"rc-range-slider-change\", this.value);\n };\n\n /** APG keyboard contract for the low thumb. */\n private readonly _onLowKeydown = (e: KeyboardEvent): void => {\n this._handleThumbKeydown(e, \"low\");\n };\n\n /** APG keyboard contract for the high thumb. */\n private readonly _onHighKeydown = (e: KeyboardEvent): void => {\n this._handleThumbKeydown(e, \"high\");\n };\n\n private _handleThumbKeydown(e: KeyboardEvent, thumb: RangeThumb): void {\n if (this.disabled || this.readonly) return;\n\n const min = this._min();\n const max = this._max();\n const step = this._step();\n const bigStep = step * 10;\n const low = this._lowValue;\n const high = this._highValue;\n const current = thumb === \"low\" ? low : high;\n const effectiveMin = thumb === \"low\" ? min : low;\n const effectiveMax = thumb === \"low\" ? high : max;\n\n let next: number | null = null;\n\n switch (e.key) {\n case \"ArrowRight\":\n case \"ArrowUp\":\n next = current + step;\n break;\n case \"ArrowLeft\":\n case \"ArrowDown\":\n next = current - step;\n break;\n case \"PageUp\":\n next = current + bigStep;\n break;\n case \"PageDown\":\n next = current - bigStep;\n break;\n case \"Home\":\n next = effectiveMin;\n break;\n case \"End\":\n next = effectiveMax;\n break;\n default:\n return;\n }\n\n e.preventDefault();\n\n const nextValue = snapToStep(next, effectiveMin, effectiveMax, step);\n if (nextValue === current) return;\n\n this._setThumbValue(thumb, nextValue);\n this._dispatch(\"rc-range-slider-input\", this.value);\n }\n\n private _onGroupPointerDown(e: PointerEvent): void {\n if (this.disabled || this.readonly || e.button !== 0) return;\n\n const thumb = this._nearestThumb(e);\n const thumbEl = this._thumbElement(thumb);\n this._dragThumb = thumb;\n this._dragPointerId = e.pointerId;\n\n e.preventDefault();\n try {\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n } catch {\n // Synthetic browser-test PointerEvents are not active pointer streams.\n }\n thumbEl?.focus();\n this._setThumbValue(thumb, this._valueFromPointer(e, thumb));\n this._dispatch(\"rc-range-slider-input\", this.value);\n }\n\n private _onGroupPointerMove(e: PointerEvent): void {\n if (this._dragPointerId !== e.pointerId || this._dragThumb === null) return;\n\n e.preventDefault();\n this._setThumbValue(this._dragThumb, this._valueFromPointer(e, this._dragThumb));\n this._dispatch(\"rc-range-slider-input\", this.value);\n }\n\n private _onGroupPointerUp(e: PointerEvent): void {\n if (this._dragPointerId !== e.pointerId || this._dragThumb === null) return;\n\n const thumb = this._dragThumb;\n this._dragThumb = null;\n this._dragPointerId = null;\n try {\n (e.currentTarget as HTMLElement).releasePointerCapture(e.pointerId);\n } catch {\n // Synthetic browser-test PointerEvents are not active pointer streams.\n }\n this._dispatch(\"rc-range-slider-change\", this.value);\n this._thumbElement(thumb)?.focus();\n }\n\n private _onGroupPointerCancel(e: PointerEvent): void {\n if (this._dragPointerId !== e.pointerId) return;\n\n this._dragThumb = null;\n this._dragPointerId = null;\n }\n\n private _setThumbValue(thumb: RangeThumb, value: number): void {\n if (thumb === \"low\") {\n this._setCurrentValue([value, this._highValue]);\n return;\n }\n\n this._setCurrentValue([this._lowValue, value]);\n }\n\n private _valueFromPointer(e: PointerEvent, thumb: RangeThumb): number {\n const rect = this._groupRect();\n if (!rect) return thumb === \"low\" ? this._lowValue : this._highValue;\n\n const min = thumb === \"low\" ? this._min() : this._lowValue;\n const max = thumb === \"low\" ? this._highValue : this._max();\n const span = this._max() - this._min();\n if (span <= 0) return min;\n\n const pct =\n this.orientation === \"vertical\"\n ? 1 - (e.clientY - rect.top) / rect.height\n : (e.clientX - rect.left) / rect.width;\n const raw = pct * span + this._min();\n\n return snapToStep(raw, min, max, this._step());\n }\n\n private _nearestThumb(e: PointerEvent): RangeThumb {\n const value = this._valueFromPointer(e, \"low\");\n const lowDistance = Math.abs(value - this._lowValue);\n const highDistance = Math.abs(value - this._highValue);\n\n if (lowDistance === highDistance) {\n return value < this._lowValue ? \"low\" : \"high\";\n }\n\n return lowDistance < highDistance ? \"low\" : \"high\";\n }\n\n private _rangeStyle(): string {\n const loPct = valueToPercent(this._lowValue, this._min(), this._max());\n const hiPct = valueToPercent(this._highValue, this._min(), this._max());\n const loCenter = this._thumbCenterStyle(loPct);\n const hiCenter = this._thumbCenterStyle(hiPct);\n\n if (this.orientation === \"vertical\") {\n return [\n `bottom:${loCenter}`,\n `height:max(0px, calc(${hiCenter} - ${loCenter}))`,\n ].join(\";\");\n }\n\n return [\n `left:${loCenter}`,\n `width:max(0px, calc(${hiCenter} - ${loCenter}))`,\n ].join(\";\");\n }\n\n private _thumbStyle(value: number): string {\n const pct = valueToPercent(value, this._min(), this._max());\n const center = this._thumbCenterStyle(pct);\n\n if (this.orientation === \"vertical\") {\n return `bottom:${center}`;\n }\n\n return `left:${center};top:50%`;\n }\n\n private _thumbCenterStyle(pct: number): string {\n const k = (1 - pct * 2).toFixed(4);\n\n return `calc(${(pct * 100).toFixed(3)}% + ${k} * var(--rc-thumb-radius, 9px))`;\n }\n\n private _floatStyle(value: number): string {\n const pct = valueToPercent(value, this._min(), this._max());\n const center = this._thumbCenterStyle(pct);\n\n if (this.orientation === \"vertical\") {\n return `bottom:${center}`;\n }\n\n return `left:${center}`;\n }\n\n private _normalizeValue([low, high]: [number, number]): [number, number] {\n const min = this._min();\n const max = this._max();\n const steppedLow = snapToStep(low, min, max, this._step());\n const steppedHigh = snapToStep(high, min, max, this._step());\n\n return [Math.min(steppedLow, steppedHigh), Math.max(steppedLow, steppedHigh)];\n }\n\n private _min(): number {\n return parseAttr(this._lowInput?.min ?? \"\", this.min);\n }\n\n private _max(): number {\n return parseAttr(this._highInput?.max ?? \"\", this.max);\n }\n\n private _step(): number {\n return parseAttr(this._lowInput?.step ?? \"\", this.step);\n }\n\n private _groupRect(): DOMRect | null {\n return this.shadowRoot\n ?.querySelector<HTMLElement>(\".rc-range-slider-group\")\n ?.getBoundingClientRect() ?? null;\n }\n\n private _thumbElement(thumb: RangeThumb): HTMLElement | null {\n return (\n this.shadowRoot?.querySelector<HTMLElement>(`[data-thumb=\"${thumb}\"]`) ??\n null\n );\n }\n\n private _thumbLabel(thumb: RangeThumb): string | null {\n const input = thumb === \"low\" ? this._lowInput : this._highInput;\n const fallback = thumb === \"low\" ? this.lowLabel : this.highLabel;\n const explicitLabel = input?.getAttribute(\"aria-label\");\n if (explicitLabel) return explicitLabel;\n\n const nativeLabel = input?.labels?.[0]?.textContent?.trim();\n if (nativeLabel) return nativeLabel;\n\n return fallback || null;\n }\n\n private _dispatch(\n type: \"rc-range-slider-input\" | \"rc-range-slider-change\",\n value: [number, number],\n ): void {\n this.dispatchEvent(\n new CustomEvent<RCRangeSliderValueEvent>(type, {\n bubbles: true,\n composed: true,\n detail: { value },\n }),\n );\n }\n}\n\nexport default RCRangeSlider;\n"],"names":["displayConverter","v","parseAttr","s","defaultVal","n","_RCRangeSlider","LitElement","e","input","old","lo","hi","nothing","lowText","highText","valuesContainer","html","thumb","isLow","value","valueText","label","labelledBy","inputs","low","high","lowInput","highInput","lowValue","highValue","onInput","onChange","min","max","step","bigStep","current","effectiveMin","effectiveMax","next","nextValue","snapToStep","thumbEl","rect","span","raw","lowDistance","highDistance","loPct","valueToPercent","hiPct","loCenter","hiCenter","pct","center","k","steppedLow","steppedHigh","fallback","explicitLabel","nativeLabel","type","css","RCRangeSlider","__decorateClass","property","state"],"mappings":"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"}
|