@rcarls/rc-range-slider 0.6.0 → 0.7.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 +109 -0
- package/README.md +8 -0
- package/dist/custom-elements.json +83 -13
- package/dist/rc-range-slider-C_WJWoq9.js +449 -0
- package/dist/rc-range-slider-C_WJWoq9.js.map +1 -0
- package/dist/rc-range-slider-define.js +3 -1
- package/dist/rc-range-slider-define.js.map +1 -1
- package/dist/rc-range-slider.js +3 -2
- package/dist/types/packages/rc-range-slider/src/rc-range-slider.d.ts +51 -7
- package/package.json +2 -2
- package/dist/rc-range-slider-saGA_DoJ.js +0 -610
- package/dist/rc-range-slider-saGA_DoJ.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rc-range-slider-saGA_DoJ.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 * @attr min - Minimum slider value.\n * @attr max - Maximum slider value.\n * @attr step - Slider step.\n * @attr disabled - Disables both thumbs and their hidden native input reflectors.\n * @attr readonly - Prevents edits while preserving normal focus and display.\n * @attr low-label - Accessible label for the low (min) thumb when the input does not provide one.\n * @attr high-label - Accessible label for the high (max) thumb when the input does not provide\n * one.\n * @attr low-value-text - Formatted screen-reader text for the low value. Falls back to the raw\n * number.\n * @attr high-value-text - Formatted screen-reader text for the high value. Falls back to the raw\n * number.\n * @attr display - Controls the live value display: absent (none), `float`, `inline-start`, or\n * `inline-end`.\n * @attr orientation - Orientation, forwarded to the custom thumbs: `horizontal` or `vertical`.\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-vertical-size=12.5rem] - Track length when `orientation=\"vertical\"`.\n * @cssprop [--rc-range-slider-track-size=0.1875rem] - Visual track thickness.\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-range-background] - Filled selected-range color. Defaults to\n * `--rc-range-slider-accent` (`GrayText` when `disabled`).\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-thumb-hover-background] - Thumb background on hover. Defaults to\n * `--rc-range-slider-accent` (`ButtonFace` when `disabled`).\n * @cssprop [--rc-range-slider-thumb-hover-border] - Thumb border color on hover. Defaults to\n * `--rc-range-slider-accent` (`GrayText` when `disabled`).\n * @cssprop [--rc-range-slider-thumb-active-background] - Thumb background while pressed. Defaults\n * to `--rc-range-slider-accent` (`ButtonFace` when `disabled`).\n * @cssprop [--rc-range-slider-thumb-active-border] - Thumb border color while pressed. Defaults to\n * `--rc-range-slider-accent` (`GrayText` when `disabled`).\n * @cssprop [--rc-range-slider-focus-outline] - Thumb focus ring color. Defaults to\n * `--rc-range-slider-accent` (`GrayText` when `disabled`).\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'])\n .rc-range-slider-root[data-display='float']\n .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 (!this._valueInitialized && this._value === undefined && this._defaultValue !== undefined) {\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' = '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' ? this._floatStyle(this._lowValue) : 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' ? this._floatStyle(this._highValue) : 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 part=\"range\" class=\"rc-range-slider-range\" style=${this._rangeStyle()}></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>(this, ':scope > input[type=\"range\"]').slice(\n 0,\n 2,\n );\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 [`bottom:${loCenter}`, `height:max(0px, calc(${hiCenter} - ${loCenter}))`].join(';');\n }\n\n return [`left:${loCenter}`, `width:max(0px, calc(${hiCenter} - ${loCenter}))`].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 (\n this.shadowRoot\n ?.querySelector<HTMLElement>('.rc-range-slider-group')\n ?.getBoundingClientRect() ?? null\n );\n }\n\n private _$thumbElement(thumb: RangeThumb): HTMLElement | null {\n return this.shadowRoot?.querySelector<HTMLElement>(`[data-thumb=\"${thumb}\"]`) ?? null;\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 const init: CustomEventInit<RCRangeSliderValueEvent> = {\n bubbles: true,\n composed: true,\n detail: { value },\n };\n\n if (type === 'rc-range-slider-input') {\n this.dispatchEvent(new CustomEvent<RCRangeSliderValueEvent>('rc-range-slider-input', init));\n } else {\n this.dispatchEvent(new CustomEvent<RCRangeSliderValueEvent>('rc-range-slider-change', init));\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","init","css","RCRangeSlider","__decorateClass","property","state"],"mappings":"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"}
|