@rcarls/rc-range-slider 0.4.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +4 -4
- package/dist/custom-elements.json +21 -21
- package/dist/rc-range-slider-define.js +1 -1
- package/dist/{rc-range-slider-45KwZfPx.js → rc-range-slider-saGA_DoJ.js} +34 -43
- package/dist/rc-range-slider-saGA_DoJ.js.map +1 -0
- package/dist/rc-range-slider.js +1 -1
- package/dist/types/packages/rc-range-slider/src/rc-range-slider.d.ts +5 -5
- package/package.json +2 -2
- package/dist/rc-range-slider-45KwZfPx.js.map +0 -1
- package/dist/types/packages/rc-range-slider/src/rc-range-slider.test.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @rcarls/rc-range-slider
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 57370e4: Align component metadata, aggregate framework typings, development-time native-child
|
|
8
|
+
validation, controlled menu state, package declarations, and public documentation before the
|
|
9
|
+
next release.
|
|
10
|
+
- Updated dependencies [6683eb9]
|
|
11
|
+
- Updated dependencies [ee7ba6c]
|
|
12
|
+
- Updated dependencies [30eb232]
|
|
13
|
+
- @rcarls/rc-common@0.6.0
|
|
14
|
+
|
|
15
|
+
## 0.5.0
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [4ae2ef0]
|
|
20
|
+
- Updated dependencies [689340c]
|
|
21
|
+
- @rcarls/rc-common@0.5.0
|
|
22
|
+
|
|
3
23
|
## 0.4.2
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -12,8 +12,8 @@ interaction surface.
|
|
|
12
12
|
|
|
13
13
|
```html
|
|
14
14
|
<rc-range-slider aria-label="Price range">
|
|
15
|
-
<input type="range" name="price-min" min="0" max="100" value="20" aria-label="Minimum"
|
|
16
|
-
<input type="range" name="price-max" min="0" max="100" value="80" aria-label="Maximum"
|
|
15
|
+
<input type="range" name="price-min" min="0" max="100" value="20" aria-label="Minimum" />
|
|
16
|
+
<input type="range" name="price-max" min="0" max="100" value="80" aria-label="Maximum" />
|
|
17
17
|
</rc-range-slider>
|
|
18
18
|
```
|
|
19
19
|
|
|
@@ -40,8 +40,8 @@ Consumers can decorate the track with a real named slot:
|
|
|
40
40
|
```html
|
|
41
41
|
<rc-range-slider aria-label="Price range">
|
|
42
42
|
<span slot="track-background" class="threshold-bands"></span>
|
|
43
|
-
<input type="range" name="price-min" min="0" max="100" value="20" aria-label="Minimum"
|
|
44
|
-
<input type="range" name="price-max" min="0" max="100" value="80" aria-label="Maximum"
|
|
43
|
+
<input type="range" name="price-min" min="0" max="100" value="20" aria-label="Minimum" />
|
|
44
|
+
<input type="range" name="price-max" min="0" max="100" value="80" aria-label="Maximum" />
|
|
45
45
|
</rc-range-slider>
|
|
46
46
|
```
|
|
47
47
|
|
|
@@ -304,7 +304,7 @@
|
|
|
304
304
|
"type": {
|
|
305
305
|
"text": "string"
|
|
306
306
|
},
|
|
307
|
-
"default": "
|
|
307
|
+
"default": "'Minimum'",
|
|
308
308
|
"description": "Accessible label for the low (min) thumb when the input does not provide one.",
|
|
309
309
|
"attribute": "low-label"
|
|
310
310
|
},
|
|
@@ -314,7 +314,7 @@
|
|
|
314
314
|
"type": {
|
|
315
315
|
"text": "string"
|
|
316
316
|
},
|
|
317
|
-
"default": "
|
|
317
|
+
"default": "'Maximum'",
|
|
318
318
|
"description": "Accessible label for the high (max) thumb when the input does not provide one.",
|
|
319
319
|
"attribute": "high-label"
|
|
320
320
|
},
|
|
@@ -324,7 +324,7 @@
|
|
|
324
324
|
"type": {
|
|
325
325
|
"text": "string"
|
|
326
326
|
},
|
|
327
|
-
"default": "
|
|
327
|
+
"default": "''",
|
|
328
328
|
"description": "Formatted screen-reader text for the low value. Falls back to the raw number.",
|
|
329
329
|
"attribute": "low-value-text"
|
|
330
330
|
},
|
|
@@ -334,7 +334,7 @@
|
|
|
334
334
|
"type": {
|
|
335
335
|
"text": "string"
|
|
336
336
|
},
|
|
337
|
-
"default": "
|
|
337
|
+
"default": "''",
|
|
338
338
|
"description": "Formatted screen-reader text for the high value. Falls back to the raw number.",
|
|
339
339
|
"attribute": "high-value-text"
|
|
340
340
|
},
|
|
@@ -353,9 +353,9 @@
|
|
|
353
353
|
"kind": "field",
|
|
354
354
|
"name": "orientation",
|
|
355
355
|
"type": {
|
|
356
|
-
"text": "
|
|
356
|
+
"text": "'horizontal' | 'vertical'"
|
|
357
357
|
},
|
|
358
|
-
"default": "
|
|
358
|
+
"default": "'horizontal'",
|
|
359
359
|
"description": "Orientation; reflected as an attribute and forwarded to custom thumbs.",
|
|
360
360
|
"attribute": "orientation",
|
|
361
361
|
"reflects": true
|
|
@@ -979,7 +979,7 @@
|
|
|
979
979
|
{
|
|
980
980
|
"name": "type",
|
|
981
981
|
"type": {
|
|
982
|
-
"text": "
|
|
982
|
+
"text": "'rc-range-slider-input' | 'rc-range-slider-change'"
|
|
983
983
|
}
|
|
984
984
|
},
|
|
985
985
|
{
|
|
@@ -993,18 +993,18 @@
|
|
|
993
993
|
],
|
|
994
994
|
"events": [
|
|
995
995
|
{
|
|
996
|
-
"name": "
|
|
996
|
+
"name": "rc-range-slider-input",
|
|
997
997
|
"type": {
|
|
998
998
|
"text": "CustomEvent"
|
|
999
|
-
}
|
|
1000
|
-
|
|
1001
|
-
{
|
|
1002
|
-
"description": "Fires while either thumb moves. Detail: `{ value }`.",
|
|
1003
|
-
"name": "rc-range-slider-input"
|
|
999
|
+
},
|
|
1000
|
+
"description": "Fires while either thumb moves. Detail: `{ value }`."
|
|
1004
1001
|
},
|
|
1005
1002
|
{
|
|
1006
|
-
"
|
|
1007
|
-
"
|
|
1003
|
+
"name": "rc-range-slider-change",
|
|
1004
|
+
"type": {
|
|
1005
|
+
"text": "CustomEvent"
|
|
1006
|
+
},
|
|
1007
|
+
"description": "Fires when a thumb commits a new value. Detail: `{ value }`."
|
|
1008
1008
|
}
|
|
1009
1009
|
],
|
|
1010
1010
|
"attributes": [
|
|
@@ -1059,7 +1059,7 @@
|
|
|
1059
1059
|
"type": {
|
|
1060
1060
|
"text": "string"
|
|
1061
1061
|
},
|
|
1062
|
-
"default": "
|
|
1062
|
+
"default": "'Minimum'",
|
|
1063
1063
|
"fieldName": "lowLabel"
|
|
1064
1064
|
},
|
|
1065
1065
|
{
|
|
@@ -1068,7 +1068,7 @@
|
|
|
1068
1068
|
"type": {
|
|
1069
1069
|
"text": "string"
|
|
1070
1070
|
},
|
|
1071
|
-
"default": "
|
|
1071
|
+
"default": "'Maximum'",
|
|
1072
1072
|
"fieldName": "highLabel"
|
|
1073
1073
|
},
|
|
1074
1074
|
{
|
|
@@ -1077,7 +1077,7 @@
|
|
|
1077
1077
|
"type": {
|
|
1078
1078
|
"text": "string"
|
|
1079
1079
|
},
|
|
1080
|
-
"default": "
|
|
1080
|
+
"default": "''",
|
|
1081
1081
|
"fieldName": "lowValueText"
|
|
1082
1082
|
},
|
|
1083
1083
|
{
|
|
@@ -1086,7 +1086,7 @@
|
|
|
1086
1086
|
"type": {
|
|
1087
1087
|
"text": "string"
|
|
1088
1088
|
},
|
|
1089
|
-
"default": "
|
|
1089
|
+
"default": "''",
|
|
1090
1090
|
"fieldName": "highValueText"
|
|
1091
1091
|
},
|
|
1092
1092
|
{
|
|
@@ -1102,9 +1102,9 @@
|
|
|
1102
1102
|
"description": "Orientation; reflected as an attribute and forwarded to custom thumbs.",
|
|
1103
1103
|
"name": "orientation",
|
|
1104
1104
|
"type": {
|
|
1105
|
-
"text": "
|
|
1105
|
+
"text": "'horizontal' | 'vertical'"
|
|
1106
1106
|
},
|
|
1107
|
-
"default": "
|
|
1107
|
+
"default": "'horizontal'",
|
|
1108
1108
|
"fieldName": "orientation"
|
|
1109
1109
|
}
|
|
1110
1110
|
],
|
|
@@ -124,11 +124,7 @@ const f = class f extends I {
|
|
|
124
124
|
>
|
|
125
125
|
<span part="track" class="rc-range-slider-track" aria-hidden="true">
|
|
126
126
|
<slot name="track-background"></slot>
|
|
127
|
-
<span
|
|
128
|
-
part="range"
|
|
129
|
-
class="rc-range-slider-range"
|
|
130
|
-
style=${this._rangeStyle()}
|
|
131
|
-
></span>
|
|
127
|
+
<span part="range" class="rc-range-slider-range" style=${this._rangeStyle()}></span>
|
|
132
128
|
</span>
|
|
133
129
|
|
|
134
130
|
${this._renderThumb("low")} ${this._renderThumb("high")}
|
|
@@ -169,10 +165,10 @@ const f = class f extends I {
|
|
|
169
165
|
* reflectors.
|
|
170
166
|
*/
|
|
171
167
|
_findInputs() {
|
|
172
|
-
const t = T(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
)
|
|
168
|
+
const t = T(this, ':scope > input[type="range"]').slice(
|
|
169
|
+
0,
|
|
170
|
+
2
|
|
171
|
+
);
|
|
176
172
|
if (t.length < 2)
|
|
177
173
|
return;
|
|
178
174
|
const [e, r] = t;
|
|
@@ -306,13 +302,7 @@ const f = class f extends I {
|
|
|
306
302
|
}
|
|
307
303
|
_rangeStyle() {
|
|
308
304
|
const t = b(this._lowValue, this._min(), this._max()), e = b(this._highValue, this._min(), this._max()), r = this._thumbCenterStyle(t), i = this._thumbCenterStyle(e);
|
|
309
|
-
return this.orientation === "vertical" ? [
|
|
310
|
-
`bottom:${r}`,
|
|
311
|
-
`height:max(0px, calc(${i} - ${r}))`
|
|
312
|
-
].join(";") : [
|
|
313
|
-
`left:${r}`,
|
|
314
|
-
`width:max(0px, calc(${i} - ${r}))`
|
|
315
|
-
].join(";");
|
|
305
|
+
return this.orientation === "vertical" ? [`bottom:${r}`, `height:max(0px, calc(${i} - ${r}))`].join(";") : [`left:${r}`, `width:max(0px, calc(${i} - ${r}))`].join(";");
|
|
316
306
|
}
|
|
317
307
|
_thumbStyle(t) {
|
|
318
308
|
const e = b(t, this._min(), this._max()), r = this._thumbCenterStyle(e);
|
|
@@ -352,13 +342,12 @@ const f = class f extends I {
|
|
|
352
342
|
return a || r || null;
|
|
353
343
|
}
|
|
354
344
|
_dispatch(t, e) {
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
);
|
|
345
|
+
const r = {
|
|
346
|
+
bubbles: !0,
|
|
347
|
+
composed: !0,
|
|
348
|
+
detail: { value: e }
|
|
349
|
+
};
|
|
350
|
+
t === "rc-range-slider-input" ? this.dispatchEvent(new CustomEvent("rc-range-slider-input", r)) : this.dispatchEvent(new CustomEvent("rc-range-slider-change", r));
|
|
362
351
|
}
|
|
363
352
|
};
|
|
364
353
|
f.styles = x`
|
|
@@ -397,11 +386,11 @@ f.styles = x`
|
|
|
397
386
|
align-items: center;
|
|
398
387
|
}
|
|
399
388
|
|
|
400
|
-
.rc-range-slider-root[data-display=
|
|
389
|
+
.rc-range-slider-root[data-display='inline-start'] {
|
|
401
390
|
grid-template-columns: auto minmax(0, 1fr);
|
|
402
391
|
}
|
|
403
392
|
|
|
404
|
-
.rc-range-slider-root[data-display=
|
|
393
|
+
.rc-range-slider-root[data-display='inline-end'] {
|
|
405
394
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
406
395
|
}
|
|
407
396
|
|
|
@@ -429,7 +418,7 @@ f.styles = x`
|
|
|
429
418
|
z-index: 0;
|
|
430
419
|
}
|
|
431
420
|
|
|
432
|
-
::slotted([slot=
|
|
421
|
+
::slotted([slot='track-background']) {
|
|
433
422
|
position: absolute;
|
|
434
423
|
inset: 0;
|
|
435
424
|
pointer-events: none;
|
|
@@ -482,8 +471,8 @@ f.styles = x`
|
|
|
482
471
|
background: color-mix(in srgb, var(--rc-range-slider-track-background) 70%, CanvasText);
|
|
483
472
|
}
|
|
484
473
|
|
|
485
|
-
.rc-range-slider-thumb[aria-disabled=
|
|
486
|
-
.rc-range-slider-thumb[aria-readonly=
|
|
474
|
+
.rc-range-slider-thumb[aria-disabled='true'],
|
|
475
|
+
.rc-range-slider-thumb[aria-readonly='true'] {
|
|
487
476
|
cursor: default;
|
|
488
477
|
}
|
|
489
478
|
|
|
@@ -491,7 +480,7 @@ f.styles = x`
|
|
|
491
480
|
opacity: 0.65;
|
|
492
481
|
}
|
|
493
482
|
|
|
494
|
-
::slotted(input[type=
|
|
483
|
+
::slotted(input[type='range']) {
|
|
495
484
|
position: absolute;
|
|
496
485
|
inline-size: 1px;
|
|
497
486
|
block-size: 1px;
|
|
@@ -511,57 +500,59 @@ f.styles = x`
|
|
|
511
500
|
color: var(--rc-range-slider-value-color, var(--rc-text-disabled, GrayText));
|
|
512
501
|
}
|
|
513
502
|
|
|
514
|
-
.rc-range-slider-root[data-display=
|
|
503
|
+
.rc-range-slider-root[data-display='float'] .rc-range-slider-values {
|
|
515
504
|
position: absolute;
|
|
516
505
|
inset: 0;
|
|
517
506
|
z-index: 5;
|
|
518
507
|
}
|
|
519
508
|
|
|
520
|
-
.rc-range-slider-root[data-display=
|
|
509
|
+
.rc-range-slider-root[data-display='float'] .rc-range-slider-value {
|
|
521
510
|
position: absolute;
|
|
522
511
|
inset-block-start: var(--rc-range-slider-float-value-block-offset, -1.4em);
|
|
523
512
|
transform: translateX(-50%);
|
|
524
513
|
}
|
|
525
514
|
|
|
526
|
-
.rc-range-slider-root[data-display=
|
|
527
|
-
.rc-range-slider-root[data-display=
|
|
515
|
+
.rc-range-slider-root[data-display='inline-start'] .rc-range-slider-values,
|
|
516
|
+
.rc-range-slider-root[data-display='inline-end'] .rc-range-slider-values {
|
|
528
517
|
display: flex;
|
|
529
518
|
gap: 0.25em;
|
|
530
519
|
align-items: center;
|
|
531
520
|
}
|
|
532
521
|
|
|
533
|
-
.rc-range-slider-root[data-display=
|
|
534
|
-
.rc-range-slider-root[data-display=
|
|
535
|
-
content:
|
|
522
|
+
.rc-range-slider-root[data-display='inline-start'] .rc-range-slider-value:first-child::after,
|
|
523
|
+
.rc-range-slider-root[data-display='inline-end'] .rc-range-slider-value:first-child::after {
|
|
524
|
+
content: ' -';
|
|
536
525
|
}
|
|
537
526
|
|
|
538
|
-
:host([orientation=
|
|
527
|
+
:host([orientation='vertical']) {
|
|
539
528
|
display: inline-block;
|
|
540
529
|
}
|
|
541
530
|
|
|
542
|
-
:host([orientation=
|
|
531
|
+
:host([orientation='vertical']) .rc-range-slider-group {
|
|
543
532
|
inline-size: var(--rc-range-slider-control-size, var(--rc-control-block-size, 1.5rem));
|
|
544
533
|
block-size: var(--rc-range-slider-vertical-size, 12.5rem);
|
|
545
534
|
}
|
|
546
535
|
|
|
547
|
-
:host([orientation=
|
|
536
|
+
:host([orientation='vertical']) .rc-range-slider-track {
|
|
548
537
|
inset-block: 0;
|
|
549
538
|
inset-inline: calc(50% - var(--rc-range-slider-track-size, 0.1875rem) / 2);
|
|
550
539
|
inline-size: var(--rc-range-slider-track-size, 0.1875rem);
|
|
551
540
|
block-size: auto;
|
|
552
541
|
}
|
|
553
542
|
|
|
554
|
-
:host([orientation=
|
|
543
|
+
:host([orientation='vertical']) .rc-range-slider-range {
|
|
555
544
|
inset-inline: 0;
|
|
556
545
|
inset-block-start: auto;
|
|
557
546
|
}
|
|
558
547
|
|
|
559
|
-
:host([orientation=
|
|
548
|
+
:host([orientation='vertical']) .rc-range-slider-thumb {
|
|
560
549
|
inset-inline-start: 50%;
|
|
561
550
|
transform: translate(-50%, 50%);
|
|
562
551
|
}
|
|
563
552
|
|
|
564
|
-
:host([orientation=
|
|
553
|
+
:host([orientation='vertical'])
|
|
554
|
+
.rc-range-slider-root[data-display='float']
|
|
555
|
+
.rc-range-slider-value {
|
|
565
556
|
inset-block-start: auto;
|
|
566
557
|
inset-inline-start: var(--rc-range-slider-float-value-inline-offset, calc(100% + 0.5rem));
|
|
567
558
|
transform: translateY(50%);
|
|
@@ -616,4 +607,4 @@ n([
|
|
|
616
607
|
export {
|
|
617
608
|
s as R
|
|
618
609
|
};
|
|
619
|
-
//# sourceMappingURL=rc-range-slider-
|
|
610
|
+
//# sourceMappingURL=rc-range-slider-saGA_DoJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
package/dist/rc-range-slider.js
CHANGED
|
@@ -5,14 +5,14 @@ export interface RCRangeSliderValueEvent {
|
|
|
5
5
|
}
|
|
6
6
|
declare global {
|
|
7
7
|
interface HTMLElementTagNameMap {
|
|
8
|
-
|
|
8
|
+
'rc-range-slider': RCRangeSlider;
|
|
9
9
|
}
|
|
10
10
|
interface HTMLElementEventMap {
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
'rc-range-slider-input': CustomEvent<RCRangeSliderValueEvent>;
|
|
12
|
+
'rc-range-slider-change': CustomEvent<RCRangeSliderValueEvent>;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
type DisplayValue =
|
|
15
|
+
type DisplayValue = 'float' | 'inline-start' | 'inline-end' | null;
|
|
16
16
|
/**
|
|
17
17
|
* Two-thumb range slider backed by native range inputs for min/max values, following the
|
|
18
18
|
* WAI-ARIA Multi-Thumb Slider pattern.
|
|
@@ -128,7 +128,7 @@ export declare class RCRangeSlider extends LitElement {
|
|
|
128
128
|
*/
|
|
129
129
|
display: DisplayValue;
|
|
130
130
|
/** Orientation; reflected as an attribute and forwarded to custom thumbs. */
|
|
131
|
-
orientation:
|
|
131
|
+
orientation: 'horizontal' | 'vertical';
|
|
132
132
|
private _lowValue;
|
|
133
133
|
private _highValue;
|
|
134
134
|
private _$lowInput;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.6.0",
|
|
7
7
|
"description": "Two-thumb range slider backed by native range inputs for min/max values.",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"vitest-browser-lit": "^1.0.1"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@rcarls/rc-common": "0.
|
|
60
|
+
"@rcarls/rc-common": "0.6.0"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"lit": "^3.0.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rc-range-slider-45KwZfPx.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\"]) .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":";;;;;;;;AAmCA,MAAMA,IAA4D;AAAA,EAChE,cAAcC,GAAgC;AAC5C,WAAIA,MAAM,OAAa,OACnBA,MAAM,MAAMA,MAAM,UAAgB,UAClCA,MAAM,iBAAuB,iBAC7BA,MAAM,eAAqB,eACxB;AAAA,EACT;AAAA,EACA,YAAYA,GAAgC;AAC1C,WAAOA;AAAA,EACT;AACF;AAOA,SAASC,EAAUC,GAAWC,GAA4B;AACxD,MAAID,MAAM,GAAI,QAAOC;AAErB,QAAMC,IAAI,WAAWF,CAAC;AAEtB,SAAO,MAAME,CAAC,IAAID,IAAaC;AACjC;AA8EO,MAAMC,IAAN,MAAMA,UAAsBC,EAAW;AAAA,EAAvC,cAAA;AAAA,UAAA,GAAA,SAAA,GAiNuB,KAAA,MAAM,GAGN,KAAA,MAAM,KAGN,KAAA,OAAO,GAInC,KAAQ,oBAAoB,IAqCgB,KAAA,WAAW,IAGX,KAAA,WAAW,IAGjB,KAAA,WAAW,WAGV,KAAA,YAAY,WAGR,KAAA,eAAe,IAGd,KAAA,gBAAgB,IAW5D,KAAA,UAAwB,MAGK,KAAA,cAC3B,cAEO,KAAQ,YAAY,GACpB,KAAQ,aAAa,KAE9B,KAAQ,aAAsC,MAC9C,KAAQ,cAAuC,MAC/C,KAAQ,aAAgC,MACxC,KAAQ,iBAAgC,MACxC,KAAQ,iBAAiB,IACzB,KAAiB,wBAAwB,IAAIC,EAAwC,MAAM;AAAA,MACzF,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU,MAAM,KAAK,aAAA;AAAA,MACrB,WAAW,MAAM;AAAA,MAOjB;AAAA,IAAA,CACD,GAyJD,KAAQ,uBAAuB,MAAY;AACzC,WAAK,sBAAsB,KAAA,GAC3B,KAAK,aAAA;AAAA,IACP,GAyGA,KAAiB,cAAc,CAACC,MAAmB;AACjD,UAAI,KAAK,UAAU;AACjB,aAAK,oBAAoB,CAAC,KAAK,WAAW,KAAK,UAAU,CAAC;AAC1D;AAAA,MACF;AAEA,YAAMC,IAASD,EAAE;AACjB,WAAK,iBAAiB,CAACC,EAAO,eAAe,KAAK,UAAU,CAAC,GAC7D,KAAK,UAAU,yBAAyB,KAAK,KAAK;AAAA,IACpD,GAEA,KAAiB,eAAe,CAACD,MAAmB;AAClD,UAAI,KAAK,UAAU;AACjB,aAAK,oBAAoB,CAAC,KAAK,WAAW,KAAK,UAAU,CAAC;AAC1D;AAAA,MACF;AAEA,YAAMC,IAASD,EAAE;AACjB,WAAK,iBAAiB,CAACC,EAAO,eAAe,KAAK,UAAU,CAAC,GAC7D,KAAK,UAAU,0BAA0B,KAAK,KAAK;AAAA,IACrD,GAEA,KAAiB,eAAe,CAACD,MAAmB;AAClD,UAAI,KAAK,UAAU;AACjB,aAAK,oBAAoB,CAAC,KAAK,WAAW,KAAK,UAAU,CAAC;AAC1D;AAAA,MACF;AAEA,YAAMC,IAASD,EAAE;AACjB,WAAK,iBAAiB,CAAC,KAAK,WAAWC,EAAO,aAAa,CAAC,GAC5D,KAAK,UAAU,yBAAyB,KAAK,KAAK;AAAA,IACpD,GAEA,KAAiB,gBAAgB,CAACD,MAAmB;AACnD,UAAI,KAAK,UAAU;AACjB,aAAK,oBAAoB,CAAC,KAAK,WAAW,KAAK,UAAU,CAAC;AAC1D;AAAA,MACF;AAEA,YAAMC,IAASD,EAAE;AACjB,WAAK,iBAAiB,CAAC,KAAK,WAAWC,EAAO,aAAa,CAAC,GAC5D,KAAK,UAAU,0BAA0B,KAAK,KAAK;AAAA,IACrD,GAGA,KAAiB,gBAAgB,CAACD,MAA2B;AAC3D,WAAK,oBAAoBA,GAAG,KAAK;AAAA,IACnC,GAGA,KAAiB,iBAAiB,CAACA,MAA2B;AAC5D,WAAK,oBAAoBA,GAAG,MAAM;AAAA,IACpC;AAAA,EAAA;AAAA,EA9YA,IAAI,QAA0B;AAC5B,WAAO,KAAK,UAAU,KAAK,iBAAiB,KAAK;AAAA,EACnD;AAAA,EACA,IAAI,MAAMR,GAAqB;AAC7B,UAAMU,IAAM,KAAK;AACjB,SAAK,SAAS,KAAK,gBAAgBV,CAAC,GACpC,KAAK,oBAAoB,IACzB,KAAK,oBAAoB,KAAK,MAAM,GAChC,KAAK,WAAWU,KAClB,KAAK,cAAc,SAASA,CAAG;AAAA,EAEnC;AAAA,EAIA,IAAI,eAA6C;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,aAAaV,GAAiC;AAChD,UAAMU,IAAM,KAAK;AACjB,SAAK,gBAAgBV,MAAM,SAAY,SAAY,KAAK,gBAAgBA,CAAC,GAEvE,CAAC,KAAK,qBACN,KAAK,WAAW,UAChB,KAAK,kBAAkB,WAEvB,KAAK,oBAAoB,KAAK,aAAa,GAC3C,KAAK,cAAc,SAAS,MAAS,IAEvC,KAAK,cAAc,gBAAgBU,CAAG;AAAA,EACxC;AAAA,EAyDS,oBAA0B;AACjC,UAAM,kBAAA,GACN,KAAK,cAAA;AAAA,EACP;AAAA,EAES,uBAA6B;AACpC,SAAK,cAAA,GACL,KAAK,eAAA,GACD,KAAK,mBACP,KAAK,gBAAgB,MAAM,GAC3B,KAAK,iBAAiB,KAExB,MAAM,qBAAA;AAAA,EACR;AAAA,EAES,UAAgB;AACvB,SAAK,qBAAA;AAAA,EACP;AAAA,EAES,SAAS;AAChB,UAAMC,IAAM,KAAK,YACXC,IAAM,KAAK;AACjB,QAAI,CAACD,KAAO,CAACC,EAAK,QAAOC;AAEzB,UAAMC,IAAU,KAAK,gBAAgB,OAAO,KAAK,SAAS,GACpDC,IAAW,KAAK,iBAAiB,OAAO,KAAK,UAAU,GAEvDC,IAAkBC;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKV,KAAK,YAAY,UACrB,KAAK,YAAY,KAAK,SAAS,IAC/BJ,CAAO;AAAA,4CACuBC,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKjC,KAAK,YAAY,UACrB,KAAK,YAAY,KAAK,UAAU,IAChCD,CAAO;AAAA,6CACwBE,CAAQ;AAAA;AAAA;AAAA;AAKjD,WAAOE;AAAA;AAAA;AAAA;AAAA,uBAIY,KAAK,WAAWJ,CAAO;AAAA,2BACnB,KAAK,WAAW;AAAA;AAAA,UAEjC,KAAK,YAAY,iBAAiBG,IAAkBH,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA,yBAK5C,KAAK,mBAAmB;AAAA,yBACxB,KAAK,mBAAmB;AAAA,uBAC1B,KAAK,iBAAiB;AAAA,2BAClB,KAAK,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAO/B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,YAI5B,KAAK,aAAa,KAAK,CAAC,IAAI,KAAK,aAAa,MAAM,CAAC;AAAA,8BACnC,KAAK,oBAAoB;AAAA,YAC3C,KAAK,YAAY,UAAUG,IAAkBH,CAAO;AAAA;AAAA;AAAA,UAGtD,KAAK,YAAY,eAAeG,IAAkBH,CAAO;AAAA;AAAA;AAAA,EAGjE;AAAA,EAEQ,aAAaK,GAAmB;AACtC,UAAMC,IAAQD,MAAU,OAClBT,IAASU,IAAQ,KAAK,aAAa,KAAK,aACxCC,IAAQD,IAAQ,KAAK,YAAY,KAAK,YACtCE,IAAYF,IAAQ,KAAK,eAAe,KAAK,eAC7CG,IAAQ,KAAK,YAAYJ,CAAK,GAC9BK,IAAad,GAAQ,aAAa,iBAAiB;AAEzD,WAAOQ;AAAA;AAAA,eAEIE,IAAQ,oBAAoB,kBAAkB;AAAA;AAAA,qBAExCD,CAAK;AAAA;AAAA,mBAEP,KAAK,WAAW,OAAO,GAAG;AAAA,qBACxBI,KAAST,CAAO;AAAA,0BACXU,KAAcV,CAAO;AAAA,wBACvB,OAAOM,IAAQ,KAAK,SAAS,KAAK,SAAS,CAAC;AAAA,wBAC5C,OAAOA,IAAQ,KAAK,aAAa,KAAK,MAAM,CAAC;AAAA,wBAC7C,OAAOC,CAAK,CAAC;AAAA,yBACZC,KAAaR,CAAO;AAAA,2BAClB,KAAK,WAAW;AAAA,wBACnB,KAAK,WAAW,SAASA,CAAO;AAAA,wBAChC,KAAK,WAAW,SAASA,CAAO;AAAA,gBACxC,KAAK,YAAYO,CAAK,CAAC;AAAA,mBACpBD,IAAQ,KAAK,gBAAgB,KAAK,cAAc;AAAA;AAAA;AAAA,EAGjE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,cAAoB;AAC1B,UAAMK,IAAUC;AAAA,MACd;AAAA,MACA;AAAA,IAAA,EACA,MAAM,GAAG,CAAC;AAEZ,QAAID,EAAQ,SAAS;AAQnB;AAGF,UAAM,CAACb,GAAKC,CAAG,IAAIY;AAEnB,IAAI,CAAC,KAAK,aAAa,UAAU,MAAMb,EAAI,YAAYC,EAAI,cACzD,KAAK,WAAW,KAGlB,KAAK,aAAaD,GAClB,KAAK,cAAcC,GACnB,KAAK,2BAA2BD,GAAKC,CAAG,GAExC,KAAK,WAAWD,GAAK,KAAK,aAAa,KAAK,YAAY,GACxD,KAAK,WAAWC,GAAK,KAAK,cAAc,KAAK,aAAa,GAC1D,KAAK,qBAAA;AAAA,EACP;AAAA,EAOQ,eAAqB;AAC3B,SAAK,cAAA,GACL,KAAK,eAAA,GACL,KAAK,YAAA,GACL,KAAK,cAAA;AAAA,EACP;AAAA,EAEA,IAAY,oBAAsC;AAChD,UAAMc,IAAM,KAAK,YAAY,eACvBC,IAAO,KAAK,aAAa;AAE/B,WAAO;AAAA,MACLD,MAAQ,UAAa,MAAMA,CAAG,IAAI,KAAK,MAAMA;AAAA,MAC7CC,MAAS,UAAa,MAAMA,CAAI,IAAI,KAAK,MAAMA;AAAA,IAAA;AAAA,EAEnD;AAAA,EAEQ,2BACNC,GACAC,GACM;AACN,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,oBAAoB,KAAK,MAAM;AACpC;AAAA,IACF;AAEA,QAAI,KAAK,kBAAkB,QAAW;AACpC,WAAK,oBAAoB,KAAK,aAAa;AAC3C;AAAA,IACF;AAEA,UAAMC,IAAWF,EAAU,eACrBG,IAAYF,EAAW;AAE7B,SAAK,YAAY,MAAMC,CAAQ,IAAI,KAAK,SAASA,GACjD,KAAK,aAAa,MAAMC,CAAS,IAAI,KAAK,SAASA,GACnD,KAAK,gBAAgB,KAAK,gBAAgB,CAAC,KAAK,WAAW,KAAK,UAAU,CAAC,GAC3E,KAAK,oBAAoB,KAAK,aAAa;AAAA,EAC7C;AAAA,EAEQ,oBAAoBX,GAA+B;AACzD,UAAM,CAACM,GAAKC,CAAI,IAAI,KAAK,gBAAgBP,CAAK;AAC9C,SAAK,YAAYM,GACjB,KAAK,aAAaC,GAEd,KAAK,eAAY,KAAK,WAAW,QAAQ,OAAOD,CAAG,IACnD,KAAK,gBAAa,KAAK,YAAY,QAAQ,OAAOC,CAAI;AAAA,EAC5D;AAAA,EAEQ,iBAAiBP,GAA+B;AACtD,UAAM,CAACM,GAAKC,CAAI,IAAI,KAAK,gBAAgBP,CAAK;AAC9C,SAAK,SAAS,CAACM,GAAKC,CAAI,GACxB,KAAK,oBAAoB,IACzB,KAAK,oBAAoB,KAAK,MAAM,GACpC,KAAK,cAAc,OAAO;AAAA,EAC5B;AAAA,EAEQ,WACNlB,GACAuB,GACAC,GACM;AACN,IAAAxB,EAAO,iBAAiB,SAASuB,CAAO,GACxCvB,EAAO,iBAAiB,UAAUwB,CAAQ;AAAA,EAC5C;AAAA,EAEQ,gBAAsB;AAC5B,SAAK,YAAY,oBAAoB,SAAS,KAAK,WAAW,GAC9D,KAAK,YAAY,oBAAoB,UAAU,KAAK,YAAY,GAEhE,KAAK,aAAa,oBAAoB,SAAS,KAAK,YAAY,GAChE,KAAK,aAAa,oBAAoB,UAAU,KAAK,aAAa;AAAA,EACpE;AAAA,EAEQ,iBAAuB;AAC7B,eAAWxB,KAAU,CAAC,KAAK,YAAY,KAAK,WAAW;AACrD,MAAAA,GAAQ,gBAAgB,aAAa,GACrCA,GAAQ,gBAAgB,UAAU,GAClCA,GAAQ,gBAAgB,gCAAgC,GACxDA,GAAQ,MAAM,eAAe,SAAS;AAAA,EAE1C;AAAA,EAEQ,uBAA6B;AACnC,UAAME,IAAM,KAAK,YACXC,IAAM,KAAK;AACjB,QAAI,GAACD,KAAO,CAACC;AAEb,iBAAWH,KAAU,CAACE,GAAKC,CAAG;AAC5B,QAAAH,EAAO,WAAW,KAAK,UACvBA,EAAO,WAAW,IAClBA,EAAO,aAAa,eAAe,MAAM,GACzCA,EAAO,aAAa,kCAAkC,EAAE;AAAA,EAE5D;AAAA,EAEQ,gBAAsB;AAC5B,IAAI,KAAK,aAAa,MAAM,MAE5B,KAAK,aAAa,QAAQ,OAAO,GACjC,KAAK,iBAAiB;AAAA,EACxB;AAAA,EAwDQ,oBAAoBD,GAAkBU,GAAyB;AACrE,QAAI,KAAK,YAAY,KAAK,SAAU;AAEpC,UAAMgB,IAAM,KAAK,KAAA,GACXC,IAAM,KAAK,KAAA,GACXC,IAAO,KAAK,MAAA,GACZC,IAAUD,IAAO,IACjBV,IAAM,KAAK,WACXC,IAAO,KAAK,YACZW,IAAUpB,MAAU,QAAQQ,IAAMC,GAClCY,IAAerB,MAAU,QAAQgB,IAAMR,GACvCc,IAAetB,MAAU,QAAQS,IAAOQ;AAE9C,QAAIM,IAAsB;AAE1B,YAAQjC,EAAE,KAAA;AAAA,MACR,KAAK;AAAA,MACL,KAAK;AACH,QAAAiC,IAAOH,IAAUF;AACjB;AAAA,MACF,KAAK;AAAA,MACL,KAAK;AACH,QAAAK,IAAOH,IAAUF;AACjB;AAAA,MACF,KAAK;AACH,QAAAK,IAAOH,IAAUD;AACjB;AAAA,MACF,KAAK;AACH,QAAAI,IAAOH,IAAUD;AACjB;AAAA,MACF,KAAK;AACH,QAAAI,IAAOF;AACP;AAAA,MACF,KAAK;AACH,QAAAE,IAAOD;AACP;AAAA,MACF;AACE;AAAA,IAAA;AAGJ,IAAAhC,EAAE,eAAA;AAEF,UAAMkC,IAAYC,EAAWF,GAAMF,GAAcC,GAAcJ,CAAI;AACnE,IAAIM,MAAcJ,MAElB,KAAK,eAAepB,GAAOwB,CAAS,GACpC,KAAK,UAAU,yBAAyB,KAAK,KAAK;AAAA,EACpD;AAAA,EAEQ,oBAAoBlC,GAAuB;AACjD,QAAI,KAAK,YAAY,KAAK,YAAYA,EAAE,WAAW,EAAG;AAEtD,UAAMU,IAAQ,KAAK,cAAcV,CAAC,GAC5BoC,IAAW,KAAK,eAAe1B,CAAK;AAC1C,SAAK,aAAaA,GAClB,KAAK,iBAAiBV,EAAE,WAExBA,EAAE,eAAA;AACF,QAAI;AACD,MAAAA,EAAE,cAA8B,kBAAkBA,EAAE,SAAS;AAAA,IAChE,QAAQ;AAAA,IAER;AACA,IAAAoC,GAAU,MAAA,GACV,KAAK,eAAe1B,GAAO,KAAK,kBAAkBV,GAAGU,CAAK,CAAC,GAC3D,KAAK,UAAU,yBAAyB,KAAK,KAAK;AAAA,EACpD;AAAA,EAEQ,oBAAoBV,GAAuB;AACjD,IAAI,KAAK,mBAAmBA,EAAE,aAAa,KAAK,eAAe,SAE/DA,EAAE,eAAA,GACF,KAAK,eAAe,KAAK,YAAY,KAAK,kBAAkBA,GAAG,KAAK,UAAU,CAAC,GAC/E,KAAK,UAAU,yBAAyB,KAAK,KAAK;AAAA,EACpD;AAAA,EAEQ,kBAAkBA,GAAuB;AAC/C,QAAI,KAAK,mBAAmBA,EAAE,aAAa,KAAK,eAAe,KAAM;AAErE,UAAMU,IAAQ,KAAK;AACnB,SAAK,aAAa,MAClB,KAAK,iBAAiB;AACtB,QAAI;AACD,MAAAV,EAAE,cAA8B,sBAAsBA,EAAE,SAAS;AAAA,IACpE,QAAQ;AAAA,IAER;AACA,SAAK,UAAU,0BAA0B,KAAK,KAAK,GACnD,KAAK,eAAeU,CAAK,GAAG,MAAA;AAAA,EAC9B;AAAA,EAEQ,sBAAsBV,GAAuB;AACnD,IAAI,KAAK,mBAAmBA,EAAE,cAE9B,KAAK,aAAa,MAClB,KAAK,iBAAiB;AAAA,EACxB;AAAA,EAEQ,eAAeU,GAAmBE,GAAqB;AAC7D,QAAIF,MAAU,OAAO;AACnB,WAAK,iBAAiB,CAACE,GAAO,KAAK,UAAU,CAAC;AAC9C;AAAA,IACF;AAEA,SAAK,iBAAiB,CAAC,KAAK,WAAWA,CAAK,CAAC;AAAA,EAC/C;AAAA,EAEQ,kBAAkBZ,GAAiBU,GAA2B;AACpE,UAAM2B,IAAO,KAAK,WAAA;AAClB,QAAI,CAACA,EAAM,QAAO3B,MAAU,QAAQ,KAAK,YAAY,KAAK;AAE1D,UAAMgB,IAAMhB,MAAU,QAAQ,KAAK,KAAA,IAAS,KAAK,WAC3CiB,IAAMjB,MAAU,QAAQ,KAAK,aAAa,KAAK,KAAA,GAC/C4B,IAAO,KAAK,KAAA,IAAS,KAAK,KAAA;AAChC,QAAIA,KAAQ,EAAG,QAAOZ;AAMtB,UAAMa,KAHJ,KAAK,gBAAgB,aACjB,KAAKvC,EAAE,UAAUqC,EAAK,OAAOA,EAAK,UACjCrC,EAAE,UAAUqC,EAAK,QAAQA,EAAK,SACnBC,IAAO,KAAK,KAAA;AAE9B,WAAOH,EAAWI,GAAKb,GAAKC,GAAK,KAAK,OAAO;AAAA,EAC/C;AAAA,EAEQ,cAAc3B,GAA6B;AACjD,UAAMY,IAAQ,KAAK,kBAAkBZ,GAAG,KAAK,GACvCwC,IAAc,KAAK,IAAI5B,IAAQ,KAAK,SAAS,GAC7C6B,IAAe,KAAK,IAAI7B,IAAQ,KAAK,UAAU;AAErD,WAAI4B,MAAgBC,IACX7B,IAAQ,KAAK,YAAY,QAAQ,SAGnC4B,IAAcC,IAAe,QAAQ;AAAA,EAC9C;AAAA,EAEQ,cAAsB;AAC5B,UAAMC,IAAQC,EAAe,KAAK,WAAW,KAAK,KAAA,GAAQ,KAAK,MAAM,GAC/DC,IAAQD,EAAe,KAAK,YAAY,KAAK,KAAA,GAAQ,KAAK,MAAM,GAChEE,IAAW,KAAK,kBAAkBH,CAAK,GACvCI,IAAW,KAAK,kBAAkBF,CAAK;AAE7C,WAAI,KAAK,gBAAgB,aAChB;AAAA,MACL,UAAUC,CAAQ;AAAA,MAClB,wBAAwBC,CAAQ,MAAMD,CAAQ;AAAA,IAAA,EAC9C,KAAK,GAAG,IAGL;AAAA,MACL,QAAQA,CAAQ;AAAA,MAChB,uBAAuBC,CAAQ,MAAMD,CAAQ;AAAA,IAAA,EAC7C,KAAK,GAAG;AAAA,EACZ;AAAA,EAEQ,YAAYjC,GAAuB;AACzC,UAAMmC,IAAMJ,EAAe/B,GAAO,KAAK,QAAQ,KAAK,MAAM,GACpDoC,IAAS,KAAK,kBAAkBD,CAAG;AAEzC,WAAI,KAAK,gBAAgB,aAChB,UAAUC,CAAM,KAGlB,QAAQA,CAAM;AAAA,EACvB;AAAA,EAEQ,kBAAkBD,GAAqB;AAC7C,UAAME,KAAK,IAAIF,IAAM,GAAG,QAAQ,CAAC;AAEjC,WAAO,SAASA,IAAM,KAAK,QAAQ,CAAC,CAAC,OAAOE,CAAC;AAAA,EAC/C;AAAA,EAEQ,YAAYrC,GAAuB;AACzC,UAAMmC,IAAMJ,EAAe/B,GAAO,KAAK,QAAQ,KAAK,MAAM,GACpDoC,IAAS,KAAK,kBAAkBD,CAAG;AAEzC,WAAI,KAAK,gBAAgB,aAChB,UAAUC,CAAM,KAGlB,QAAQA,CAAM;AAAA,EACvB;AAAA,EAEQ,gBAAgB,CAAC9B,GAAKC,CAAI,GAAuC;AACvE,UAAMO,IAAM,KAAK,KAAA,GACXC,IAAM,KAAK,KAAA,GACXuB,IAAaf,EAAWjB,GAAKQ,GAAKC,GAAK,KAAK,OAAO,GACnDwB,IAAchB,EAAWhB,GAAMO,GAAKC,GAAK,KAAK,OAAO;AAE3D,WAAO,CAAC,KAAK,IAAIuB,GAAYC,CAAW,GAAG,KAAK,IAAID,GAAYC,CAAW,CAAC;AAAA,EAC9E;AAAA,EAEQ,OAAe;AACrB,WAAO1D,EAAU,KAAK,YAAY,OAAO,IAAI,KAAK,GAAG;AAAA,EACvD;AAAA,EAEQ,OAAe;AACrB,WAAOA,EAAU,KAAK,aAAa,OAAO,IAAI,KAAK,GAAG;AAAA,EACxD;AAAA,EAEQ,QAAgB;AACtB,WAAOA,EAAU,KAAK,YAAY,QAAQ,IAAI,KAAK,IAAI;AAAA,EACzD;AAAA,EAEQ,aAA6B;AACnC,WAAO,KAAK,YACR,cAA2B,wBAAwB,GACnD,2BAA2B;AAAA,EACjC;AAAA,EAEQ,eAAeiB,GAAuC;AAC5D,WACE,KAAK,YAAY,cAA2B,gBAAgBA,CAAK,IAAI,KACrE;AAAA,EAEJ;AAAA,EAEQ,YAAYA,GAAkC;AACpD,UAAMT,IAASS,MAAU,QAAQ,KAAK,aAAa,KAAK,aAClD0C,IAAW1C,MAAU,QAAQ,KAAK,WAAW,KAAK,WAClD2C,IAAgBpD,GAAQ,aAAa,YAAY;AACvD,QAAIoD,EAAe,QAAOA;AAE1B,UAAMC,IAAcrD,GAAQ,SAAS,CAAC,GAAG,aAAa,KAAA;AACtD,WAAIqD,KAEGF,KAAY;AAAA,EACrB;AAAA,EAEQ,UACNG,GACA3C,GACM;AACN,SAAK;AAAA,MACH,IAAI,YAAqC2C,GAAM;AAAA,QAC7C,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ,EAAE,OAAA3C,EAAA;AAAA,MAAM,CACjB;AAAA,IAAA;AAAA,EAEL;AACF;AAh2BEf,EAAgB,SAAS2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AADpB,IAAMC,IAAN5D;AAiNuB6D,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAjNfF,EAiNiB,WAAA,OAAA,CAAA;AAGAC,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GApNfF,EAoNiB,WAAA,OAAA,CAAA;AAGAC,EAAA;AAAA,EAA3BC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAvNfF,EAuNiB,WAAA,QAAA,CAAA;AAQxBC,EAAA;AAAA,EADHC,EAAS,EAAE,WAAW,GAAA,CAAO;AAAA,GA9NnBF,EA+NP,WAAA,SAAA,CAAA;AAeAC,EAAA;AAAA,EADHC,EAAS,EAAE,WAAW,GAAA,CAAO;AAAA,GA7OnBF,EA8OP,WAAA,gBAAA,CAAA;AAkBwCC,EAAA;AAAA,EAA3CC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAhQ/BF,EAgQiC,WAAA,YAAA,CAAA;AAGAC,EAAA;AAAA,EAA3CC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAnQ/BF,EAmQiC,WAAA,YAAA,CAAA;AAGNC,EAAA;AAAA,EAArCC,EAAS,EAAE,WAAW,YAAA,CAAa;AAAA,GAtQzBF,EAsQ2B,WAAA,YAAA,CAAA;AAGCC,EAAA;AAAA,EAAtCC,EAAS,EAAE,WAAW,aAAA,CAAc;AAAA,GAzQ1BF,EAyQ4B,WAAA,aAAA,CAAA;AAGIC,EAAA;AAAA,EAA1CC,EAAS,EAAE,WAAW,iBAAA,CAAkB;AAAA,GA5Q9BF,EA4QgC,WAAA,gBAAA,CAAA;AAGCC,EAAA;AAAA,EAA3CC,EAAS,EAAE,WAAW,kBAAA,CAAmB;AAAA,GA/Q/BF,EA+QiC,WAAA,iBAAA,CAAA;AAW5CC,EAAA;AAAA,EADCC,EAAS,EAAE,SAAS,IAAM,WAAWpE,GAAkB;AAAA,GAzR7CkE,EA0RX,WAAA,WAAA,CAAA;AAG6BC,EAAA;AAAA,EAA5BC,EAAS,EAAE,SAAS,GAAA,CAAM;AAAA,GA7RhBF,EA6RkB,WAAA,eAAA,CAAA;AAGZC,EAAA;AAAA,EAAhBE,EAAA;AAAM,GAhSIH,EAgSM,WAAA,aAAA,CAAA;AACAC,EAAA;AAAA,EAAhBE,EAAA;AAAM,GAjSIH,EAiSM,WAAA,cAAA,CAAA;"}
|
|
File without changes
|