@spartan-ng/brain 0.0.1-alpha.707 → 0.0.1-alpha.708
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/fesm2022/spartan-ng-brain-accordion.mjs +30 -30
- package/fesm2022/spartan-ng-brain-accordion.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs +19 -19
- package/fesm2022/spartan-ng-brain-alert-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-autocomplete.mjs +89 -102
- package/fesm2022/spartan-ng-brain-autocomplete.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-avatar.mjs +15 -15
- package/fesm2022/spartan-ng-brain-avatar.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-button.mjs +4 -4
- package/fesm2022/spartan-ng-brain-button.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-calendar.mjs +120 -127
- package/fesm2022/spartan-ng-brain-calendar.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-checkbox.mjs +24 -24
- package/fesm2022/spartan-ng-brain-checkbox.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-collapsible.mjs +17 -17
- package/fesm2022/spartan-ng-brain-collapsible.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-combobox.mjs +151 -178
- package/fesm2022/spartan-ng-brain-combobox.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-command.mjs +43 -52
- package/fesm2022/spartan-ng-brain-command.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-core.mjs +5 -5
- package/fesm2022/spartan-ng-brain-core.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-date-time-luxon.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-date-time.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-dialog.mjs +72 -86
- package/fesm2022/spartan-ng-brain-dialog.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-field.mjs +38 -43
- package/fesm2022/spartan-ng-brain-field.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-forms.mjs +20 -20
- package/fesm2022/spartan-ng-brain-forms.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-hover-card.mjs +24 -32
- package/fesm2022/spartan-ng-brain-hover-card.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-input-otp.mjs +23 -25
- package/fesm2022/spartan-ng-brain-input-otp.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-input.mjs +6 -6
- package/fesm2022/spartan-ng-brain-input.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-label.mjs +6 -6
- package/fesm2022/spartan-ng-brain-label.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-navigation-menu.mjs +49 -53
- package/fesm2022/spartan-ng-brain-navigation-menu.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-popover.mjs +13 -15
- package/fesm2022/spartan-ng-brain-popover.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-progress.mjs +11 -13
- package/fesm2022/spartan-ng-brain-progress.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-radio-group.mjs +28 -34
- package/fesm2022/spartan-ng-brain-radio-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-resizable.mjs +23 -23
- package/fesm2022/spartan-ng-brain-resizable.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-select.mjs +102 -105
- package/fesm2022/spartan-ng-brain-select.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-separator.mjs +7 -7
- package/fesm2022/spartan-ng-brain-separator.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-sheet.mjs +24 -24
- package/fesm2022/spartan-ng-brain-sheet.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-slider.mjs +52 -76
- package/fesm2022/spartan-ng-brain-slider.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-sonner.mjs +108 -132
- package/fesm2022/spartan-ng-brain-sonner.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-switch.mjs +21 -23
- package/fesm2022/spartan-ng-brain-switch.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tabs.mjs +36 -39
- package/fesm2022/spartan-ng-brain-tabs.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-textarea.mjs +6 -6
- package/fesm2022/spartan-ng-brain-textarea.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle-group.mjs +21 -27
- package/fesm2022/spartan-ng-brain-toggle-group.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-toggle.mjs +10 -12
- package/fesm2022/spartan-ng-brain-toggle.mjs.map +1 -1
- package/fesm2022/spartan-ng-brain-tooltip.mjs +27 -27
- package/fesm2022/spartan-ng-brain-tooltip.mjs.map +1 -1
- package/hlm-tailwind-preset.css +6 -6
- package/package.json +44 -43
- package/{autocomplete/index.d.ts → types/spartan-ng-brain-autocomplete.d.ts} +10 -10
- package/{calendar/index.d.ts → types/spartan-ng-brain-calendar.d.ts} +2 -2
- package/{combobox/index.d.ts → types/spartan-ng-brain-combobox.d.ts} +10 -10
- package/{dialog/index.d.ts → types/spartan-ng-brain-dialog.d.ts} +1 -1
- package/{hover-card/index.d.ts → types/spartan-ng-brain-hover-card.d.ts} +1 -1
- package/{select/index.d.ts → types/spartan-ng-brain-select.d.ts} +11 -11
- /package/{accordion/index.d.ts → types/spartan-ng-brain-accordion.d.ts} +0 -0
- /package/{alert-dialog/index.d.ts → types/spartan-ng-brain-alert-dialog.d.ts} +0 -0
- /package/{avatar/index.d.ts → types/spartan-ng-brain-avatar.d.ts} +0 -0
- /package/{button/index.d.ts → types/spartan-ng-brain-button.d.ts} +0 -0
- /package/{checkbox/index.d.ts → types/spartan-ng-brain-checkbox.d.ts} +0 -0
- /package/{collapsible/index.d.ts → types/spartan-ng-brain-collapsible.d.ts} +0 -0
- /package/{command/index.d.ts → types/spartan-ng-brain-command.d.ts} +0 -0
- /package/{core/index.d.ts → types/spartan-ng-brain-core.d.ts} +0 -0
- /package/{date-time-luxon/index.d.ts → types/spartan-ng-brain-date-time-luxon.d.ts} +0 -0
- /package/{date-time/index.d.ts → types/spartan-ng-brain-date-time.d.ts} +0 -0
- /package/{field/index.d.ts → types/spartan-ng-brain-field.d.ts} +0 -0
- /package/{forms/index.d.ts → types/spartan-ng-brain-forms.d.ts} +0 -0
- /package/{input-otp/index.d.ts → types/spartan-ng-brain-input-otp.d.ts} +0 -0
- /package/{input/index.d.ts → types/spartan-ng-brain-input.d.ts} +0 -0
- /package/{label/index.d.ts → types/spartan-ng-brain-label.d.ts} +0 -0
- /package/{navigation-menu/index.d.ts → types/spartan-ng-brain-navigation-menu.d.ts} +0 -0
- /package/{popover/index.d.ts → types/spartan-ng-brain-popover.d.ts} +0 -0
- /package/{progress/index.d.ts → types/spartan-ng-brain-progress.d.ts} +0 -0
- /package/{radio-group/index.d.ts → types/spartan-ng-brain-radio-group.d.ts} +0 -0
- /package/{resizable/index.d.ts → types/spartan-ng-brain-resizable.d.ts} +0 -0
- /package/{separator/index.d.ts → types/spartan-ng-brain-separator.d.ts} +0 -0
- /package/{sheet/index.d.ts → types/spartan-ng-brain-sheet.d.ts} +0 -0
- /package/{slider/index.d.ts → types/spartan-ng-brain-slider.d.ts} +0 -0
- /package/{sonner/index.d.ts → types/spartan-ng-brain-sonner.d.ts} +0 -0
- /package/{switch/index.d.ts → types/spartan-ng-brain-switch.d.ts} +0 -0
- /package/{tabs/index.d.ts → types/spartan-ng-brain-tabs.d.ts} +0 -0
- /package/{textarea/index.d.ts → types/spartan-ng-brain-textarea.d.ts} +0 -0
- /package/{toggle-group/index.d.ts → types/spartan-ng-brain-toggle-group.d.ts} +0 -0
- /package/{toggle/index.d.ts → types/spartan-ng-brain-toggle.d.ts} +0 -0
- /package/{tooltip/index.d.ts → types/spartan-ng-brain-tooltip.d.ts} +0 -0
- /package/{index.d.ts → types/spartan-ng-brain.d.ts} +0 -0
|
@@ -31,78 +31,54 @@ class BrnSlider {
|
|
|
31
31
|
_touched = this._fieldControl.touched;
|
|
32
32
|
_spartanInvalid = this._fieldControl.spartanInvalid;
|
|
33
33
|
/** Unique identifier for the slider element. Auto-generated if not provided. */
|
|
34
|
-
id = input(`brn-slider-${++nextId}`, ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
34
|
+
id = input(`brn-slider-${++nextId}`, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
35
35
|
/** Accessibility label for the slider. Forwarded to all thumbs. */
|
|
36
|
-
ariaLabel = input(null, ...(ngDevMode ?
|
|
36
|
+
ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
37
37
|
/** ID of the element that labels this slider for accessibility. Forwarded to all thumbs. */
|
|
38
|
-
ariaLabelledby = input(null, ...(ngDevMode ?
|
|
38
|
+
ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
|
|
39
39
|
/**
|
|
40
40
|
* The current slider value(s).
|
|
41
41
|
*
|
|
42
42
|
* For single-thumb sliders, this contains one value.
|
|
43
43
|
* For range sliders, values are kept sorted in ascending order.
|
|
44
44
|
*/
|
|
45
|
-
value = model([], ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
45
|
+
value = model([], ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
46
46
|
/** Minimum allowed slider value. */
|
|
47
|
-
min = input(0, ...(ngDevMode ?
|
|
48
|
-
transform: numberAttribute,
|
|
49
|
-
}]));
|
|
47
|
+
min = input(0, { ...(ngDevMode ? { debugName: "min" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
50
48
|
/** Maximum allowed slider value. */
|
|
51
|
-
max = input(100, ...(ngDevMode ?
|
|
52
|
-
transform: numberAttribute,
|
|
53
|
-
}]));
|
|
49
|
+
max = input(100, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
54
50
|
/** Step increment used when changing values. */
|
|
55
|
-
step = input(1, ...(ngDevMode ?
|
|
56
|
-
transform: numberAttribute,
|
|
57
|
-
}]));
|
|
51
|
+
step = input(1, { ...(ngDevMode ? { debugName: "step" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
58
52
|
/** Minimum number of steps required between thumbs in a range slider. */
|
|
59
|
-
minStepsBetweenThumbs = input(0, ...(ngDevMode ?
|
|
60
|
-
transform: numberAttribute,
|
|
61
|
-
}]));
|
|
53
|
+
minStepsBetweenThumbs = input(0, { ...(ngDevMode ? { debugName: "minStepsBetweenThumbs" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
62
54
|
/** Whether the slider is disabled. */
|
|
63
|
-
disabled = input(false, ...(ngDevMode ?
|
|
64
|
-
transform: booleanAttribute,
|
|
65
|
-
}]));
|
|
55
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
66
56
|
/** Whether the slider direction is inverted. */
|
|
67
|
-
inverted = input(false, ...(ngDevMode ?
|
|
68
|
-
transform: booleanAttribute,
|
|
69
|
-
}]));
|
|
57
|
+
inverted = input(false, { ...(ngDevMode ? { debugName: "inverted" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
70
58
|
/** Slider orientation. */
|
|
71
|
-
orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : []));
|
|
59
|
+
orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
72
60
|
/** Whether tick marks should be displayed. */
|
|
73
|
-
showTicks = input(false, ...(ngDevMode ?
|
|
74
|
-
transform: booleanAttribute,
|
|
75
|
-
}]));
|
|
61
|
+
showTicks = input(false, { ...(ngDevMode ? { debugName: "showTicks" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
76
62
|
/** Maximum number of ticks to render. Excess ticks are evenly distributed. */
|
|
77
|
-
maxTicks = input(25, ...(ngDevMode ?
|
|
78
|
-
transform: numberAttribute,
|
|
79
|
-
}]));
|
|
63
|
+
maxTicks = input(25, { ...(ngDevMode ? { debugName: "maxTicks" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
80
64
|
/** Interval at which tick labels are shown. A value of `2` shows a label every second tick. */
|
|
81
|
-
tickLabelInterval = input(2, ...(ngDevMode ?
|
|
82
|
-
transform: numberAttribute,
|
|
83
|
-
}]));
|
|
65
|
+
tickLabelInterval = input(2, { ...(ngDevMode ? { debugName: "tickLabelInterval" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
84
66
|
/** Defines how the tick should be displayed in the UI. */
|
|
85
|
-
formatTick = input((tick) => tick.toString(), ...(ngDevMode ? [{ debugName: "formatTick" }] : []));
|
|
67
|
+
formatTick = input((tick) => tick.toString(), ...(ngDevMode ? [{ debugName: "formatTick" }] : /* istanbul ignore next */ []));
|
|
86
68
|
/** Whether dragging the selected range should move all thumbs together. */
|
|
87
|
-
draggableRange = input(false, ...(ngDevMode ?
|
|
88
|
-
transform: booleanAttribute,
|
|
89
|
-
}]));
|
|
69
|
+
draggableRange = input(false, { ...(ngDevMode ? { debugName: "draggableRange" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
90
70
|
/** Whether only dragging the range should work (overrides normal track clicks). */
|
|
91
|
-
draggableRangeOnly = input(false, ...(ngDevMode ?
|
|
92
|
-
transform: booleanAttribute,
|
|
93
|
-
}]));
|
|
71
|
+
draggableRangeOnly = input(false, { ...(ngDevMode ? { debugName: "draggableRangeOnly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
94
72
|
/** Emits when the value changes. */
|
|
95
73
|
valueChange = output();
|
|
96
74
|
/** @internal Normalized slider values. Values are clamped to `[min, max]` and sorted in ascending order. */
|
|
97
|
-
normalizedValue = computed(() => [...this.value()].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()])), ...(ngDevMode ?
|
|
75
|
+
normalizedValue = computed(() => [...this.value()].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()])), { ...(ngDevMode ? { debugName: "normalizedValue" } : /* istanbul ignore next */ {}), equal: areArrsEqual });
|
|
98
76
|
/** Indexes for all active thumbs. */
|
|
99
|
-
thumbIndexes = computed(() => Array.from({ length: this.normalizedValue().length }, (_, i) => i), ...(ngDevMode ?
|
|
100
|
-
equal: (a, b) => a.length === b.length,
|
|
101
|
-
}]));
|
|
77
|
+
thumbIndexes = computed(() => Array.from({ length: this.normalizedValue().length }, (_, i) => i), { ...(ngDevMode ? { debugName: "thumbIndexes" } : /* istanbul ignore next */ {}), equal: (a, b) => a.length === b.length });
|
|
102
78
|
/** @internal Whether the slider is in range mode and draggable range is enabled */
|
|
103
|
-
isDraggableRange = computed(() => this.draggableRange() && this.normalizedValue().length > 1, ...(ngDevMode ? [{ debugName: "isDraggableRange" }] : []));
|
|
79
|
+
isDraggableRange = computed(() => this.draggableRange() && this.normalizedValue().length > 1, ...(ngDevMode ? [{ debugName: "isDraggableRange" }] : /* istanbul ignore next */ []));
|
|
104
80
|
/** @internal Whether dragging should only move the range. */
|
|
105
|
-
isDraggableRangeOnly = computed(() => this.draggableRangeOnly() && this.isDraggableRange(), ...(ngDevMode ? [{ debugName: "isDraggableRangeOnly" }] : []));
|
|
81
|
+
isDraggableRangeOnly = computed(() => this.draggableRangeOnly() && this.isDraggableRange(), ...(ngDevMode ? [{ debugName: "isDraggableRangeOnly" }] : /* istanbul ignore next */ []));
|
|
106
82
|
_direction = this._dir.valueSignal;
|
|
107
83
|
/** @internal Logical edge from which the slider value increases. */
|
|
108
84
|
slidingSource = computed(() => {
|
|
@@ -114,17 +90,17 @@ class BrnSlider {
|
|
|
114
90
|
const isLtr = this._direction() === 'ltr';
|
|
115
91
|
const fromLeft = (isLtr && !inverted) || (!isLtr && inverted);
|
|
116
92
|
return fromLeft ? 'left' : 'right';
|
|
117
|
-
}, ...(ngDevMode ? [{ debugName: "slidingSource" }] : []));
|
|
93
|
+
}, ...(ngDevMode ? [{ debugName: "slidingSource" }] : /* istanbul ignore next */ []));
|
|
118
94
|
/** @internal */
|
|
119
|
-
isHorizontal = computed(() => this.orientation() === 'horizontal', ...(ngDevMode ? [{ debugName: "isHorizontal" }] : []));
|
|
95
|
+
isHorizontal = computed(() => this.orientation() === 'horizontal', ...(ngDevMode ? [{ debugName: "isHorizontal" }] : /* istanbul ignore next */ []));
|
|
120
96
|
/** @internal Reference to the slider track instance. */
|
|
121
|
-
track = signal(null, ...(ngDevMode ? [{ debugName: "track" }] : []));
|
|
97
|
+
track = signal(null, ...(ngDevMode ? [{ debugName: "track" }] : /* istanbul ignore next */ []));
|
|
122
98
|
/** @internal Reference to the slider range instance. */
|
|
123
|
-
range = signal(null, ...(ngDevMode ? [{ debugName: "range" }] : []));
|
|
99
|
+
range = signal(null, ...(ngDevMode ? [{ debugName: "range" }] : /* istanbul ignore next */ []));
|
|
124
100
|
/** @internal All registered slider thumbs. */
|
|
125
|
-
thumbs = signal([], ...(ngDevMode ? [{ debugName: "thumbs" }] : []));
|
|
101
|
+
thumbs = signal([], ...(ngDevMode ? [{ debugName: "thumbs" }] : /* istanbul ignore next */ []));
|
|
126
102
|
/** @internal Index of the thumb currently being updated. */
|
|
127
|
-
valueIndexToChange = signal(0, ...(ngDevMode ? [{ debugName: "valueIndexToChange" }] : []));
|
|
103
|
+
valueIndexToChange = signal(0, ...(ngDevMode ? [{ debugName: "valueIndexToChange" }] : /* istanbul ignore next */ []));
|
|
128
104
|
/** @internal Visible tick values after applying density reduction. */
|
|
129
105
|
ticks = computed(() => {
|
|
130
106
|
if (!this.showTicks()) {
|
|
@@ -144,9 +120,9 @@ class BrnSlider {
|
|
|
144
120
|
}
|
|
145
121
|
const stride = Math.ceil(totalCount / maxTicks);
|
|
146
122
|
return Array.from({ length: totalCount }, (_, i) => min + i * step).filter((_, index) => index % stride === 0);
|
|
147
|
-
}, ...(ngDevMode ? [{ debugName: "ticks" }] : []));
|
|
123
|
+
}, ...(ngDevMode ? [{ debugName: "ticks" }] : /* istanbul ignore next */ []));
|
|
148
124
|
/** @internal Disabled state that can be controlled internally or externally. */
|
|
149
|
-
mutableDisabled = linkedSignal(() => this.disabled(), ...(ngDevMode ? [{ debugName: "mutableDisabled" }] : []));
|
|
125
|
+
mutableDisabled = linkedSignal(() => this.disabled(), ...(ngDevMode ? [{ debugName: "mutableDisabled" }] : /* istanbul ignore next */ []));
|
|
150
126
|
/** @internal Store the on change callback */
|
|
151
127
|
_onChange;
|
|
152
128
|
/** @internal Store the on touched callback */
|
|
@@ -257,10 +233,10 @@ class BrnSlider {
|
|
|
257
233
|
this._onTouched?.();
|
|
258
234
|
}
|
|
259
235
|
}
|
|
260
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
261
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
236
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSlider, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
237
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: BrnSlider, isStandalone: true, selector: "[brnSlider]", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, minStepsBetweenThumbs: { classPropertyName: "minStepsBetweenThumbs", publicName: "minStepsBetweenThumbs", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, inverted: { classPropertyName: "inverted", publicName: "inverted", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, showTicks: { classPropertyName: "showTicks", publicName: "showTicks", isSignal: true, isRequired: false, transformFunction: null }, maxTicks: { classPropertyName: "maxTicks", publicName: "maxTicks", isSignal: true, isRequired: false, transformFunction: null }, tickLabelInterval: { classPropertyName: "tickLabelInterval", publicName: "tickLabelInterval", isSignal: true, isRequired: false, transformFunction: null }, formatTick: { classPropertyName: "formatTick", publicName: "formatTick", isSignal: true, isRequired: false, transformFunction: null }, draggableRange: { classPropertyName: "draggableRange", publicName: "draggableRange", isSignal: true, isRequired: false, transformFunction: null }, draggableRangeOnly: { classPropertyName: "draggableRangeOnly", publicName: "draggableRangeOnly", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange" }, host: { attributes: { "data-slot": "slider" }, listeners: { "focusout": "_onFocusOut($event)" }, properties: { "attr.id": "id()", "attr.dir": "_direction()", "attr.aria-disabled": "mutableDisabled() ? \"true\" : null", "attr.data-disabled": "mutableDisabled() ? \"\" : null", "attr.data-inverted": "inverted() ? \"\" : null", "attr.data-orientation": "orientation()", "attr.aria-invalid": "_ariaInvalid() ? \"true\" : null", "attr.data-invalid": "_ariaInvalid() ? \"true\" : null", "attr.data-matches-spartan-invalid": "_ariaInvalid() ? \"true\" : null", "attr.data-dirty": "_dirty() ? \"true\" : null", "attr.data-touched": "_touched() ? \"true\" : null" } }, providers: [BRN_SLIDER_VALUE_ACCESSOR, provideBrnSlider(BrnSlider)], exportAs: ["brnSlider"], hostDirectives: [{ directive: i1.BrnFieldControl }], ngImport: i0 });
|
|
262
238
|
}
|
|
263
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSlider, decorators: [{
|
|
264
240
|
type: Directive,
|
|
265
241
|
args: [{
|
|
266
242
|
selector: '[brnSlider]',
|
|
@@ -331,11 +307,11 @@ class BrnSliderRange {
|
|
|
331
307
|
inset.reverse();
|
|
332
308
|
}
|
|
333
309
|
return inset.join(' ');
|
|
334
|
-
}, ...(ngDevMode ? [{ debugName: "_rangeInset" }] : []));
|
|
335
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
336
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
310
|
+
}, ...(ngDevMode ? [{ debugName: "_rangeInset" }] : /* istanbul ignore next */ []));
|
|
311
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderRange, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
312
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnSliderRange, isStandalone: true, selector: "[brnSliderRange]", host: { attributes: { "data-slot": "slider-range" }, properties: { "attr.data-disabled": "_slider.mutableDisabled() ? \"\" : null", "attr.data-orientation": "_slider.orientation()", "attr.data-draggable-range": "_slider.isDraggableRange() ? \"\" : null", "style.inset-inline": "_slider.isHorizontal() ? _rangeInset() : undefined", "style.inset-block": "!_slider.isHorizontal() ? _rangeInset() : undefined" } }, ngImport: i0 });
|
|
337
313
|
}
|
|
338
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderRange, decorators: [{
|
|
339
315
|
type: Directive,
|
|
340
316
|
args: [{
|
|
341
317
|
selector: '[brnSliderRange]',
|
|
@@ -377,14 +353,14 @@ class BrnSliderThumb {
|
|
|
377
353
|
_thumbReady = computed(() => {
|
|
378
354
|
const size = this._size();
|
|
379
355
|
return !!size && size.width > 0;
|
|
380
|
-
}, ...(ngDevMode ? [{ debugName: "_thumbReady" }] : []));
|
|
381
|
-
_index = computed(() => this._slider.thumbs().findIndex((thumb) => thumb === this), ...(ngDevMode ? [{ debugName: "_index" }] : []));
|
|
356
|
+
}, ...(ngDevMode ? [{ debugName: "_thumbReady" }] : /* istanbul ignore next */ []));
|
|
357
|
+
_index = computed(() => this._slider.thumbs().findIndex((thumb) => thumb === this), ...(ngDevMode ? [{ debugName: "_index" }] : /* istanbul ignore next */ []));
|
|
382
358
|
percentage = computed(() => {
|
|
383
359
|
const range = this._slider.max() - this._slider.min();
|
|
384
360
|
if (range === 0)
|
|
385
361
|
return 0;
|
|
386
362
|
return ((this._slider.normalizedValue()[this._index()] - this._slider.min()) / range) * 100;
|
|
387
|
-
}, ...(ngDevMode ? [{ debugName: "percentage" }] : []));
|
|
363
|
+
}, ...(ngDevMode ? [{ debugName: "percentage" }] : /* istanbul ignore next */ []));
|
|
388
364
|
_thumbInBoundsOffset = computed(() => {
|
|
389
365
|
// we can't compute the offset on the server
|
|
390
366
|
if (isPlatformServer(this._platform)) {
|
|
@@ -398,7 +374,7 @@ class BrnSliderThumb {
|
|
|
398
374
|
const offset = linearScale([0, 50], [0, halfSize]);
|
|
399
375
|
const direction = this._slider.slidingSource() === 'left' || this._slider.slidingSource() === 'top' ? 1 : -1;
|
|
400
376
|
return (halfSize - offset(this.percentage()) * direction) * direction;
|
|
401
|
-
}, ...(ngDevMode ? [{ debugName: "_thumbInBoundsOffset" }] : []));
|
|
377
|
+
}, ...(ngDevMode ? [{ debugName: "_thumbInBoundsOffset" }] : /* istanbul ignore next */ []));
|
|
402
378
|
/**
|
|
403
379
|
* Offsets the thumb centre point while sliding to ensure it remains
|
|
404
380
|
* within the bounds of the slider when reaching the edges.
|
|
@@ -410,9 +386,9 @@ class BrnSliderThumb {
|
|
|
410
386
|
return this.percentage() + '%';
|
|
411
387
|
}
|
|
412
388
|
return `calc(${this.percentage()}% + ${this._thumbInBoundsOffset()}px)`;
|
|
413
|
-
}, ...(ngDevMode ? [{ debugName: "_thumbOffset" }] : []));
|
|
414
|
-
_computedAriaLabel = computed(() => this._slider.ariaLabel() || `Value ${this._index() + 1} of ${this._slider.normalizedValue().length}`, ...(ngDevMode ? [{ debugName: "_computedAriaLabel" }] : []));
|
|
415
|
-
_transformValue = computed(() => this._slider.orientation() === 'horizontal' ? 'translateX(-50%)' : 'translateY(-50%)', ...(ngDevMode ? [{ debugName: "_transformValue" }] : []));
|
|
389
|
+
}, ...(ngDevMode ? [{ debugName: "_thumbOffset" }] : /* istanbul ignore next */ []));
|
|
390
|
+
_computedAriaLabel = computed(() => this._slider.ariaLabel() || `Value ${this._index() + 1} of ${this._slider.normalizedValue().length}`, ...(ngDevMode ? [{ debugName: "_computedAriaLabel" }] : /* istanbul ignore next */ []));
|
|
391
|
+
_transformValue = computed(() => this._slider.orientation() === 'horizontal' ? 'translateX(-50%)' : 'translateY(-50%)', ...(ngDevMode ? [{ debugName: "_transformValue" }] : /* istanbul ignore next */ []));
|
|
416
392
|
constructor() {
|
|
417
393
|
this._slider.addThumb(this);
|
|
418
394
|
this._destroyRef.onDestroy(() => {
|
|
@@ -484,10 +460,10 @@ class BrnSliderThumb {
|
|
|
484
460
|
}
|
|
485
461
|
event.preventDefault();
|
|
486
462
|
}
|
|
487
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
488
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
463
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderThumb, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
464
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnSliderThumb, isStandalone: true, selector: "[brnSliderThumb]", host: { attributes: { "role": "slider", "data-slot": "slider-thumb" }, listeners: { "pointerdown": "_onPointerDown($event)", "pointermove": "_onPointerMove($event)", "pointerup": "_onPointerUp($event)", "keydown": "handleKeydown($event)" }, properties: { "attr.aria-label": "_computedAriaLabel()", "attr.aria-labelledby": "_slider.ariaLabelledby() || null", "attr.aria-orientation": "_slider.orientation()", "attr.aria-valuenow": "_slider.normalizedValue()[_index()]", "attr.aria-valuemin": "_slider.min()", "attr.aria-valuemax": "_slider.max()", "attr.tabindex": "_slider.mutableDisabled() ? -1 : 0", "attr.data-disabled": "_slider.mutableDisabled() ? \"\" : null", "attr.data-orientation": "_slider.orientation()", "style.inset-inline-start": "_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined", "style.inset-inline-end": "_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined", "style.inset-block-end": "!_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined", "style.inset-block-start": "!_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined", "style.visibility": "_thumbReady() ? undefined : \"hidden\"", "style.pointer-events": "_thumbReady() ? undefined : \"none\"", "style.transform": "_transformValue()" } }, ngImport: i0 });
|
|
489
465
|
}
|
|
490
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
466
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderThumb, decorators: [{
|
|
491
467
|
type: Directive,
|
|
492
468
|
args: [{
|
|
493
469
|
selector: '[brnSliderThumb]',
|
|
@@ -550,10 +526,10 @@ class BrnSliderTick {
|
|
|
550
526
|
this._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));
|
|
551
527
|
});
|
|
552
528
|
}
|
|
553
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
554
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
529
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderTick, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
530
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnSliderTick, isStandalone: true, selector: "[brnSliderTick]", host: { attributes: { "data-slot": "slider-tick" } }, ngImport: i0 });
|
|
555
531
|
}
|
|
556
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
532
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderTick, decorators: [{
|
|
557
533
|
type: Directive,
|
|
558
534
|
args: [{
|
|
559
535
|
selector: '[brnSliderTick]',
|
|
@@ -693,10 +669,10 @@ class BrnSliderTrack {
|
|
|
693
669
|
_getPointerPosition(event) {
|
|
694
670
|
return this._slider.orientation() === 'horizontal' ? event.clientX : event.clientY;
|
|
695
671
|
}
|
|
696
|
-
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
697
|
-
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
672
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderTrack, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
673
|
+
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: BrnSliderTrack, isStandalone: true, selector: "[brnSliderTrack]", host: { attributes: { "data-slot": "slider-track" }, listeners: { "pointerdown": "onPointerDown($event)", "pointermove": "onPointerMove($event)", "pointerup": "onPointerUp($event)" }, properties: { "attr.data-disabled": "_slider.mutableDisabled() ? \"\" : null", "attr.data-orientation": "_slider.orientation()" } }, providers: [provideBrnSliderTrack(BrnSliderTrack)], ngImport: i0 });
|
|
698
674
|
}
|
|
699
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
675
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: BrnSliderTrack, decorators: [{
|
|
700
676
|
type: Directive,
|
|
701
677
|
args: [{
|
|
702
678
|
selector: '[brnSliderTrack]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spartan-ng-brain-slider.mjs","sources":["../../../../libs/brain/slider/src/lib/brn-slider.token.ts","../../../../libs/brain/slider/src/lib/brn-slider.ts","../../../../libs/brain/slider/src/lib/brn-slider-range.ts","../../../../libs/brain/slider/src/lib/utils/linear-scale.ts","../../../../libs/brain/slider/src/lib/brn-slider-thumb.ts","../../../../libs/brain/slider/src/lib/brn-slider-tick.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.token.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.ts","../../../../libs/brain/slider/src/index.ts","../../../../libs/brain/slider/src/spartan-ng-brain-slider.ts"],"sourcesContent":["import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSlider } from './brn-slider';\n\nconst BrnSliderToken = new InjectionToken<BrnSlider>('BrnSliderToken');\n\nexport function provideBrnSlider(slider: Type<BrnSlider>): ExistingProvider {\n\treturn { provide: BrnSliderToken, useExisting: slider };\n}\n\nexport function injectBrnSlider(): BrnSlider {\n\treturn inject(BrnSliderToken);\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tbooleanAttribute,\n\tcomputed,\n\tDirective,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\ttype OnInit,\n\toutput,\n\tsignal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl, NgModel } from '@angular/forms';\nimport { BrnFieldControl } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport type { BrnSliderRange } from './brn-slider-range';\nimport type { BrnSliderThumb } from './brn-slider-thumb';\nimport type { BrnSliderTrack } from './brn-slider-track';\nimport { provideBrnSlider } from './brn-slider.token';\n\nexport const BRN_SLIDER_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSlider),\n\tmulti: true,\n};\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[brnSlider]',\n\texportAs: 'brnSlider',\n\tproviders: [BRN_SLIDER_VALUE_ACCESSOR, provideBrnSlider(BrnSlider)],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'[attr.id]': 'id()',\n\t\t'[attr.dir]': '_direction()',\n\t\t'[attr.aria-disabled]': 'mutableDisabled() ? \"true\" : null',\n\t\t'[attr.data-disabled]': 'mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-inverted]': 'inverted() ? \"\" : null',\n\t\t'[attr.data-orientation]': 'orientation()',\n\t\t'data-slot': 'slider',\n\t\t'(focusout)': '_onFocusOut($event)',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty() ? \"true\" : null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\" : null',\n\t},\n})\nexport class BrnSlider implements ControlValueAccessor, OnInit {\n\tprivate readonly _dir = inject(Directionality);\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl);\n\tpublic ngControl: NgControl | null = null;\n\n\tprotected readonly _ariaInvalid = this._fieldControl.invalid;\n\tprotected readonly _dirty = this._fieldControl.dirty;\n\tprotected readonly _touched = this._fieldControl.touched;\n\tprotected readonly _spartanInvalid = this._fieldControl.spartanInvalid;\n\n\t/** Unique identifier for the slider element. Auto-generated if not provided. */\n\tpublic readonly id = input<string>(`brn-slider-${++nextId}`);\n\n\t/** Accessibility label for the slider. Forwarded to all thumbs. */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** ID of the element that labels this slider for accessibility. Forwarded to all thumbs. */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n\t/**\n\t * The current slider value(s).\n\t *\n\t * For single-thumb sliders, this contains one value.\n\t * For range sliders, values are kept sorted in ascending order.\n\t */\n\tpublic readonly value = model<number[]>([]);\n\n\t/** Minimum allowed slider value. */\n\tpublic readonly min = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Maximum allowed slider value. */\n\tpublic readonly max = input<number, NumberInput>(100, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Step increment used when changing values. */\n\tpublic readonly step = input<number, NumberInput>(1, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Minimum number of steps required between thumbs in a range slider. */\n\tpublic readonly minStepsBetweenThumbs = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Whether the slider is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the slider direction is inverted. */\n\tpublic readonly inverted = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Slider orientation. */\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n\t/** Whether tick marks should be displayed. */\n\tpublic readonly showTicks = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Maximum number of ticks to render. Excess ticks are evenly distributed. */\n\tpublic readonly maxTicks = input<number, NumberInput>(25, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Interval at which tick labels are shown. A value of `2` shows a label every second tick. */\n\tpublic readonly tickLabelInterval = input<number, NumberInput>(2, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Defines how the tick should be displayed in the UI. */\n\tpublic readonly formatTick = input<(tick: number) => string>((tick) => tick.toString());\n\n\t/** Whether dragging the selected range should move all thumbs together. */\n\tpublic readonly draggableRange = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether only dragging the range should work (overrides normal track clicks). */\n\tpublic readonly draggableRangeOnly = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Emits when the value changes. */\n\tpublic readonly valueChange = output<number[]>();\n\n\t/** @internal Normalized slider values. Values are clamped to `[min, max]` and sorted in ascending order. */\n\tpublic readonly normalizedValue = computed(\n\t\t() => [...this.value()].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()])),\n\t\t{ equal: areArrsEqual },\n\t);\n\n\t/** Indexes for all active thumbs. */\n\tpublic readonly thumbIndexes = computed(() => Array.from({ length: this.normalizedValue().length }, (_, i) => i), {\n\t\tequal: (a, b) => a.length === b.length,\n\t});\n\n\t/** @internal Whether the slider is in range mode and draggable range is enabled */\n\tpublic readonly isDraggableRange = computed(() => this.draggableRange() && this.normalizedValue().length > 1);\n\n\t/** @internal Whether dragging should only move the range. */\n\tpublic readonly isDraggableRangeOnly = computed(() => this.draggableRangeOnly() && this.isDraggableRange());\n\n\tprotected readonly _direction = this._dir.valueSignal;\n\n\t/** @internal Logical edge from which the slider value increases. */\n\tpublic readonly slidingSource = computed<'top' | 'bottom' | 'left' | 'right'>(() => {\n\t\tconst orientation = this.orientation();\n\t\tconst inverted = this.inverted();\n\n\t\tif (orientation === 'vertical') {\n\t\t\treturn inverted ? 'top' : 'bottom';\n\t\t}\n\n\t\tconst isLtr = this._direction() === 'ltr';\n\t\tconst fromLeft = (isLtr && !inverted) || (!isLtr && inverted);\n\n\t\treturn fromLeft ? 'left' : 'right';\n\t});\n\n\t/** @internal */\n\tpublic readonly isHorizontal = computed(() => this.orientation() === 'horizontal');\n\n\t/** @internal Reference to the slider track instance. */\n\tpublic readonly track = signal<BrnSliderTrack | null>(null);\n\n\t/** @internal Reference to the slider range instance. */\n\tpublic readonly range = signal<BrnSliderRange | null>(null);\n\n\t/** @internal All registered slider thumbs. */\n\tpublic readonly thumbs = signal<BrnSliderThumb[]>([]);\n\n\t/** @internal Index of the thumb currently being updated. */\n\tpublic readonly valueIndexToChange = signal(0);\n\n\t/** @internal Visible tick values after applying density reduction. */\n\tpublic readonly ticks = computed(() => {\n\t\tif (!this.showTicks()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst maxTicks = this.maxTicks();\n\n\t\tif (step <= 0 || min > max) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst totalCount = Math.floor((max - min) / step) + 1;\n\n\t\t// No need to reduce\n\t\tif (totalCount <= maxTicks) {\n\t\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step);\n\t\t}\n\n\t\tconst stride = Math.ceil(totalCount / maxTicks);\n\n\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step).filter((_, index) => index % stride === 0);\n\t});\n\n\t/** @internal Disabled state that can be controlled internally or externally. */\n\tpublic readonly mutableDisabled = linkedSignal(() => this.disabled());\n\n\t/** @internal Store the on change callback */\n\tprivate _onChange?: ChangeFn<number[]>;\n\n\t/** @internal Store the on touched callback */\n\tprivate _onTouched?: TouchFn;\n\n\tngOnInit(): void {\n\t\tthis.ngControl = this._injector.get(NgControl, null);\n\n\t\t// If bound to an Angular form control, writeValue() will run after ngOnInit,\n\t\t// so avoid initializing defaults here to prevent a transient min-value override.\n\t\tif (!this.ngControl) {\n\t\t\tif (!this.value().length) {\n\t\t\t\tconst defaultValue = [this.min()];\n\t\t\t\tthis.value.set(defaultValue);\n\t\t\t}\n\n\t\t\tconst normalizedValue = this.value()\n\t\t\t\t.map((v) => clamp(v, [this.min(), this.max()]))\n\t\t\t\t.sort((a, b) => a - b);\n\n\t\t\tif (!areArrsEqual(normalizedValue, this.value())) {\n\t\t\t\tthis.value.set(normalizedValue);\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: number[]) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.mutableDisabled.set(isDisabled);\n\t}\n\n\twriteValue(value: number[]): void {\n\t\tif (!Array.isArray(value)) return;\n\n\t\tif (this.ngControl instanceof NgModel && !this._onChange) {\n\t\t\t// Avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-2946355465\n\t\t\treturn;\n\t\t}\n\n\t\tconst newValue = [...value].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()]));\n\t\tthis.value.set(newValue);\n\t}\n\n\t/** Sets a new value for the slider at the given thumb index. */\n\tsetValue(value: number, atIndex: number): void {\n\t\tconst decimalCount = getDecimalCount(this.step());\n\t\tconst snapToStep = roundValue(\n\t\t\tMath.round((value - this.min()) / this.step()) * this.step() + this.min(),\n\t\t\tdecimalCount,\n\t\t);\n\n\t\tvalue = clamp(snapToStep, [this.min(), this.max()]);\n\n\t\tconst newValue = [...this.normalizedValue()];\n\t\tnewValue[atIndex] = value;\n\t\tnewValue.sort((a, b) => a - b);\n\n\t\tif (!hasMinStepsBetweenValues(newValue, this.minStepsBetweenThumbs() * this.step())) return;\n\n\t\tconst newValIndex = newValue.findIndex((val) => val === value);\n\t\tthis.valueIndexToChange.set(newValIndex);\n\n\t\tif (areArrsEqual(newValue, this.value())) return;\n\n\t\tthis.value.set(newValue);\n\t\tthis._onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\n\t\tif (this.thumbs()[newValIndex]) {\n\t\t\tthis.thumbs()[newValIndex].elementRef.nativeElement.focus();\n\t\t}\n\t}\n\n\t/** Moves the entire range by a delta value, snapping to step and preserving spacing. */\n\tsetAllValuesByDelta(delta: number): void {\n\t\tconst current = this.normalizedValue();\n\t\tif (!current.length || delta === 0) return;\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst decimalCount = getDecimalCount(step);\n\n\t\tconst snappedDelta = roundValue(Math.round(delta / step) * step, decimalCount);\n\t\tif (snappedDelta === 0) return;\n\n\t\tlet next = current.map((v) => v + snappedDelta);\n\n\t\tconst rangeMin = Math.min(...next);\n\t\tconst rangeMax = Math.max(...next);\n\n\t\tif (rangeMin < min) {\n\t\t\tconst offset = min - rangeMin;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t} else if (rangeMax > max) {\n\t\t\tconst offset = max - rangeMax;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t}\n\n\t\tnext = next.map((v) => roundValue(v, decimalCount));\n\n\t\tif (areArrsEqual(next, this.value())) return;\n\n\t\tthis.value.set(next);\n\t\tthis._onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t}\n\n\t/** @internal */\n\taddThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => {\n\t\t\tthumbs.push(thumb);\n\t\t\treturn [...thumbs];\n\t\t});\n\t}\n\n\t/** @internal */\n\tremoveThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => thumbs.filter((t) => t !== thumb));\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n\nfunction areArrsEqual(arr1: unknown[], arr2: unknown[]): boolean {\n\treturn String(arr1) === String(arr2);\n}\n\nfunction roundValue(value: number, decimalCount: number): number {\n\tconst rounder = Math.pow(10, decimalCount);\n\treturn Math.round(value * rounder) / rounder;\n}\n\nfunction getDecimalCount(value: number): number {\n\treturn (String(value).split('.')[1] || '').length;\n}\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction getStepsBetweenValues(values: number[]): number[] {\n\treturn values.slice(0, -1).map((value, index) => values[index + 1]! - value);\n}\n\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number): boolean {\n\tif (minStepsBetweenValues > 0) {\n\t\tconst stepsBetweenValues = getStepsBetweenValues(values);\n\t\tconst actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n\t\treturn actualMinStepsBetweenValues >= minStepsBetweenValues;\n\t}\n\treturn true;\n}\n","import { computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderRange]',\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[attr.data-draggable-range]': '_slider.isDraggableRange() ? \"\" : null',\n\t\t'data-slot': 'slider-range',\n\t\t'[style.inset-inline]': '_slider.isHorizontal() ? _rangeInset() : undefined',\n\t\t'[style.inset-block]': '!_slider.isHorizontal() ? _rangeInset() : undefined',\n\t},\n})\nexport class BrnSliderRange {\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tthis._slider.range.set(this);\n\t}\n\n\tprotected readonly _rangeInset = computed(() => {\n\t\tconst thumbs = this._slider.thumbs();\n\t\tif (!thumbs.length) return;\n\n\t\tconst inverted = this._slider.inverted();\n\t\tconst isHorizontal = this._slider.isHorizontal();\n\n\t\tconst start = thumbs[0].percentage();\n\t\tconst end = thumbs[thumbs.length - 1].percentage();\n\n\t\tconst inset = thumbs.length > 1 ? [`${start}%`, `${100 - end}%`] : ['0px', `${100 - start}%`];\n\n\t\tif (!isHorizontal) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\tif (inverted) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\treturn inset.join(' ');\n\t});\n}\n","export function linearScale(\n\tinput: readonly [number, number],\n\toutput: readonly [number, number],\n): (value: number) => number {\n\treturn (value: number) => {\n\t\tif (input[0] === input[1] || output[0] === output[1]) return output[0];\n\t\tconst ratio = (output[1] - output[0]) / (input[1] - input[0]);\n\t\treturn output[0] + ratio * (value - input[0]);\n\t};\n}\n","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, Directive, ElementRef, inject, PLATFORM_ID } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\n\n@Directive({\n\tselector: '[brnSliderThumb]',\n\thost: {\n\t\trole: 'slider',\n\t\t'[attr.aria-label]': `_computedAriaLabel()`,\n\t\t'[attr.aria-labelledby]': '_slider.ariaLabelledby() || null',\n\t\t'[attr.aria-orientation]': '_slider.orientation()',\n\t\t'[attr.aria-valuenow]': '_slider.normalizedValue()[_index()]',\n\t\t'[attr.aria-valuemin]': '_slider.min()',\n\t\t'[attr.aria-valuemax]': '_slider.max()',\n\t\t'[attr.tabindex]': '_slider.mutableDisabled() ? -1 : 0',\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[style.inset-inline-start]':\n\t\t\t'_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-inline-end]': '_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.inset-block-end]': '!_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-block-start]':\n\t\t\t'!_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.visibility]': '_thumbReady() ? undefined : \"hidden\"',\n\t\t'[style.pointer-events]': '_thumbReady() ? undefined : \"none\"',\n\t\t'[style.transform]': '_transformValue()',\n\t\t'data-slot': 'slider-thumb',\n\t\t'(pointerdown)': '_onPointerDown($event)',\n\t\t'(pointermove)': '_onPointerMove($event)',\n\t\t'(pointerup)': '_onPointerUp($event)',\n\t\t'(keydown)': 'handleKeydown($event)',\n\t},\n})\nexport class BrnSliderThumb {\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _size = injectElementSize();\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/**\n\t * Indicates whether the thumb is ready to be displayed and interactable.\n\t *\n\t * This signal returns `true` when the element's size has been measured\n\t * and the width is greater than 0. It ensures that the thumb is not\n\t * rendered or interacted with prematurely, which prevents layout\n\t * issues or first-frame “jerks” when using SSR.\n\t */\n\tprotected readonly _thumbReady = computed(() => {\n\t\tconst size = this._size();\n\t\treturn !!size && size.width > 0;\n\t});\n\n\tprotected readonly _index = computed(() => this._slider.thumbs().findIndex((thumb) => thumb === this));\n\n\tpublic readonly percentage = computed(() => {\n\t\tconst range = this._slider.max() - this._slider.min();\n\t\tif (range === 0) return 0;\n\n\t\treturn ((this._slider.normalizedValue()[this._index()] - this._slider.min()) / range) * 100;\n\t});\n\n\tprivate readonly _thumbInBoundsOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst size = this._slider.isHorizontal() ? this._size()?.width : this._size()?.height;\n\t\tif (!size) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst halfSize = size / 2;\n\t\tconst offset = linearScale([0, 50], [0, halfSize]);\n\t\tconst direction = this._slider.slidingSource() === 'left' || this._slider.slidingSource() === 'top' ? 1 : -1;\n\n\t\treturn (halfSize - offset(this.percentage()) * direction) * direction;\n\t});\n\n\t/**\n\t * Offsets the thumb centre point while sliding to ensure it remains\n\t * within the bounds of the slider when reaching the edges.\n\t * Based on https://github.com/radix-ui/primitives/blob/main/packages/react/slider/src/slider.tsx\n\t */\n\tprotected readonly _thumbOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn this.percentage() + '%';\n\t\t}\n\n\t\treturn `calc(${this.percentage()}% + ${this._thumbInBoundsOffset()}px)`;\n\t});\n\n\tprotected readonly _computedAriaLabel = computed(\n\t\t() => this._slider.ariaLabel() || `Value ${this._index() + 1} of ${this._slider.normalizedValue().length}`,\n\t);\n\n\tprotected readonly _transformValue = computed(() =>\n\t\tthis._slider.orientation() === 'horizontal' ? 'translateX(-50%)' : 'translateY(-50%)',\n\t);\n\n\tconstructor() {\n\t\tthis._slider.addThumb(this);\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._slider.removeThumb(this);\n\t\t});\n\t}\n\n\tprotected _onPointerDown(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerDown(event);\n\t}\n\n\tprotected _onPointerMove(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerMove(event);\n\t}\n\n\tprotected _onPointerUp(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerUp(event);\n\t}\n\n\tprotected handleKeydown(event: KeyboardEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst step = this._slider.step();\n\t\tconst min = this._slider.min();\n\t\tconst max = this._slider.max();\n\t\tconst multiplier = event.shiftKey || PAGE_KEYS.includes(event.key) ? 10 : 1;\n\n\t\t// Determine delta based on slider orientation\n\t\tconst dirLR = this._slider.slidingSource() === 'right' ? -1 : 1;\n\t\tconst dirUD = this._slider.slidingSource() === 'top' ? -1 : 1;\n\n\t\tconst deltas: Partial<Record<string, number>> = {\n\t\t\tArrowLeft: -step * multiplier * dirLR,\n\t\t\tArrowRight: step * multiplier * dirLR,\n\t\t\tArrowUp: step * multiplier * dirUD,\n\t\t\tArrowDown: -step * multiplier * dirUD,\n\t\t\tPageUp: step * multiplier,\n\t\t\tPageDown: -step * multiplier,\n\t\t};\n\n\t\t// Home/End keys\n\t\tif (event.key === 'Home') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = min - range[0];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(min, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'End') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = max - range[range.length - 1];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(max, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst delta = deltas[event.key];\n\t\tif (delta === undefined) return;\n\n\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t} else {\n\t\t\tconst index = this._index();\n\t\t\tconst value = this._slider.normalizedValue()[index];\n\t\t\tthis._slider.setValue(Math.min(max, Math.max(min, value + delta)), index);\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n}\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\tRenderer2,\n\tTemplateRef,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderTick]',\n\thost: {\n\t\t'data-slot': 'slider-tick',\n\t},\n})\nexport class BrnSliderTick {\n\tprivate readonly _slider = injectBrnSlider();\n\tprivate readonly _templateRef = inject<TemplateRef<BrnSliderTickContext>>(TemplateRef);\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _viewContainer = inject(ViewContainerRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate _ticks: EmbeddedViewRef<BrnSliderTickContext>[] = [];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ticks = this._slider.ticks();\n\t\t\tconst tickLabelInterval = this._slider.tickLabelInterval();\n\n\t\t\t// Remove any existing ticks\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\n\t\t\t// Create new ticks\n\t\t\tthis._ticks = [];\n\n\t\t\tticks.forEach((tick, index) => {\n\t\t\t\tconst view = this._viewContainer.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: tick,\n\t\t\t\t\tindex,\n\t\t\t\t\tformattedTick: this._slider.formatTick()(tick),\n\t\t\t\t});\n\n\t\t\t\tconst tickEl = view.rootNodes[0] as HTMLElement;\n\t\t\t\tif (tickLabelInterval === 0 || index % tickLabelInterval !== 0) {\n\t\t\t\t\tthis._renderer.setAttribute(tickEl, 'data-skip', '');\n\t\t\t\t}\n\n\t\t\t\tthis._ticks.push(view);\n\t\t\t});\n\t\t});\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\t\t});\n\t}\n}\n\nexport interface BrnSliderTickContext {\n\t$implicit: number;\n\tindex: number;\n\tformattedTick: string;\n}\n","import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSliderTrack } from './brn-slider-track';\n\nexport const BrnSliderTrackToken = new InjectionToken<BrnSliderTrack>('BrnSliderTrackToken');\n\nexport function provideBrnSliderTrack(slider: Type<BrnSliderTrack>): ExistingProvider {\n\treturn { provide: BrnSliderTrackToken, useExisting: slider };\n}\n\nexport function injectBrnSliderTrack(): BrnSliderTrack {\n\treturn inject(BrnSliderTrackToken);\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { provideBrnSliderTrack } from './brn-slider-track.token';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\n@Directive({\n\tselector: '[brnSliderTrack]',\n\tproviders: [provideBrnSliderTrack(BrnSliderTrack)],\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'data-slot': 'slider-track',\n\t\t'(pointerdown)': 'onPointerDown($event)',\n\t\t'(pointermove)': 'onPointerMove($event)',\n\t\t'(pointerup)': 'onPointerUp($event)',\n\t},\n})\nexport class BrnSliderTrack {\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprotected readonly _slider = injectBrnSlider();\n\n\tprivate _rangeDragStartPointer: number | null = null;\n\tprivate _rangeDragAccumulatedDelta = 0;\n\n\tconstructor() {\n\t\tthis._slider.track.set(this);\n\t}\n\n\tpublic onPointerDown(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tconst isTrack = this._isTrack(target);\n\n\t\t// Draggable range only: ignore empty track clicks\n\t\tif (isTrack && this._slider.isDraggableRangeOnly()) return;\n\n\t\ttarget.setPointerCapture(event.pointerId);\n\t\tconst isRange = this._isRange(target);\n\n\t\t// Prevent browser focus behaviour because we instead focus a thumb manually when values change.\n\t\tif (isTrack || isRange) event.preventDefault();\n\n\t\tif ((isRange && this._slider.isDraggableRange()) || this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._rangeDragStartPointer = this._getPointerPosition(event);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tconst closestIndex = getClosestValueIndex(this._slider.normalizedValue(), value);\n\n\t\tif (isTrack || isRange) {\n\t\t\tthis._slider.setValue(value, closestIndex);\n\t\t} else {\n\t\t\tthis._slider.valueIndexToChange.set(closestIndex);\n\t\t}\n\t}\n\n\tpublic onPointerMove(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tif (!target.hasPointerCapture(event.pointerId)) return;\n\n\t\tif (this._rangeDragStartPointer !== null && this._slider.isDraggableRange()) {\n\t\t\tconst currentPointer = this._getPointerPosition(event);\n\t\t\tconst pixelDelta = currentPointer - this._rangeDragStartPointer;\n\t\t\tconst valueDelta = this._pixelDeltaToValueDelta(pixelDelta);\n\n\t\t\t// Accumulate sub-step deltas\n\t\t\tthis._rangeDragAccumulatedDelta += valueDelta;\n\n\t\t\tconst step = this._slider.step();\n\t\t\tconst snappedDelta = Math.trunc(this._rangeDragAccumulatedDelta / step) * step;\n\n\t\t\tif (snappedDelta !== 0) {\n\t\t\t\tthis._slider.setAllValuesByDelta(snappedDelta);\n\n\t\t\t\t// Remove the applied delta, keep remainder\n\t\t\t\tthis._rangeDragAccumulatedDelta -= snappedDelta;\n\t\t\t}\n\n\t\t\t// Reset start pointer so delta stays incremental\n\t\t\tthis._rangeDragStartPointer = currentPointer;\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tthis._slider.setValue(value, this._slider.valueIndexToChange());\n\t}\n\n\tpublic onPointerUp(event: PointerEvent): void {\n\t\tconst target = event.target as HTMLElement;\n\n\t\tif (target.hasPointerCapture(event.pointerId)) {\n\t\t\ttarget.releasePointerCapture(event.pointerId);\n\t\t}\n\n\t\tthis._rangeDragStartPointer = null;\n\t\tthis._rangeDragAccumulatedDelta = 0;\n\t}\n\n\tprivate _getValueFromPointer(pointerPosition: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst source = this._slider.slidingSource();\n\n\t\tconst isVertical = source === 'top' || source === 'bottom';\n\t\tconst size = isVertical ? rect.height : rect.width;\n\n\t\tconst input: [number, number] = [0, size];\n\t\tconst output: [number, number] = [this._slider.min(), this._slider.max()];\n\t\tconst value = linearScale(input, output);\n\n\t\tlet relativePosition: number;\n\n\t\tswitch (source) {\n\t\t\tcase 'left':\n\t\t\t\trelativePosition = pointerPosition - rect.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\trelativePosition = rect.right - pointerPosition;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\trelativePosition = pointerPosition - rect.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\trelativePosition = rect.bottom - pointerPosition;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn value(relativePosition);\n\t}\n\n\tprivate _pixelDeltaToValueDelta(pixelDelta: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst size = this._slider.isHorizontal() ? rect.width : rect.height;\n\n\t\tconst scale = linearScale([0, size], [this._slider.min(), this._slider.max()]);\n\n\t\t// Determine direction multiplier based on sliding source\n\t\tlet direction = 1;\n\t\tswitch (this._slider.slidingSource()) {\n\t\t\tcase 'right':\n\t\t\tcase 'bottom':\n\t\t\t\tdirection = -1;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\tcase 'top':\n\t\t\t\tdirection = 1;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn scale(pixelDelta * direction) - scale(0);\n\t}\n\n\tprivate _isTrack(el: HTMLElement): boolean {\n\t\treturn this._elementRef.nativeElement === el;\n\t}\n\n\tprivate _isRange(el: HTMLElement): boolean {\n\t\treturn this._slider.range()?.elementRef.nativeElement === el;\n\t}\n\n\tprivate _getPointerPosition(event: PointerEvent): number {\n\t\treturn this._slider.orientation() === 'horizontal' ? event.clientX : event.clientY;\n\t}\n}\n\nfunction getClosestValueIndex(values: number[], nextValue: number): number {\n\tif (values.length === 1) return 0;\n\tconst distances = values.map((value) => Math.abs(value - nextValue));\n\tconst closestDistance = Math.min(...distances);\n\treturn distances.indexOf(closestDistance);\n}\n","import { BrnSlider } from './lib/brn-slider';\nimport { BrnSliderRange } from './lib/brn-slider-range';\nimport { BrnSliderThumb } from './lib/brn-slider-thumb';\nimport { BrnSliderTick } from './lib/brn-slider-tick';\nimport { BrnSliderTrack } from './lib/brn-slider-track';\n\nexport * from './lib/brn-slider';\nexport * from './lib/brn-slider-range';\nexport * from './lib/brn-slider-thumb';\nexport * from './lib/brn-slider-tick';\nexport * from './lib/brn-slider-track';\nexport * from './lib/brn-slider-track.token';\nexport * from './lib/brn-slider.token';\n\nexport const BrnSliderImports = [BrnSlider, BrnSliderTrack, BrnSliderThumb, BrnSliderRange, BrnSliderTick] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spartan-ng-brain-slider.mjs","sources":["../../../../libs/brain/slider/src/lib/brn-slider.token.ts","../../../../libs/brain/slider/src/lib/brn-slider.ts","../../../../libs/brain/slider/src/lib/brn-slider-range.ts","../../../../libs/brain/slider/src/lib/utils/linear-scale.ts","../../../../libs/brain/slider/src/lib/brn-slider-thumb.ts","../../../../libs/brain/slider/src/lib/brn-slider-tick.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.token.ts","../../../../libs/brain/slider/src/lib/brn-slider-track.ts","../../../../libs/brain/slider/src/index.ts","../../../../libs/brain/slider/src/spartan-ng-brain-slider.ts"],"sourcesContent":["import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSlider } from './brn-slider';\n\nconst BrnSliderToken = new InjectionToken<BrnSlider>('BrnSliderToken');\n\nexport function provideBrnSlider(slider: Type<BrnSlider>): ExistingProvider {\n\treturn { provide: BrnSliderToken, useExisting: slider };\n}\n\nexport function injectBrnSlider(): BrnSlider {\n\treturn inject(BrnSliderToken);\n}\n","import { Directionality } from '@angular/cdk/bidi';\nimport type { BooleanInput, NumberInput } from '@angular/cdk/coercion';\nimport {\n\tbooleanAttribute,\n\tcomputed,\n\tDirective,\n\tforwardRef,\n\tinject,\n\tInjector,\n\tinput,\n\tlinkedSignal,\n\tmodel,\n\tnumberAttribute,\n\ttype OnInit,\n\toutput,\n\tsignal,\n} from '@angular/core';\nimport { type ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl, NgModel } from '@angular/forms';\nimport { BrnFieldControl } from '@spartan-ng/brain/field';\nimport { ChangeFn, TouchFn } from '@spartan-ng/brain/forms';\nimport type { BrnSliderRange } from './brn-slider-range';\nimport type { BrnSliderThumb } from './brn-slider-thumb';\nimport type { BrnSliderTrack } from './brn-slider-track';\nimport { provideBrnSlider } from './brn-slider.token';\n\nexport const BRN_SLIDER_VALUE_ACCESSOR = {\n\tprovide: NG_VALUE_ACCESSOR,\n\tuseExisting: forwardRef(() => BrnSlider),\n\tmulti: true,\n};\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[brnSlider]',\n\texportAs: 'brnSlider',\n\tproviders: [BRN_SLIDER_VALUE_ACCESSOR, provideBrnSlider(BrnSlider)],\n\thostDirectives: [BrnFieldControl],\n\thost: {\n\t\t'[attr.id]': 'id()',\n\t\t'[attr.dir]': '_direction()',\n\t\t'[attr.aria-disabled]': 'mutableDisabled() ? \"true\" : null',\n\t\t'[attr.data-disabled]': 'mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-inverted]': 'inverted() ? \"\" : null',\n\t\t'[attr.data-orientation]': 'orientation()',\n\t\t'data-slot': 'slider',\n\t\t'(focusout)': '_onFocusOut($event)',\n\t\t'[attr.aria-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-matches-spartan-invalid]': '_ariaInvalid() ? \"true\" : null',\n\t\t'[attr.data-dirty]': '_dirty() ? \"true\" : null',\n\t\t'[attr.data-touched]': '_touched() ? \"true\" : null',\n\t},\n})\nexport class BrnSlider implements ControlValueAccessor, OnInit {\n\tprivate readonly _dir = inject(Directionality);\n\tprivate readonly _injector = inject(Injector);\n\tprivate readonly _fieldControl = inject(BrnFieldControl);\n\tpublic ngControl: NgControl | null = null;\n\n\tprotected readonly _ariaInvalid = this._fieldControl.invalid;\n\tprotected readonly _dirty = this._fieldControl.dirty;\n\tprotected readonly _touched = this._fieldControl.touched;\n\tprotected readonly _spartanInvalid = this._fieldControl.spartanInvalid;\n\n\t/** Unique identifier for the slider element. Auto-generated if not provided. */\n\tpublic readonly id = input<string>(`brn-slider-${++nextId}`);\n\n\t/** Accessibility label for the slider. Forwarded to all thumbs. */\n\tpublic readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n\t/** ID of the element that labels this slider for accessibility. Forwarded to all thumbs. */\n\tpublic readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n\t/**\n\t * The current slider value(s).\n\t *\n\t * For single-thumb sliders, this contains one value.\n\t * For range sliders, values are kept sorted in ascending order.\n\t */\n\tpublic readonly value = model<number[]>([]);\n\n\t/** Minimum allowed slider value. */\n\tpublic readonly min = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Maximum allowed slider value. */\n\tpublic readonly max = input<number, NumberInput>(100, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Step increment used when changing values. */\n\tpublic readonly step = input<number, NumberInput>(1, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Minimum number of steps required between thumbs in a range slider. */\n\tpublic readonly minStepsBetweenThumbs = input<number, NumberInput>(0, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Whether the slider is disabled. */\n\tpublic readonly disabled = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether the slider direction is inverted. */\n\tpublic readonly inverted = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Slider orientation. */\n\tpublic readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n\t/** Whether tick marks should be displayed. */\n\tpublic readonly showTicks = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Maximum number of ticks to render. Excess ticks are evenly distributed. */\n\tpublic readonly maxTicks = input<number, NumberInput>(25, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Interval at which tick labels are shown. A value of `2` shows a label every second tick. */\n\tpublic readonly tickLabelInterval = input<number, NumberInput>(2, {\n\t\ttransform: numberAttribute,\n\t});\n\n\t/** Defines how the tick should be displayed in the UI. */\n\tpublic readonly formatTick = input<(tick: number) => string>((tick) => tick.toString());\n\n\t/** Whether dragging the selected range should move all thumbs together. */\n\tpublic readonly draggableRange = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Whether only dragging the range should work (overrides normal track clicks). */\n\tpublic readonly draggableRangeOnly = input<boolean, BooleanInput>(false, {\n\t\ttransform: booleanAttribute,\n\t});\n\n\t/** Emits when the value changes. */\n\tpublic readonly valueChange = output<number[]>();\n\n\t/** @internal Normalized slider values. Values are clamped to `[min, max]` and sorted in ascending order. */\n\tpublic readonly normalizedValue = computed(\n\t\t() => [...this.value()].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()])),\n\t\t{ equal: areArrsEqual },\n\t);\n\n\t/** Indexes for all active thumbs. */\n\tpublic readonly thumbIndexes = computed(() => Array.from({ length: this.normalizedValue().length }, (_, i) => i), {\n\t\tequal: (a, b) => a.length === b.length,\n\t});\n\n\t/** @internal Whether the slider is in range mode and draggable range is enabled */\n\tpublic readonly isDraggableRange = computed(() => this.draggableRange() && this.normalizedValue().length > 1);\n\n\t/** @internal Whether dragging should only move the range. */\n\tpublic readonly isDraggableRangeOnly = computed(() => this.draggableRangeOnly() && this.isDraggableRange());\n\n\tprotected readonly _direction = this._dir.valueSignal;\n\n\t/** @internal Logical edge from which the slider value increases. */\n\tpublic readonly slidingSource = computed<'top' | 'bottom' | 'left' | 'right'>(() => {\n\t\tconst orientation = this.orientation();\n\t\tconst inverted = this.inverted();\n\n\t\tif (orientation === 'vertical') {\n\t\t\treturn inverted ? 'top' : 'bottom';\n\t\t}\n\n\t\tconst isLtr = this._direction() === 'ltr';\n\t\tconst fromLeft = (isLtr && !inverted) || (!isLtr && inverted);\n\n\t\treturn fromLeft ? 'left' : 'right';\n\t});\n\n\t/** @internal */\n\tpublic readonly isHorizontal = computed(() => this.orientation() === 'horizontal');\n\n\t/** @internal Reference to the slider track instance. */\n\tpublic readonly track = signal<BrnSliderTrack | null>(null);\n\n\t/** @internal Reference to the slider range instance. */\n\tpublic readonly range = signal<BrnSliderRange | null>(null);\n\n\t/** @internal All registered slider thumbs. */\n\tpublic readonly thumbs = signal<BrnSliderThumb[]>([]);\n\n\t/** @internal Index of the thumb currently being updated. */\n\tpublic readonly valueIndexToChange = signal(0);\n\n\t/** @internal Visible tick values after applying density reduction. */\n\tpublic readonly ticks = computed(() => {\n\t\tif (!this.showTicks()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst maxTicks = this.maxTicks();\n\n\t\tif (step <= 0 || min > max) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst totalCount = Math.floor((max - min) / step) + 1;\n\n\t\t// No need to reduce\n\t\tif (totalCount <= maxTicks) {\n\t\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step);\n\t\t}\n\n\t\tconst stride = Math.ceil(totalCount / maxTicks);\n\n\t\treturn Array.from({ length: totalCount }, (_, i) => min + i * step).filter((_, index) => index % stride === 0);\n\t});\n\n\t/** @internal Disabled state that can be controlled internally or externally. */\n\tpublic readonly mutableDisabled = linkedSignal(() => this.disabled());\n\n\t/** @internal Store the on change callback */\n\tprivate _onChange?: ChangeFn<number[]>;\n\n\t/** @internal Store the on touched callback */\n\tprivate _onTouched?: TouchFn;\n\n\tngOnInit(): void {\n\t\tthis.ngControl = this._injector.get(NgControl, null);\n\n\t\t// If bound to an Angular form control, writeValue() will run after ngOnInit,\n\t\t// so avoid initializing defaults here to prevent a transient min-value override.\n\t\tif (!this.ngControl) {\n\t\t\tif (!this.value().length) {\n\t\t\t\tconst defaultValue = [this.min()];\n\t\t\t\tthis.value.set(defaultValue);\n\t\t\t}\n\n\t\t\tconst normalizedValue = this.value()\n\t\t\t\t.map((v) => clamp(v, [this.min(), this.max()]))\n\t\t\t\t.sort((a, b) => a - b);\n\n\t\t\tif (!areArrsEqual(normalizedValue, this.value())) {\n\t\t\t\tthis.value.set(normalizedValue);\n\t\t\t}\n\t\t}\n\t}\n\n\tregisterOnChange(fn: (value: number[]) => void): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: () => void): void {\n\t\tthis._onTouched = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.mutableDisabled.set(isDisabled);\n\t}\n\n\twriteValue(value: number[]): void {\n\t\tif (!Array.isArray(value)) return;\n\n\t\tif (this.ngControl instanceof NgModel && !this._onChange) {\n\t\t\t// Avoid phantom call for ngModel\n\t\t\t// https://github.com/angular/angular/issues/14988#issuecomment-2946355465\n\t\t\treturn;\n\t\t}\n\n\t\tconst newValue = [...value].sort((a, b) => a - b).map((v) => clamp(v, [this.min(), this.max()]));\n\t\tthis.value.set(newValue);\n\t}\n\n\t/** Sets a new value for the slider at the given thumb index. */\n\tsetValue(value: number, atIndex: number): void {\n\t\tconst decimalCount = getDecimalCount(this.step());\n\t\tconst snapToStep = roundValue(\n\t\t\tMath.round((value - this.min()) / this.step()) * this.step() + this.min(),\n\t\t\tdecimalCount,\n\t\t);\n\n\t\tvalue = clamp(snapToStep, [this.min(), this.max()]);\n\n\t\tconst newValue = [...this.normalizedValue()];\n\t\tnewValue[atIndex] = value;\n\t\tnewValue.sort((a, b) => a - b);\n\n\t\tif (!hasMinStepsBetweenValues(newValue, this.minStepsBetweenThumbs() * this.step())) return;\n\n\t\tconst newValIndex = newValue.findIndex((val) => val === value);\n\t\tthis.valueIndexToChange.set(newValIndex);\n\n\t\tif (areArrsEqual(newValue, this.value())) return;\n\n\t\tthis.value.set(newValue);\n\t\tthis._onChange?.(newValue);\n\t\tthis.valueChange.emit(newValue);\n\n\t\tif (this.thumbs()[newValIndex]) {\n\t\t\tthis.thumbs()[newValIndex].elementRef.nativeElement.focus();\n\t\t}\n\t}\n\n\t/** Moves the entire range by a delta value, snapping to step and preserving spacing. */\n\tsetAllValuesByDelta(delta: number): void {\n\t\tconst current = this.normalizedValue();\n\t\tif (!current.length || delta === 0) return;\n\n\t\tconst min = this.min();\n\t\tconst max = this.max();\n\t\tconst step = this.step();\n\t\tconst decimalCount = getDecimalCount(step);\n\n\t\tconst snappedDelta = roundValue(Math.round(delta / step) * step, decimalCount);\n\t\tif (snappedDelta === 0) return;\n\n\t\tlet next = current.map((v) => v + snappedDelta);\n\n\t\tconst rangeMin = Math.min(...next);\n\t\tconst rangeMax = Math.max(...next);\n\n\t\tif (rangeMin < min) {\n\t\t\tconst offset = min - rangeMin;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t} else if (rangeMax > max) {\n\t\t\tconst offset = max - rangeMax;\n\t\t\tnext = next.map((v) => v + offset);\n\t\t}\n\n\t\tnext = next.map((v) => roundValue(v, decimalCount));\n\n\t\tif (areArrsEqual(next, this.value())) return;\n\n\t\tthis.value.set(next);\n\t\tthis._onChange?.(next);\n\t\tthis.valueChange.emit(next);\n\t}\n\n\t/** @internal */\n\taddThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => {\n\t\t\tthumbs.push(thumb);\n\t\t\treturn [...thumbs];\n\t\t});\n\t}\n\n\t/** @internal */\n\tremoveThumb(thumb: BrnSliderThumb): void {\n\t\tthis.thumbs.update((thumbs) => thumbs.filter((t) => t !== thumb));\n\t}\n\n\tprotected _onFocusOut(event: FocusEvent): void {\n\t\tconst currentTarget = event.currentTarget as HTMLElement;\n\t\tconst focusedEl = event.relatedTarget as HTMLElement | null;\n\n\t\tif (!currentTarget.contains(focusedEl)) {\n\t\t\tthis._onTouched?.();\n\t\t}\n\t}\n}\n\nfunction areArrsEqual(arr1: unknown[], arr2: unknown[]): boolean {\n\treturn String(arr1) === String(arr2);\n}\n\nfunction roundValue(value: number, decimalCount: number): number {\n\tconst rounder = Math.pow(10, decimalCount);\n\treturn Math.round(value * rounder) / rounder;\n}\n\nfunction getDecimalCount(value: number): number {\n\treturn (String(value).split('.')[1] || '').length;\n}\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n\treturn Math.min(max, Math.max(min, value));\n}\n\nfunction getStepsBetweenValues(values: number[]): number[] {\n\treturn values.slice(0, -1).map((value, index) => values[index + 1]! - value);\n}\n\nfunction hasMinStepsBetweenValues(values: number[], minStepsBetweenValues: number): boolean {\n\tif (minStepsBetweenValues > 0) {\n\t\tconst stepsBetweenValues = getStepsBetweenValues(values);\n\t\tconst actualMinStepsBetweenValues = Math.min(...stepsBetweenValues);\n\t\treturn actualMinStepsBetweenValues >= minStepsBetweenValues;\n\t}\n\treturn true;\n}\n","import { computed, Directive, ElementRef, inject } from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderRange]',\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[attr.data-draggable-range]': '_slider.isDraggableRange() ? \"\" : null',\n\t\t'data-slot': 'slider-range',\n\t\t'[style.inset-inline]': '_slider.isHorizontal() ? _rangeInset() : undefined',\n\t\t'[style.inset-block]': '!_slider.isHorizontal() ? _rangeInset() : undefined',\n\t},\n})\nexport class BrnSliderRange {\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\tconstructor() {\n\t\tthis._slider.range.set(this);\n\t}\n\n\tprotected readonly _rangeInset = computed(() => {\n\t\tconst thumbs = this._slider.thumbs();\n\t\tif (!thumbs.length) return;\n\n\t\tconst inverted = this._slider.inverted();\n\t\tconst isHorizontal = this._slider.isHorizontal();\n\n\t\tconst start = thumbs[0].percentage();\n\t\tconst end = thumbs[thumbs.length - 1].percentage();\n\n\t\tconst inset = thumbs.length > 1 ? [`${start}%`, `${100 - end}%`] : ['0px', `${100 - start}%`];\n\n\t\tif (!isHorizontal) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\tif (inverted) {\n\t\t\tinset.reverse();\n\t\t}\n\n\t\treturn inset.join(' ');\n\t});\n}\n","export function linearScale(\n\tinput: readonly [number, number],\n\toutput: readonly [number, number],\n): (value: number) => number {\n\treturn (value: number) => {\n\t\tif (input[0] === input[1] || output[0] === output[1]) return output[0];\n\t\tconst ratio = (output[1] - output[0]) / (input[1] - input[0]);\n\t\treturn output[0] + ratio * (value - input[0]);\n\t};\n}\n","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, Directive, ElementRef, inject, PLATFORM_ID } from '@angular/core';\nimport { injectElementSize } from '@spartan-ng/brain/core';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\nconst PAGE_KEYS = ['PageUp', 'PageDown'];\n\n@Directive({\n\tselector: '[brnSliderThumb]',\n\thost: {\n\t\trole: 'slider',\n\t\t'[attr.aria-label]': `_computedAriaLabel()`,\n\t\t'[attr.aria-labelledby]': '_slider.ariaLabelledby() || null',\n\t\t'[attr.aria-orientation]': '_slider.orientation()',\n\t\t'[attr.aria-valuenow]': '_slider.normalizedValue()[_index()]',\n\t\t'[attr.aria-valuemin]': '_slider.min()',\n\t\t'[attr.aria-valuemax]': '_slider.max()',\n\t\t'[attr.tabindex]': '_slider.mutableDisabled() ? -1 : 0',\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'[style.inset-inline-start]':\n\t\t\t'_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-inline-end]': '_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.inset-block-end]': '!_slider.isHorizontal() ? _slider.inverted() ? undefined : _thumbOffset() : undefined',\n\t\t'[style.inset-block-start]':\n\t\t\t'!_slider.isHorizontal() ? _slider.inverted() ? _thumbOffset() : undefined : undefined',\n\t\t'[style.visibility]': '_thumbReady() ? undefined : \"hidden\"',\n\t\t'[style.pointer-events]': '_thumbReady() ? undefined : \"none\"',\n\t\t'[style.transform]': '_transformValue()',\n\t\t'data-slot': 'slider-thumb',\n\t\t'(pointerdown)': '_onPointerDown($event)',\n\t\t'(pointermove)': '_onPointerMove($event)',\n\t\t'(pointerup)': '_onPointerUp($event)',\n\t\t'(keydown)': 'handleKeydown($event)',\n\t},\n})\nexport class BrnSliderThumb {\n\tprivate readonly _platform = inject(PLATFORM_ID);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate readonly _size = injectElementSize();\n\tprotected readonly _slider = injectBrnSlider();\n\tpublic readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t/**\n\t * Indicates whether the thumb is ready to be displayed and interactable.\n\t *\n\t * This signal returns `true` when the element's size has been measured\n\t * and the width is greater than 0. It ensures that the thumb is not\n\t * rendered or interacted with prematurely, which prevents layout\n\t * issues or first-frame “jerks” when using SSR.\n\t */\n\tprotected readonly _thumbReady = computed(() => {\n\t\tconst size = this._size();\n\t\treturn !!size && size.width > 0;\n\t});\n\n\tprotected readonly _index = computed(() => this._slider.thumbs().findIndex((thumb) => thumb === this));\n\n\tpublic readonly percentage = computed(() => {\n\t\tconst range = this._slider.max() - this._slider.min();\n\t\tif (range === 0) return 0;\n\n\t\treturn ((this._slider.normalizedValue()[this._index()] - this._slider.min()) / range) * 100;\n\t});\n\n\tprivate readonly _thumbInBoundsOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst size = this._slider.isHorizontal() ? this._size()?.width : this._size()?.height;\n\t\tif (!size) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst halfSize = size / 2;\n\t\tconst offset = linearScale([0, 50], [0, halfSize]);\n\t\tconst direction = this._slider.slidingSource() === 'left' || this._slider.slidingSource() === 'top' ? 1 : -1;\n\n\t\treturn (halfSize - offset(this.percentage()) * direction) * direction;\n\t});\n\n\t/**\n\t * Offsets the thumb centre point while sliding to ensure it remains\n\t * within the bounds of the slider when reaching the edges.\n\t * Based on https://github.com/radix-ui/primitives/blob/main/packages/react/slider/src/slider.tsx\n\t */\n\tprotected readonly _thumbOffset = computed(() => {\n\t\t// we can't compute the offset on the server\n\t\tif (isPlatformServer(this._platform)) {\n\t\t\treturn this.percentage() + '%';\n\t\t}\n\n\t\treturn `calc(${this.percentage()}% + ${this._thumbInBoundsOffset()}px)`;\n\t});\n\n\tprotected readonly _computedAriaLabel = computed(\n\t\t() => this._slider.ariaLabel() || `Value ${this._index() + 1} of ${this._slider.normalizedValue().length}`,\n\t);\n\n\tprotected readonly _transformValue = computed(() =>\n\t\tthis._slider.orientation() === 'horizontal' ? 'translateX(-50%)' : 'translateY(-50%)',\n\t);\n\n\tconstructor() {\n\t\tthis._slider.addThumb(this);\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._slider.removeThumb(this);\n\t\t});\n\t}\n\n\tprotected _onPointerDown(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerDown(event);\n\t}\n\n\tprotected _onPointerMove(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerMove(event);\n\t}\n\n\tprotected _onPointerUp(event: PointerEvent): void {\n\t\tthis._slider.track()?.onPointerUp(event);\n\t}\n\n\tprotected handleKeydown(event: KeyboardEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst step = this._slider.step();\n\t\tconst min = this._slider.min();\n\t\tconst max = this._slider.max();\n\t\tconst multiplier = event.shiftKey || PAGE_KEYS.includes(event.key) ? 10 : 1;\n\n\t\t// Determine delta based on slider orientation\n\t\tconst dirLR = this._slider.slidingSource() === 'right' ? -1 : 1;\n\t\tconst dirUD = this._slider.slidingSource() === 'top' ? -1 : 1;\n\n\t\tconst deltas: Partial<Record<string, number>> = {\n\t\t\tArrowLeft: -step * multiplier * dirLR,\n\t\t\tArrowRight: step * multiplier * dirLR,\n\t\t\tArrowUp: step * multiplier * dirUD,\n\t\t\tArrowDown: -step * multiplier * dirUD,\n\t\t\tPageUp: step * multiplier,\n\t\t\tPageDown: -step * multiplier,\n\t\t};\n\n\t\t// Home/End keys\n\t\tif (event.key === 'Home') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = min - range[0];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(min, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif (event.key === 'End') {\n\t\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\t\tconst range = this._slider.normalizedValue();\n\t\t\t\tconst delta = max - range[range.length - 1];\n\t\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t\t} else {\n\t\t\t\tthis._slider.setValue(max, this._index());\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tconst delta = deltas[event.key];\n\t\tif (delta === undefined) return;\n\n\t\tif (this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._slider.setAllValuesByDelta(delta);\n\t\t} else {\n\t\t\tconst index = this._index();\n\t\t\tconst value = this._slider.normalizedValue()[index];\n\t\t\tthis._slider.setValue(Math.min(max, Math.max(min, value + delta)), index);\n\t\t}\n\n\t\tevent.preventDefault();\n\t}\n}\n","import {\n\tDestroyRef,\n\tDirective,\n\teffect,\n\ttype EmbeddedViewRef,\n\tinject,\n\tRenderer2,\n\tTemplateRef,\n\tViewContainerRef,\n} from '@angular/core';\nimport { injectBrnSlider } from './brn-slider.token';\n\n@Directive({\n\tselector: '[brnSliderTick]',\n\thost: {\n\t\t'data-slot': 'slider-tick',\n\t},\n})\nexport class BrnSliderTick {\n\tprivate readonly _slider = injectBrnSlider();\n\tprivate readonly _templateRef = inject<TemplateRef<BrnSliderTickContext>>(TemplateRef);\n\tprivate readonly _renderer = inject(Renderer2);\n\tprivate readonly _viewContainer = inject(ViewContainerRef);\n\tprivate readonly _destroyRef = inject(DestroyRef);\n\tprivate _ticks: EmbeddedViewRef<BrnSliderTickContext>[] = [];\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst ticks = this._slider.ticks();\n\t\t\tconst tickLabelInterval = this._slider.tickLabelInterval();\n\n\t\t\t// Remove any existing ticks\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\n\t\t\t// Create new ticks\n\t\t\tthis._ticks = [];\n\n\t\t\tticks.forEach((tick, index) => {\n\t\t\t\tconst view = this._viewContainer.createEmbeddedView(this._templateRef, {\n\t\t\t\t\t$implicit: tick,\n\t\t\t\t\tindex,\n\t\t\t\t\tformattedTick: this._slider.formatTick()(tick),\n\t\t\t\t});\n\n\t\t\t\tconst tickEl = view.rootNodes[0] as HTMLElement;\n\t\t\t\tif (tickLabelInterval === 0 || index % tickLabelInterval !== 0) {\n\t\t\t\t\tthis._renderer.setAttribute(tickEl, 'data-skip', '');\n\t\t\t\t}\n\n\t\t\t\tthis._ticks.push(view);\n\t\t\t});\n\t\t});\n\n\t\tthis._destroyRef.onDestroy(() => {\n\t\t\tthis._ticks.forEach((tick) => this._viewContainer.remove(this._viewContainer.indexOf(tick)));\n\t\t});\n\t}\n}\n\nexport interface BrnSliderTickContext {\n\t$implicit: number;\n\tindex: number;\n\tformattedTick: string;\n}\n","import { type ExistingProvider, inject, InjectionToken, type Type } from '@angular/core';\nimport type { BrnSliderTrack } from './brn-slider-track';\n\nexport const BrnSliderTrackToken = new InjectionToken<BrnSliderTrack>('BrnSliderTrackToken');\n\nexport function provideBrnSliderTrack(slider: Type<BrnSliderTrack>): ExistingProvider {\n\treturn { provide: BrnSliderTrackToken, useExisting: slider };\n}\n\nexport function injectBrnSliderTrack(): BrnSliderTrack {\n\treturn inject(BrnSliderTrackToken);\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { provideBrnSliderTrack } from './brn-slider-track.token';\nimport { injectBrnSlider } from './brn-slider.token';\nimport { linearScale } from './utils/linear-scale';\n\n@Directive({\n\tselector: '[brnSliderTrack]',\n\tproviders: [provideBrnSliderTrack(BrnSliderTrack)],\n\thost: {\n\t\t'[attr.data-disabled]': '_slider.mutableDisabled() ? \"\" : null',\n\t\t'[attr.data-orientation]': '_slider.orientation()',\n\t\t'data-slot': 'slider-track',\n\t\t'(pointerdown)': 'onPointerDown($event)',\n\t\t'(pointermove)': 'onPointerMove($event)',\n\t\t'(pointerup)': 'onPointerUp($event)',\n\t},\n})\nexport class BrnSliderTrack {\n\tprivate readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\tprotected readonly _slider = injectBrnSlider();\n\n\tprivate _rangeDragStartPointer: number | null = null;\n\tprivate _rangeDragAccumulatedDelta = 0;\n\n\tconstructor() {\n\t\tthis._slider.track.set(this);\n\t}\n\n\tpublic onPointerDown(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tconst isTrack = this._isTrack(target);\n\n\t\t// Draggable range only: ignore empty track clicks\n\t\tif (isTrack && this._slider.isDraggableRangeOnly()) return;\n\n\t\ttarget.setPointerCapture(event.pointerId);\n\t\tconst isRange = this._isRange(target);\n\n\t\t// Prevent browser focus behaviour because we instead focus a thumb manually when values change.\n\t\tif (isTrack || isRange) event.preventDefault();\n\n\t\tif ((isRange && this._slider.isDraggableRange()) || this._slider.isDraggableRangeOnly()) {\n\t\t\tthis._rangeDragStartPointer = this._getPointerPosition(event);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tconst closestIndex = getClosestValueIndex(this._slider.normalizedValue(), value);\n\n\t\tif (isTrack || isRange) {\n\t\t\tthis._slider.setValue(value, closestIndex);\n\t\t} else {\n\t\t\tthis._slider.valueIndexToChange.set(closestIndex);\n\t\t}\n\t}\n\n\tpublic onPointerMove(event: PointerEvent): void {\n\t\tif (this._slider.mutableDisabled()) return;\n\n\t\tconst target = event.target as HTMLElement;\n\t\tif (!target.hasPointerCapture(event.pointerId)) return;\n\n\t\tif (this._rangeDragStartPointer !== null && this._slider.isDraggableRange()) {\n\t\t\tconst currentPointer = this._getPointerPosition(event);\n\t\t\tconst pixelDelta = currentPointer - this._rangeDragStartPointer;\n\t\t\tconst valueDelta = this._pixelDeltaToValueDelta(pixelDelta);\n\n\t\t\t// Accumulate sub-step deltas\n\t\t\tthis._rangeDragAccumulatedDelta += valueDelta;\n\n\t\t\tconst step = this._slider.step();\n\t\t\tconst snappedDelta = Math.trunc(this._rangeDragAccumulatedDelta / step) * step;\n\n\t\t\tif (snappedDelta !== 0) {\n\t\t\t\tthis._slider.setAllValuesByDelta(snappedDelta);\n\n\t\t\t\t// Remove the applied delta, keep remainder\n\t\t\t\tthis._rangeDragAccumulatedDelta -= snappedDelta;\n\t\t\t}\n\n\t\t\t// Reset start pointer so delta stays incremental\n\t\t\tthis._rangeDragStartPointer = currentPointer;\n\t\t\treturn;\n\t\t}\n\n\t\tconst pointerPosition = this._getPointerPosition(event);\n\t\tconst value = this._getValueFromPointer(pointerPosition);\n\t\tthis._slider.setValue(value, this._slider.valueIndexToChange());\n\t}\n\n\tpublic onPointerUp(event: PointerEvent): void {\n\t\tconst target = event.target as HTMLElement;\n\n\t\tif (target.hasPointerCapture(event.pointerId)) {\n\t\t\ttarget.releasePointerCapture(event.pointerId);\n\t\t}\n\n\t\tthis._rangeDragStartPointer = null;\n\t\tthis._rangeDragAccumulatedDelta = 0;\n\t}\n\n\tprivate _getValueFromPointer(pointerPosition: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst source = this._slider.slidingSource();\n\n\t\tconst isVertical = source === 'top' || source === 'bottom';\n\t\tconst size = isVertical ? rect.height : rect.width;\n\n\t\tconst input: [number, number] = [0, size];\n\t\tconst output: [number, number] = [this._slider.min(), this._slider.max()];\n\t\tconst value = linearScale(input, output);\n\n\t\tlet relativePosition: number;\n\n\t\tswitch (source) {\n\t\t\tcase 'left':\n\t\t\t\trelativePosition = pointerPosition - rect.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\trelativePosition = rect.right - pointerPosition;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\trelativePosition = pointerPosition - rect.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\trelativePosition = rect.bottom - pointerPosition;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn value(relativePosition);\n\t}\n\n\tprivate _pixelDeltaToValueDelta(pixelDelta: number): number {\n\t\tconst rect = this._elementRef.nativeElement.getBoundingClientRect();\n\t\tconst size = this._slider.isHorizontal() ? rect.width : rect.height;\n\n\t\tconst scale = linearScale([0, size], [this._slider.min(), this._slider.max()]);\n\n\t\t// Determine direction multiplier based on sliding source\n\t\tlet direction = 1;\n\t\tswitch (this._slider.slidingSource()) {\n\t\t\tcase 'right':\n\t\t\tcase 'bottom':\n\t\t\t\tdirection = -1;\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\tcase 'top':\n\t\t\t\tdirection = 1;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn scale(pixelDelta * direction) - scale(0);\n\t}\n\n\tprivate _isTrack(el: HTMLElement): boolean {\n\t\treturn this._elementRef.nativeElement === el;\n\t}\n\n\tprivate _isRange(el: HTMLElement): boolean {\n\t\treturn this._slider.range()?.elementRef.nativeElement === el;\n\t}\n\n\tprivate _getPointerPosition(event: PointerEvent): number {\n\t\treturn this._slider.orientation() === 'horizontal' ? event.clientX : event.clientY;\n\t}\n}\n\nfunction getClosestValueIndex(values: number[], nextValue: number): number {\n\tif (values.length === 1) return 0;\n\tconst distances = values.map((value) => Math.abs(value - nextValue));\n\tconst closestDistance = Math.min(...distances);\n\treturn distances.indexOf(closestDistance);\n}\n","import { BrnSlider } from './lib/brn-slider';\nimport { BrnSliderRange } from './lib/brn-slider-range';\nimport { BrnSliderThumb } from './lib/brn-slider-thumb';\nimport { BrnSliderTick } from './lib/brn-slider-tick';\nimport { BrnSliderTrack } from './lib/brn-slider-track';\n\nexport * from './lib/brn-slider';\nexport * from './lib/brn-slider-range';\nexport * from './lib/brn-slider-thumb';\nexport * from './lib/brn-slider-tick';\nexport * from './lib/brn-slider-track';\nexport * from './lib/brn-slider-track.token';\nexport * from './lib/brn-slider.token';\n\nexport const BrnSliderImports = [BrnSlider, BrnSliderTrack, BrnSliderThumb, BrnSliderRange, BrnSliderTick] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAGA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAY,gBAAgB,CAAC;AAEhE,SAAU,gBAAgB,CAAC,MAAuB,EAAA;IACvD,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE;AACxD;SAEgB,eAAe,GAAA;AAC9B,IAAA,OAAO,MAAM,CAAC,cAAc,CAAC;AAC9B;;ACcO,MAAM,yBAAyB,GAAG;AACxC,IAAA,OAAO,EAAE,iBAAiB;AAC1B,IAAA,WAAW,EAAE,UAAU,CAAC,MAAM,SAAS,CAAC;AACxC,IAAA,KAAK,EAAE,IAAI;;AAGZ,IAAI,MAAM,GAAG,CAAC;MAuBD,SAAS,CAAA;AACJ,IAAA,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC;AAC7B,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC5B,IAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;IACjD,SAAS,GAAqB,IAAI;AAEtB,IAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO;AACzC,IAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK;AACjC,IAAA,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO;AACrC,IAAA,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc;;IAGtD,EAAE,GAAG,KAAK,CAAS,CAAA,WAAA,EAAc,EAAE,MAAM,CAAA,CAAE,yEAAC;;IAG5C,SAAS,GAAG,KAAK,CAAgB,IAAI,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;;IAG/D,cAAc,GAAG,KAAK,CAAgB,IAAI,sFAAI,KAAK,EAAE,iBAAiB,EAAA,CAAG;AAEzF;;;;;AAKG;AACa,IAAA,KAAK,GAAG,KAAK,CAAW,EAAE,4EAAC;;IAG3B,GAAG,GAAG,KAAK,CAAsB,CAAC,2EACjD,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,GAAG,GAAG,KAAK,CAAsB,GAAG,2EACnD,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,IAAI,GAAG,KAAK,CAAsB,CAAC,4EAClD,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,qBAAqB,GAAG,KAAK,CAAsB,CAAC,6FACnE,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAC5D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,QAAQ,GAAG,KAAK,CAAwB,KAAK,gFAC5D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;AAGc,IAAA,WAAW,GAAG,KAAK,CAA4B,YAAY,kFAAC;;IAG5D,SAAS,GAAG,KAAK,CAAwB,KAAK,iFAC7D,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,QAAQ,GAAG,KAAK,CAAsB,EAAE,gFACvD,SAAS,EAAE,eAAe,EAAA,CACzB;;IAGc,iBAAiB,GAAG,KAAK,CAAsB,CAAC,yFAC/D,SAAS,EAAE,eAAe,EAAA,CACzB;;AAGc,IAAA,UAAU,GAAG,KAAK,CAA2B,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,iFAAC;;IAGvE,cAAc,GAAG,KAAK,CAAwB,KAAK,sFAClE,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,kBAAkB,GAAG,KAAK,CAAwB,KAAK,0FACtE,SAAS,EAAE,gBAAgB,EAAA,CAC1B;;IAGc,WAAW,GAAG,MAAM,EAAY;;IAGhC,eAAe,GAAG,QAAQ,CACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,CAAA,EAC1F,KAAK,EAAE,YAAY,EAAA,CACrB;;IAGe,YAAY,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,oFAC/G,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAA,CACrC;;IAGc,gBAAgB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,uFAAC;;AAG7F,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,2FAAC;AAExF,IAAA,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;;AAGrC,IAAA,aAAa,GAAG,QAAQ,CAAsC,MAAK;AAClF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEhC,QAAA,IAAI,WAAW,KAAK,UAAU,EAAE;YAC/B,OAAO,QAAQ,GAAG,KAAK,GAAG,QAAQ;QACnC;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK;AACzC,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;QAE7D,OAAO,QAAQ,GAAG,MAAM,GAAG,OAAO;AACnC,IAAA,CAAC,oFAAC;;AAGc,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,mFAAC;;AAGlE,IAAA,KAAK,GAAG,MAAM,CAAwB,IAAI,4EAAC;;AAG3C,IAAA,KAAK,GAAG,MAAM,CAAwB,IAAI,4EAAC;;AAG3C,IAAA,MAAM,GAAG,MAAM,CAAmB,EAAE,6EAAC;;AAGrC,IAAA,kBAAkB,GAAG,MAAM,CAAC,CAAC,yFAAC;;AAG9B,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACtB,YAAA,OAAO,EAAE;QACV;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAEhC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE;AAC3B,YAAA,OAAO,EAAE;QACV;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;;AAGrD,QAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;YAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QACpE;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAE/C,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK,CAAC,CAAC;AAC/G,IAAA,CAAC,4EAAC;;IAGc,eAAe,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAG7D,IAAA,SAAS;;AAGT,IAAA,UAAU;IAElB,QAAQ,GAAA;AACP,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;;;AAIpD,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;gBACzB,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACjC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;YAC7B;AAEA,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK;iBAChC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7C,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEvB,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC;YAChC;QACD;IACD;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC7C,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;IACrC;AAEA,IAAA,UAAU,CAAC,KAAe,EAAA;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE;QAE3B,IAAI,IAAI,CAAC,SAAS,YAAY,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;;;YAGzD;QACD;QAEA,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAChG,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;IACzB;;IAGA,QAAQ,CAAC,KAAa,EAAE,OAAe,EAAA;QACtC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjD,QAAA,MAAM,UAAU,GAAG,UAAU,CAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EACzE,YAAY,CACZ;AAED,QAAA,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5C,QAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK;AACzB,QAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAE9B,QAAA,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAAE;AAErF,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,KAAK,CAAC;AAC9D,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC;QAExC,IAAI,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAE;AAE1C,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;QAE/B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;QAC5D;IACD;;AAGA,IAAA,mBAAmB,CAAC,KAAa,EAAA;AAChC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AACtC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,KAAK,CAAC;YAAE;AAEpC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC;AAE1C,QAAA,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC;QAC9E,IAAI,YAAY,KAAK,CAAC;YAAE;AAExB,QAAA,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC;QAE/C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAElC,QAAA,IAAI,QAAQ,GAAG,GAAG,EAAE;AACnB,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,QAAQ;AAC7B,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACnC;AAAO,aAAA,IAAI,QAAQ,GAAG,GAAG,EAAE;AAC1B,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,QAAQ;AAC7B,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACnC;AAEA,QAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QAEnD,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAAE;AAEtC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,QAAQ,CAAC,KAAqB,EAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClB,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC;AACnB,QAAA,CAAC,CAAC;IACH;;AAGA,IAAA,WAAW,CAAC,KAAqB,EAAA;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IAClE;AAEU,IAAA,WAAW,CAAC,KAAiB,EAAA;AACtC,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAA4B;AACxD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,aAAmC;QAE3D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,IAAI;QACpB;IACD;2HApTY,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,qCAAA,EAAA,oBAAA,EAAA,iCAAA,EAAA,oBAAA,EAAA,0BAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,mBAAA,EAAA,kCAAA,EAAA,mCAAA,EAAA,kCAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,mBAAA,EAAA,8BAAA,EAAA,EAAA,EAAA,SAAA,EAlBV,CAAC,yBAAyB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,eAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAkBvD,SAAS,EAAA,UAAA,EAAA,CAAA;kBArBrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,SAAS,EAAE,CAAC,yBAAyB,EAAE,gBAAgB,WAAW,CAAC;oBACnE,cAAc,EAAE,CAAC,eAAe,CAAC;AACjC,oBAAA,IAAI,EAAE;AACL,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,YAAY,EAAE,cAAc;AAC5B,wBAAA,sBAAsB,EAAE,mCAAmC;AAC3D,wBAAA,sBAAsB,EAAE,+BAA+B;AACvD,wBAAA,sBAAsB,EAAE,wBAAwB;AAChD,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,WAAW,EAAE,QAAQ;AACrB,wBAAA,YAAY,EAAE,qBAAqB;AACnC,wBAAA,qBAAqB,EAAE,gCAAgC;AACvD,wBAAA,qBAAqB,EAAE,gCAAgC;AACvD,wBAAA,qCAAqC,EAAE,gCAAgC;AACvE,wBAAA,mBAAmB,EAAE,0BAA0B;AAC/C,wBAAA,qBAAqB,EAAE,4BAA4B;AACnD,qBAAA;AACD,iBAAA;;AAwTD,SAAS,YAAY,CAAC,IAAe,EAAE,IAAe,EAAA;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC;AACrC;AAEA,SAAS,UAAU,CAAC,KAAa,EAAE,YAAoB,EAAA;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,OAAO;AAC7C;AAEA,SAAS,eAAe,CAAC,KAAa,EAAA;AACrC,IAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM;AAClD;AAEA,SAAS,KAAK,CAAC,KAAa,EAAE,CAAC,GAAG,EAAE,GAAG,CAAmB,EAAA;AACzD,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC3C;AAEA,SAAS,qBAAqB,CAAC,MAAgB,EAAA;AAC9C,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,GAAG,KAAK,CAAC;AAC7E;AAEA,SAAS,wBAAwB,CAAC,MAAgB,EAAE,qBAA6B,EAAA;AAChF,IAAA,IAAI,qBAAqB,GAAG,CAAC,EAAE;AAC9B,QAAA,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,CAAC;QACxD,MAAM,2BAA2B,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC;QACnE,OAAO,2BAA2B,IAAI,qBAAqB;IAC5D;AACA,IAAA,OAAO,IAAI;AACZ;;MC3Xa,cAAc,CAAA;IACP,OAAO,GAAG,eAAe,EAAE;AAC9B,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AAExE,IAAA,WAAA,GAAA;QACC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;AAEmB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACpC,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE;QAEpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;QACxC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;QAEhD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;AACpC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE;AAElD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAA,EAAG,KAAK,GAAG,EAAE,CAAA,EAAG,GAAG,GAAG,GAAG,CAAA,CAAA,CAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,KAAK,CAAA,CAAA,CAAG,CAAC;QAE7F,IAAI,CAAC,YAAY,EAAE;YAClB,KAAK,CAAC,OAAO,EAAE;QAChB;QAEA,IAAI,QAAQ,EAAE;YACb,KAAK,CAAC,OAAO,EAAE;QAChB;AAEA,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,IAAA,CAAC,kFAAC;2HA7BU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,yCAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,2BAAA,EAAA,0CAAA,EAAA,oBAAA,EAAA,oDAAA,EAAA,mBAAA,EAAA,qDAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAX1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,IAAI,EAAE;AACL,wBAAA,sBAAsB,EAAE,uCAAuC;AAC/D,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,6BAA6B,EAAE,wCAAwC;AACvE,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,sBAAsB,EAAE,oDAAoD;AAC5E,wBAAA,qBAAqB,EAAE,qDAAqD;AAC5E,qBAAA;AACD,iBAAA;;;ACbK,SAAU,WAAW,CAC1B,KAAgC,EAChC,MAAiC,EAAA;IAEjC,OAAO,CAAC,KAAa,KAAI;AACxB,QAAA,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9C,IAAA,CAAC;AACF;;ACHA,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;MA+B3B,cAAc,CAAA;AACT,IAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;AAC/B,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,KAAK,GAAG,iBAAiB,EAAE;IACzB,OAAO,GAAG,eAAe,EAAE;AAC9B,IAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AAExE;;;;;;;AAOG;AACgB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;QACzB,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;AAChC,IAAA,CAAC,kFAAC;IAEiB,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEtF,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;QACrD,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;QAEzB,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,GAAG;AAC5F,IAAA,CAAC,iFAAC;AAEe,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;;AAErD,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACrC,YAAA,OAAO,CAAC;QACT;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM;QACrF,IAAI,CAAC,IAAI,EAAE;AACV,YAAA,OAAO,CAAC;QACT;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;AACzB,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAClD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5G,QAAA,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,SAAS,IAAI,SAAS;AACtE,IAAA,CAAC,2FAAC;AAEF;;;;AAIG;AACgB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;;AAE/C,QAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;QAC/B;QAEA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAC,UAAU,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,oBAAoB,EAAE,CAAA,GAAA,CAAK;AACxE,IAAA,CAAC,mFAAC;AAEiB,IAAA,kBAAkB,GAAG,QAAQ,CAC/C,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAA,CAAE,yFAC1G;IAEkB,eAAe,GAAG,QAAQ,CAAC,MAC7C,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,YAAY,GAAG,kBAAkB,GAAG,kBAAkB,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACrF;AAED,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AAC/B,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,QAAA,CAAC,CAAC;IACH;AAEU,IAAA,cAAc,CAAC,KAAmB,EAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC;IAC3C;AAEU,IAAA,cAAc,CAAC,KAAmB,EAAA;QAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC;IAC3C;AAEU,IAAA,YAAY,CAAC,KAAmB,EAAA;QACzC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC;IACzC;AAEU,IAAA,aAAa,CAAC,KAAoB,EAAA;AAC3C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAAE;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;;AAG3E,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAE7D,QAAA,MAAM,MAAM,GAAoC;AAC/C,YAAA,SAAS,EAAE,CAAC,IAAI,GAAG,UAAU,GAAG,KAAK;AACrC,YAAA,UAAU,EAAE,IAAI,GAAG,UAAU,GAAG,KAAK;AACrC,YAAA,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,KAAK;AAClC,YAAA,SAAS,EAAE,CAAC,IAAI,GAAG,UAAU,GAAG,KAAK;YACrC,MAAM,EAAE,IAAI,GAAG,UAAU;AACzB,YAAA,QAAQ,EAAE,CAAC,IAAI,GAAG,UAAU;SAC5B;;AAGD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBAC5C,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;YACxC;iBAAO;AACN,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C;YACA,KAAK,CAAC,cAAc,EAAE;YACtB;QACD;AAEA,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;AAC5C,gBAAA,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;YACxC;iBAAO;AACN,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C;YACA,KAAK,CAAC,cAAc,EAAE;YACtB;QACD;QAEA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAC/B,IAAI,KAAK,KAAK,SAAS;YAAE;AAEzB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACxC;aAAO;AACN,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC;YACnD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;QAC1E;QAEA,KAAK,CAAC,cAAc,EAAE;IACvB;2HAnJY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,oBAAA,EAAA,qCAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,oCAAA,EAAA,oBAAA,EAAA,yCAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,0BAAA,EAAA,uFAAA,EAAA,wBAAA,EAAA,sFAAA,EAAA,uBAAA,EAAA,uFAAA,EAAA,yBAAA,EAAA,uFAAA,EAAA,kBAAA,EAAA,wCAAA,EAAA,sBAAA,EAAA,sCAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBA7B1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,IAAI,EAAE;AACL,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,mBAAmB,EAAE,CAAA,oBAAA,CAAsB;AAC3C,wBAAA,wBAAwB,EAAE,kCAAkC;AAC5D,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,sBAAsB,EAAE,qCAAqC;AAC7D,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,sBAAsB,EAAE,eAAe;AACvC,wBAAA,iBAAiB,EAAE,oCAAoC;AACvD,wBAAA,sBAAsB,EAAE,uCAAuC;AAC/D,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,4BAA4B,EAC3B,uFAAuF;AACxF,wBAAA,0BAA0B,EAAE,sFAAsF;AAClH,wBAAA,yBAAyB,EAAE,uFAAuF;AAClH,wBAAA,2BAA2B,EAC1B,uFAAuF;AACxF,wBAAA,oBAAoB,EAAE,sCAAsC;AAC5D,wBAAA,wBAAwB,EAAE,oCAAoC;AAC9D,wBAAA,mBAAmB,EAAE,mBAAmB;AACxC,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,eAAe,EAAE,wBAAwB;AACzC,wBAAA,eAAe,EAAE,wBAAwB;AACzC,wBAAA,aAAa,EAAE,sBAAsB;AACrC,wBAAA,WAAW,EAAE,uBAAuB;AACpC,qBAAA;AACD,iBAAA;;;MClBY,aAAa,CAAA;IACR,OAAO,GAAG,eAAe,EAAE;AAC3B,IAAA,YAAY,GAAG,MAAM,CAAoC,WAAW,CAAC;AACrE,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,IAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACzC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IACzC,MAAM,GAA4C,EAAE;AAE5D,IAAA,WAAA,GAAA;QACC,MAAM,CAAC,MAAK;YACX,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAClC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;;YAG1D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;AAG5F,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;YAEhB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE;AACtE,oBAAA,SAAS,EAAE,IAAI;oBACf,KAAK;oBACL,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC;AAC9C,iBAAA,CAAC;gBAEF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAgB;gBAC/C,IAAI,iBAAiB,KAAK,CAAC,IAAI,KAAK,GAAG,iBAAiB,KAAK,CAAC,EAAE;oBAC/D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;gBACrD;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB,YAAA,CAAC,CAAC;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7F,QAAA,CAAC,CAAC;IACH;2HAtCY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;+GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,IAAI,EAAE;AACL,wBAAA,WAAW,EAAE,aAAa;AAC1B,qBAAA;AACD,iBAAA;;;MCdY,mBAAmB,GAAG,IAAI,cAAc,CAAiB,qBAAqB;AAErF,SAAU,qBAAqB,CAAC,MAA4B,EAAA;IACjE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,EAAE;AAC7D;SAEgB,oBAAoB,GAAA;AACnC,IAAA,OAAO,MAAM,CAAC,mBAAmB,CAAC;AACnC;;MCMa,cAAc,CAAA;AACT,IAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;IACvD,OAAO,GAAG,eAAe,EAAE;IAEtC,sBAAsB,GAAkB,IAAI;IAC5C,0BAA0B,GAAG,CAAC;AAEtC,IAAA,WAAA,GAAA;QACC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IAC7B;AAEO,IAAA,aAAa,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAAE;AAEpC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;AAGrC,QAAA,IAAI,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE;YAAE;AAEpD,QAAA,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;;QAGrC,IAAI,OAAO,IAAI,OAAO;YAAE,KAAK,CAAC,cAAc,EAAE;AAE9C,QAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE;YACxF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;YAC7D;QACD;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;AACxD,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC;AAEhF,QAAA,IAAI,OAAO,IAAI,OAAO,EAAE;YACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;QAC3C;aAAO;YACN,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC;QAClD;IACD;AAEO,IAAA,aAAa,CAAC,KAAmB,EAAA;AACvC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAAE;AAEpC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE;AAEhD,QAAA,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE;YAC5E,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AACtD,YAAA,MAAM,UAAU,GAAG,cAAc,GAAG,IAAI,CAAC,sBAAsB;YAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;;AAG3D,YAAA,IAAI,CAAC,0BAA0B,IAAI,UAAU;YAE7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAChC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,GAAG,IAAI;AAE9E,YAAA,IAAI,YAAY,KAAK,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,CAAC;;AAG9C,gBAAA,IAAI,CAAC,0BAA0B,IAAI,YAAY;YAChD;;AAGA,YAAA,IAAI,CAAC,sBAAsB,GAAG,cAAc;YAC5C;QACD;QAEA,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;AACxD,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAChE;AAEO,IAAA,WAAW,CAAC,KAAmB,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAE1C,IAAI,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AAC9C,YAAA,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI;AAClC,QAAA,IAAI,CAAC,0BAA0B,GAAG,CAAC;IACpC;AAEQ,IAAA,oBAAoB,CAAC,eAAuB,EAAA;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;QAE3C,MAAM,UAAU,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ;AAC1D,QAAA,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;AAElD,QAAA,MAAM,KAAK,GAAqB,CAAC,CAAC,EAAE,IAAI,CAAC;AACzC,QAAA,MAAM,MAAM,GAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;AAExC,QAAA,IAAI,gBAAwB;QAE5B,QAAQ,MAAM;AACb,YAAA,KAAK,MAAM;AACV,gBAAA,gBAAgB,GAAG,eAAe,GAAG,IAAI,CAAC,IAAI;gBAC9C;AACD,YAAA,KAAK,OAAO;AACX,gBAAA,gBAAgB,GAAG,IAAI,CAAC,KAAK,GAAG,eAAe;gBAC/C;AACD,YAAA,KAAK,KAAK;AACT,gBAAA,gBAAgB,GAAG,eAAe,GAAG,IAAI,CAAC,GAAG;gBAC7C;AACD,YAAA,KAAK,QAAQ;AACZ,gBAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe;gBAChD;;AAGF,QAAA,OAAO,KAAK,CAAC,gBAAgB,CAAC;IAC/B;AAEQ,IAAA,uBAAuB,CAAC,UAAkB,EAAA;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;QAEnE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;;QAG9E,IAAI,SAAS,GAAG,CAAC;AACjB,QAAA,QAAQ,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;AACnC,YAAA,KAAK,OAAO;AACZ,YAAA,KAAK,QAAQ;gBACZ,SAAS,GAAG,CAAC,CAAC;gBACd;AACD,YAAA,KAAK,MAAM;AACX,YAAA,KAAK,KAAK;gBACT,SAAS,GAAG,CAAC;gBACb;;QAGF,OAAO,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAChD;AAEQ,IAAA,QAAQ,CAAC,EAAe,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,KAAK,EAAE;IAC7C;AAEQ,IAAA,QAAQ,CAAC,EAAe,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,aAAa,KAAK,EAAE;IAC7D;AAEQ,IAAA,mBAAmB,CAAC,KAAmB,EAAA;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,YAAY,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IACnF;2HAtJY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,uBAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,4XAVf,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAUtC,cAAc,EAAA,UAAA,EAAA,CAAA;kBAZ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE,CAAC,qBAAqB,CAAA,cAAA,CAAgB,CAAC;AAClD,oBAAA,IAAI,EAAE;AACL,wBAAA,sBAAsB,EAAE,uCAAuC;AAC/D,wBAAA,yBAAyB,EAAE,uBAAuB;AAClD,wBAAA,WAAW,EAAE,cAAc;AAC3B,wBAAA,eAAe,EAAE,uBAAuB;AACxC,wBAAA,eAAe,EAAE,uBAAuB;AACxC,wBAAA,aAAa,EAAE,qBAAqB;AACpC,qBAAA;AACD,iBAAA;;AA0JD,SAAS,oBAAoB,CAAC,MAAgB,EAAE,SAAiB,EAAA;AAChE,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AAC9C,IAAA,OAAO,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC;AAC1C;;ACjKO,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa;;ACdzG;;AAEG;;;;"}
|