@symbiote-native/slider 5.1.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +43 -7
  2. package/build/angular/index.js +1 -1
  3. package/build/angular/slider/index.android.js +7 -1
  4. package/build/angular/slider/index.ios.js +8 -2
  5. package/build/angular/slider/shared.js +4 -1
  6. package/build/core/index.d.ts +2 -2
  7. package/build/core/render-slider.js +5 -1
  8. package/build/core/render-steps-indicator.js +13 -4
  9. package/build/react/index.js +1 -1
  10. package/build/react/slider/index.ios.js +1 -1
  11. package/build/react/slider/shared.js +11 -4
  12. package/build/register/index.js +5 -2
  13. package/build/solid/index.d.ts +4 -0
  14. package/build/solid/index.js +8 -0
  15. package/build/solid/slider/index.android.d.ts +2 -0
  16. package/build/solid/slider/index.android.js +10 -0
  17. package/build/solid/slider/index.d.ts +1 -0
  18. package/build/solid/slider/index.ios.d.ts +2 -0
  19. package/build/solid/slider/index.ios.js +11 -0
  20. package/build/solid/slider/index.js +4 -0
  21. package/build/solid/slider/shared.d.ts +12 -0
  22. package/build/solid/slider/shared.js +296 -0
  23. package/build/svelte/index.js +1 -1
  24. package/build/svelte/slider/index.svelte +62 -10
  25. package/build/svelte/slider/slider-platform.ios.js +1 -1
  26. package/build/vue/index.js +1 -1
  27. package/build/vue/slider/index.ios.js +1 -1
  28. package/build/vue/slider/shared.js +11 -5
  29. package/build-ngc/angular/slider/index.android.js +14 -2
  30. package/build-ngc/angular/slider/index.android.js.map +1 -1
  31. package/build-ngc/angular/slider/index.ios.js +15 -3
  32. package/build-ngc/angular/slider/index.ios.js.map +1 -1
  33. package/build-ngc/angular/slider/shared.js +4 -1
  34. package/build-ngc/angular/slider/shared.js.map +1 -1
  35. package/build-ngc/core/index.d.ts +2 -2
  36. package/build-ngc/core/index.js.map +1 -1
  37. package/build-ngc/core/render-slider.js +5 -1
  38. package/build-ngc/core/render-slider.js.map +1 -1
  39. package/build-ngc/core/render-steps-indicator.js +13 -4
  40. package/build-ngc/core/render-steps-indicator.js.map +1 -1
  41. package/build-ngc/core/slider-state.js.map +1 -1
  42. package/build-ngc/register/index.js +5 -2
  43. package/build-ngc/register/index.js.map +1 -1
  44. package/package.json +39 -15
  45. package/src/angular/slider/index.android.ts +7 -1
  46. package/src/angular/slider/index.ios.ts +11 -2
  47. package/src/angular/slider/shared.ts +31 -10
  48. package/src/core/index.ts +9 -2
  49. package/src/core/render-slider.ts +24 -6
  50. package/src/core/render-steps-indicator.ts +38 -10
  51. package/src/core/slider-props.ts +5 -1
  52. package/src/core/slider-state.ts +16 -5
  53. package/src/react/slider/index.ios.ts +4 -1
  54. package/src/react/slider/shared.ts +66 -15
  55. package/src/register/index.ts +9 -2
  56. package/src/solid/index.ts +12 -0
  57. package/src/solid/slider/index.android.ts +15 -0
  58. package/src/solid/slider/index.ios.ts +19 -0
  59. package/src/solid/slider/index.ts +5 -0
  60. package/src/solid/slider/shared.ts +468 -0
  61. package/src/svelte/slider/index.svelte +62 -10
  62. package/src/svelte/slider/slider-platform.ios.ts +4 -1
  63. package/src/svelte/slider/slider-props.ts +4 -1
  64. package/src/vue/slider/index.ios.ts +4 -1
  65. package/src/vue/slider/shared.ts +72 -19
@@ -0,0 +1,296 @@
1
+ // Slider, the Solid lifecycle half. The logic (value/limit/disabled folds, the step-option layout)
2
+ // and the native render live in @symbiote-native/slider core, shared verbatim with React, Vue,
3
+ // Svelte and Angular; Solid supplies only the reactivity — a signal for the value native last
4
+ // reported (to mark the active step), a signal for the measured width — plus the descriptor bridge.
5
+ // The native RNCSlider carries no symbiote metadata: the engine derives its events and color/image
6
+ // processors from the library's ViewConfig, registered by ../register (the package barrel pulls it,
7
+ // NOT this module, so the tests stay free of the third-party spec). Like every other adapter here,
8
+ // this NEVER imports the library's React Slider component — it calls hooks off the React dispatcher
9
+ // and would crash under a non-React adapter.
10
+ //
11
+ // NOTHING here destructures `props`. Solid props are getters and a component body runs ONCE, so a
12
+ // destructure would freeze the slider at its mount-time values; every read sits inside an accessor.
13
+ //
14
+ // WHY THE TREE IS ASSEMBLED BY HAND INSTEAD OF THROUGH renderSlider(). Solid has no reconciler
15
+ // between what this file returns and the host nodes, so a tree whose SHAPE changes has to be
16
+ // rebuilt, and rebuilding the native slider would throw away the node identity its own thumb grip
17
+ // and every imperative command key on. renderSlider's Descriptor carries the step overlay as a
18
+ // child, i.e. its child count flips with `renderStepNumber` — which descriptorToSolid refuses
19
+ // (.claude/rules/solid-descriptor-bridge.md §2). So the wrapper is built once here, the native leaf
20
+ // is bridged once via renderSliderNative (the split core exposes for exactly this: React takes it
21
+ // too on its custom-marker path), and only the OVERLAY sits behind a rebuild boundary. The result
22
+ // is a stable native node across every overlay change — where React remounts it, since the wrapper's
23
+ // unkeyed children shift by one.
24
+ //
25
+ // The hand-written createElement / spread / insert calls below are what compiled JSX emits; this
26
+ // package cannot use JSX at all, because its tsconfig is shared with the React/Vue/Angular entries
27
+ // and TypeScript has one `jsx` setting per program. descriptor-to-solid.ts drives the renderer the
28
+ // same way for the same reason.
29
+ // createComponent comes from solid-js, not the renderer's re-export: the renderer's is typed to
30
+ // return its own host-node union, which cannot hold what a component returns (an Image is
31
+ // JSX.Element). Same function either way.
32
+ import { createComponent, createEffect, createMemo, createSignal, untrack, } from 'solid-js';
33
+ import { descriptorToSolid, Image, } from '@symbiote-native/solid';
34
+ import { createElement, createTextNode, insert, insertNode, setProp, spread, } from '@symbiote-native/solid/renderer';
35
+ import { resolveAccessibilityProps } from '@symbiote-native/components';
36
+ import { dlog, isSymbioteNode, } from '@symbiote-native/engine';
37
+ import { sanitizeSliderValue, resolveSliderDisabled, resolveSliderAccessibilityState, resolveSliderLowerLimit, resolveSliderUpperLimit, valueFromSliderEvent, shouldRenderStepsIndicator, resolveThumbTintColor, shouldPassNativeThumbImage, isInvalidLimitConfig, computeStepOptions, orderStepOptions, stepNumberFontSize, renderSliderNative, resolveSliderWrapperStyle, resolveStepsContainerStyle, renderStepsIndicator, STEP_INDICATOR_ELEMENT_STYLE, TRACK_MARK_CONTAINER_STYLE, THUMB_IMAGE_CONTAINER_STYLE, THUMB_IMAGE_STYLE, STEP_NUMBER_CONTAINER_STYLE, SLIDER_DEFAULT_MINIMUM_VALUE, SLIDER_DEFAULT_MAXIMUM_VALUE, SLIDER_DEFAULT_STEP, SLIDER_ON_CHANGE, SLIDER_ON_VALUE_CHANGE, SLIDER_ON_SLIDING_START, SLIDER_ON_SLIDING_COMPLETE, SLIDER_ON_ACCESSIBILITY_ACTION, } from '../../core/index.js';
38
+ // Read by the component itself; everything else (the track tints and images, thumbSize, tapToSeek,
39
+ // vertical, testID, the accessibility surface, a caller's `ref`) forwards onto the native leaf. The
40
+ // four JS callbacks MUST be stripped — a function prop reaching Fabric crashes Android's
41
+ // folly::dynamic serializer — and are re-supplied as the native event handlers in `passthrough`.
42
+ const HANDLED_PROPS = [
43
+ 'value',
44
+ 'minimumValue',
45
+ 'maximumValue',
46
+ 'step',
47
+ 'lowerLimit',
48
+ 'upperLimit',
49
+ 'disabled',
50
+ 'inverted',
51
+ 'thumbTintColor',
52
+ 'thumbImage',
53
+ 'accessibilityState',
54
+ 'renderStepNumber',
55
+ 'style',
56
+ 'class',
57
+ 'StepMarker',
58
+ 'onValueChange',
59
+ 'onSlidingStart',
60
+ 'onSlidingComplete',
61
+ 'onAccessibilityAction',
62
+ ];
63
+ function forwardProps(resolved) {
64
+ const forwarded = { ...resolved };
65
+ for (const key of HANDLED_PROPS)
66
+ delete forwarded[key];
67
+ return forwarded;
68
+ }
69
+ function isRecord(value) {
70
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
71
+ }
72
+ // Narrowing, not defensive: the renderer's createElement is typed over its IHostNode union (which
73
+ // includes the surface), while everything below needs a real host node. Same guard descriptorToSolid
74
+ // opens with.
75
+ function hostElement(tag) {
76
+ const node = createElement(tag);
77
+ if (!isSymbioteNode(node)) {
78
+ throw new Error(`Slider: ${tag} did not create a host node`);
79
+ }
80
+ return node;
81
+ }
82
+ // Solid core's own render-prop shape, line for line with `<Show>`: untrack + accessor, with an arity
83
+ // guard because `typeof fn === 'function'` cannot separate a render prop from the bare zero-argument
84
+ // accessor JSX.Element also permits. A 0-arity marker is handed back unread so `insert` wraps it in
85
+ // its own render effect; calling it here would freeze it at its first value.
86
+ function callStepMarker(marker, props) {
87
+ if (marker.length === 0)
88
+ return () => marker(props);
89
+ return untrack(() => marker(props));
90
+ }
91
+ export function createSlider(platform) {
92
+ return function Slider(props) {
93
+ // What native last reported, kept only to mark the active step. NOT the controlled value — the
94
+ // slider is uncontrolled during a drag, native owns the thumb and reports up.
95
+ const [reportedValue, setReportedValue] = createSignal(undefined);
96
+ // The measured wrapper width the step indicator lays out against; 0 until the first layout.
97
+ const [width, setWidth] = createSignal(0);
98
+ const handleValueChange = (event) => {
99
+ const next = valueFromSliderEvent(event);
100
+ if (next === undefined)
101
+ return;
102
+ setReportedValue(next);
103
+ props.onValueChange?.(next);
104
+ };
105
+ const handleSlidingStart = (event) => {
106
+ const next = valueFromSliderEvent(event);
107
+ if (next !== undefined)
108
+ props.onSlidingStart?.(next);
109
+ };
110
+ const handleSlidingComplete = (event) => {
111
+ const next = valueFromSliderEvent(event);
112
+ if (next !== undefined)
113
+ props.onSlidingComplete?.(next);
114
+ };
115
+ const handleAccessibilityAction = (event) => {
116
+ props.onAccessibilityAction?.(event);
117
+ };
118
+ const handleLayout = (event) => {
119
+ const layout = event.nativeEvent.layout;
120
+ if (isRecord(layout) && typeof layout.width === 'number') {
121
+ setWidth(layout.width);
122
+ }
123
+ };
124
+ const minimumValue = () => props.minimumValue ?? SLIDER_DEFAULT_MINIMUM_VALUE;
125
+ const maximumValue = () => props.maximumValue ?? SLIDER_DEFAULT_MAXIMUM_VALUE;
126
+ const step = () => props.step ?? SLIDER_DEFAULT_STEP;
127
+ const lowerLimit = () => resolveSliderLowerLimit(props.lowerLimit);
128
+ const upperLimit = () => resolveSliderUpperLimit(props.upperLimit);
129
+ createEffect(() => {
130
+ if (isInvalidLimitConfig(lowerLimit(), upperLimit())) {
131
+ dlog('Slider: lowerLimit must be smaller than upperLimit');
132
+ }
133
+ });
134
+ const hasStepMarker = () => props.StepMarker !== undefined;
135
+ const hasThumbImage = () => props.thumbImage !== undefined;
136
+ const showSteps = () => shouldRenderStepsIndicator(hasStepMarker(), props.renderStepNumber);
137
+ const view = () => {
138
+ // Folded BEFORE the handled props are read, exactly as React folds rawProps before it
139
+ // destructures: `aria-disabled` lands in accessibilityState, and reading the raw prop instead
140
+ // would hand the fold below an undefined and blank the a11y state the alias just set.
141
+ const resolved = resolveAccessibilityProps(props);
142
+ return {
143
+ value: sanitizeSliderValue(props.value),
144
+ minimumValue: minimumValue(),
145
+ maximumValue: maximumValue(),
146
+ step: step(),
147
+ lowerLimit: lowerLimit(),
148
+ upperLimit: upperLimit(),
149
+ disabled: resolveSliderDisabled(props.disabled, resolved.accessibilityState),
150
+ inverted: props.inverted ?? false,
151
+ thumbTintColor: resolveThumbTintColor(props.thumbTintColor, hasStepMarker(), hasThumbImage()),
152
+ // Passed to native raw — the engine runs the image processor derived from RNCSlider's
153
+ // ViewConfig — and only when no custom marker draws its own thumb (matches the library).
154
+ thumbImage: shouldPassNativeThumbImage(hasStepMarker(), hasThumbImage())
155
+ ? props.thumbImage
156
+ : undefined,
157
+ accessibilityState: resolveSliderAccessibilityState(props.disabled, resolved.accessibilityState),
158
+ width: width(),
159
+ style: props.style,
160
+ passthrough: {
161
+ ...forwardProps(resolved),
162
+ [SLIDER_ON_CHANGE]: handleValueChange,
163
+ [SLIDER_ON_VALUE_CHANGE]: handleValueChange,
164
+ [SLIDER_ON_SLIDING_START]: handleSlidingStart,
165
+ [SLIDER_ON_SLIDING_COMPLETE]: handleSlidingComplete,
166
+ [SLIDER_ON_ACCESSIBILITY_ACTION]: handleAccessibilityAction,
167
+ },
168
+ };
169
+ };
170
+ const options = createMemo(() => computeStepOptions(minimumValue(), maximumValue(), step(), platform.stepResolution));
171
+ const currentValue = createMemo(() => reportedValue() ?? sanitizeSliderValue(props.value) ?? minimumValue());
172
+ // THE REBUILD BOUNDARY (.claude/rules/solid-descriptor-bridge.md §5). Everything read TRACKED
173
+ // here changes the overlay's SHAPE — which overlay kind, how many cells, whether each cell
174
+ // carries a number — and the build itself is untracked so it does not also subscribe to every
175
+ // value/width read inside it. Drop the untrack and one drag rebuilds the whole indicator.
176
+ const overlay = createMemo(() => {
177
+ if (!showSteps())
178
+ return null;
179
+ const marker = props.StepMarker;
180
+ const cells = options();
181
+ const withNumbers = props.renderStepNumber === true;
182
+ const inverted = props.inverted ?? false;
183
+ const thumbImage = props.thumbImage;
184
+ // Read for its dependency, not its value: the DEFAULT overlay hands the thumb image to
185
+ // whichever cell matches the current value, so the cell's child count moves with that value —
186
+ // a shape change descriptorToSolid refuses. With no thumb image the shape is fixed and the
187
+ // bridge just re-props the same nodes.
188
+ if (marker === undefined && thumbImage !== undefined)
189
+ currentValue();
190
+ return untrack(() => marker === undefined
191
+ ? descriptorToSolid(() => renderStepsIndicator({
192
+ options: cells,
193
+ currentValue: currentValue(),
194
+ width: width(),
195
+ renderStepNumber: withNumbers,
196
+ thumbImage,
197
+ inverted,
198
+ platform,
199
+ }))
200
+ : buildCustomOverlay({
201
+ cells,
202
+ marker,
203
+ withNumbers,
204
+ inverted,
205
+ currentValue,
206
+ width,
207
+ thumbImage: () => props.thumbImage,
208
+ platform,
209
+ }));
210
+ });
211
+ // Built ONCE and kept by identity: descriptorToSolid wires every prop through a render effect on
212
+ // this same node, so a value/tint/limit change re-commits the existing native slider instead of
213
+ // replacing it — which would drop the thumb the user is dragging.
214
+ const leaf = descriptorToSolid(() => renderSliderNative(view(), platform));
215
+ const wrapper = hostElement('symbiote-view');
216
+ // A statically-present key set (all three are always emitted), so this needs no withStableKeys
217
+ // widening — `spread` alone has no removal pass for a key that vanishes.
218
+ spread(wrapper, () => ({
219
+ style: resolveSliderWrapperStyle(props.style, platform),
220
+ class: props.class,
221
+ onLayout: handleLayout,
222
+ }), true);
223
+ insertNode(wrapper, leaf);
224
+ // The overlay goes BEFORE the leaf, matching the z-order renderSlider composes; `leaf` is the
225
+ // marker `insert` positions against, which is also what keeps it from clearing the wrapper.
226
+ insert(wrapper, overlay, leaf);
227
+ return wrapper;
228
+ };
229
+ }
230
+ // The custom-marker overlay: the same flex row the agnostic default paints, but each mark hosts the
231
+ // caller's own marker element, mirroring the library's SliderTrackMark composition. Built by hand
232
+ // rather than as a Descriptor because a Descriptor holds only VALUES, and a marker is a live Solid
233
+ // subtree — the same boundary View and Pressable sit on.
234
+ function buildCustomOverlay(params) {
235
+ const fontSize = stepNumberFontSize(params.cells.length);
236
+ const ordered = orderStepOptions(params.cells, params.inverted);
237
+ const min = params.cells[0];
238
+ const max = params.cells[params.cells.length - 1];
239
+ const container = hostElement('symbiote-view');
240
+ // pointerEvents none so the overlay never eats the drag. `style` tracks the measured width, hence
241
+ // an accessor rather than a one-shot setProp.
242
+ spread(container, () => ({
243
+ pointerEvents: 'none',
244
+ testID: 'StepsIndicator-Container',
245
+ style: resolveStepsContainerStyle(params.width(), params.platform),
246
+ }), true);
247
+ ordered.forEach((value, index) => {
248
+ insertNode(container, buildStepCell({ value, index, min, max, fontSize, params }));
249
+ });
250
+ return container;
251
+ }
252
+ function buildStepCell(cell) {
253
+ const { params } = cell;
254
+ const element = hostElement('symbiote-view');
255
+ setProp(element, 'style', STEP_INDICATOR_ELEMENT_STYLE);
256
+ const track = hostElement('symbiote-view');
257
+ setProp(track, 'style', TRACK_MARK_CONTAINER_STYLE);
258
+ insertNode(element, track);
259
+ // A memo, not a bare accessor: several leaves inside one marker must see the same object, and an
260
+ // unchanged value must not hand out a fresh one.
261
+ const markerProps = createMemo(() => ({
262
+ stepMarked: cell.value === params.currentValue(),
263
+ currentValue: params.currentValue(),
264
+ index: cell.index,
265
+ min: cell.min,
266
+ max: cell.max,
267
+ }));
268
+ const markerElement = callStepMarker(params.marker, markerProps);
269
+ // One `insert` owns the track's children: the marker (stable identity, reconciled in place) and
270
+ // the thumb image, which only the cell matching the current value carries.
271
+ insert(track, () => [markerElement, buildThumbImage(cell)]);
272
+ if (params.withNumbers) {
273
+ const numberBox = hostElement('symbiote-view');
274
+ setProp(numberBox, 'style', STEP_NUMBER_CONTAINER_STYLE);
275
+ const label = hostElement('symbiote-text');
276
+ setProp(label, 'testID', `${cell.index}th-step`);
277
+ setProp(label, 'style', { fontSize: cell.fontSize });
278
+ insertNode(label, createTextNode(String(cell.value)));
279
+ insertNode(numberBox, label);
280
+ insertNode(element, numberBox);
281
+ }
282
+ return element;
283
+ }
284
+ function buildThumbImage(cell) {
285
+ const source = cell.params.thumbImage();
286
+ if (source === undefined || cell.value !== cell.params.currentValue()) {
287
+ return null;
288
+ }
289
+ const container = hostElement('symbiote-view');
290
+ setProp(container, 'style', THUMB_IMAGE_CONTAINER_STYLE);
291
+ setProp(container, 'testID', 'sliderTrackMark-thumbImage');
292
+ // The Image COMPONENT, not a raw symbiote-image: it resolves an asset id through RN's own
293
+ // resolveAssetSource, exactly as React's and Vue's custom overlays do.
294
+ insert(container, createComponent(Image, { source, style: THUMB_IMAGE_STYLE }));
295
+ return container;
296
+ }
@@ -5,5 +5,5 @@
5
5
  // (slider/slider-platform.ts, Metro-filename-selected) - matching this adapter's own
6
6
  // Switch/ActivityIndicator convention, since Svelte components are compiled `.svelte` files, not
7
7
  // factories like Vue's per-platform `createSlider(platform)`.
8
- import '../register';
8
+ import '../register/index.js';
9
9
  export { default as Slider } from './slider/index.svelte';
@@ -130,7 +130,8 @@
130
130
  }
131
131
  function handleLayout(event: ISymbioteEvent): void {
132
132
  const layout = event.nativeEvent.layout;
133
- if (isRecord(layout) && typeof layout.width === 'number') width = layout.width;
133
+ if (isRecord(layout) && typeof layout.width === 'number')
134
+ width = layout.width;
134
135
  }
135
136
 
136
137
  const minimum = $derived(minimumValue ?? SLIDER_DEFAULT_MINIMUM_VALUE);
@@ -147,13 +148,17 @@
147
148
 
148
149
  const hasStepMarker = $derived(stepMarker !== undefined);
149
150
  const hasThumbImage = $derived(thumbImage !== undefined);
150
- const showSteps = $derived(shouldRenderStepsIndicator(hasStepMarker, renderStepNumber));
151
+ const showSteps = $derived(
152
+ shouldRenderStepsIndicator(hasStepMarker, renderStepNumber),
153
+ );
151
154
 
152
155
  // The native view gets a thumbImage only when there is one AND no custom marker (which draws
153
156
  // its own thumb), matching the library. Passed raw — the engine runs the image processor
154
157
  // derived from RNCSlider's ViewConfig (same path as the color tints).
155
158
  const nativeThumbImage = $derived(
156
- shouldPassNativeThumbImage(hasStepMarker, hasThumbImage) ? thumbImage : undefined,
159
+ shouldPassNativeThumbImage(hasStepMarker, hasThumbImage)
160
+ ? thumbImage
161
+ : undefined,
157
162
  );
158
163
 
159
164
  const view = $derived<ISliderViewProps>({
@@ -165,9 +170,16 @@
165
170
  upperLimit: upper,
166
171
  disabled: resolveSliderDisabled(disabled, accessibilityState),
167
172
  inverted,
168
- thumbTintColor: resolveThumbTintColor(thumbTintColor, hasStepMarker, hasThumbImage),
173
+ thumbTintColor: resolveThumbTintColor(
174
+ thumbTintColor,
175
+ hasStepMarker,
176
+ hasThumbImage,
177
+ ),
169
178
  thumbImage: nativeThumbImage,
170
- accessibilityState: resolveSliderAccessibilityState(disabled, accessibilityState),
179
+ accessibilityState: resolveSliderAccessibilityState(
180
+ disabled,
181
+ accessibilityState,
182
+ ),
171
183
  width,
172
184
  style,
173
185
  passthrough: {
@@ -180,7 +192,9 @@
180
192
  },
181
193
  });
182
194
 
183
- const options = $derived(computeStepOptions(minimum, maximum, resolvedStep, PLATFORM.stepResolution));
195
+ const options = $derived(
196
+ computeStepOptions(minimum, maximum, resolvedStep, PLATFORM.stepResolution),
197
+ );
184
198
  const currentValue = $derived(reportedValue ?? view.value ?? minimum);
185
199
 
186
200
  // --- No custom marker: renderSlider() is the single source of truth (wrapper + optional
@@ -217,8 +231,12 @@
217
231
 
218
232
  function syncDefaultChildren(children: IDescriptorChild[]): void {
219
233
  if (hostShimDefault === null) return;
220
- if (mountedDefault === undefined || mountedDefaultCount !== children.length) {
221
- for (const child of hostShimDefault.children.slice()) hostShimDefault.removeChild(child);
234
+ if (
235
+ mountedDefault === undefined ||
236
+ mountedDefaultCount !== children.length
237
+ ) {
238
+ for (const child of hostShimDefault.children.slice())
239
+ hostShimDefault.removeChild(child);
222
240
  mountedDefault = mountDescriptorChildren(hostShimDefault, children);
223
241
  mountedDefaultCount = children.length;
224
242
  } else {
@@ -265,10 +283,44 @@
265
283
  }}
266
284
  >
267
285
  {#each orderedOptions as optionValue, index (optionValue)}
268
- <symbiote-view p={{ style: STEP_INDICATOR_ELEMENT_STYLE }}><symbiote-view p={{ style: TRACK_MARK_CONTAINER_STYLE }}>{@render stepMarker?.({ stepMarked: optionValue === currentValue, currentValue, index, min: minOption, max: maxOption })}{#if thumbImage !== undefined && optionValue === currentValue}<symbiote-view p={{ style: THUMB_IMAGE_CONTAINER_STYLE, testID: 'sliderTrackMark-thumbImage' }}><symbiote-image p={{ source: thumbImage, style: THUMB_IMAGE_STYLE }} /></symbiote-view>{/if}</symbiote-view>{#if renderStepNumber}<symbiote-view p={{ style: STEP_NUMBER_CONTAINER_STYLE }}><symbiote-text p={{ testID: `${index}th-step`, style: { fontSize } }}>{String(optionValue)}</symbiote-text></symbiote-view>{/if}</symbiote-view>
286
+ <symbiote-view p={{ style: STEP_INDICATOR_ELEMENT_STYLE }}>
287
+ <symbiote-view p={{ style: TRACK_MARK_CONTAINER_STYLE }}>
288
+ {@render stepMarker?.({
289
+ stepMarked: optionValue === currentValue,
290
+ currentValue,
291
+ index,
292
+ min: minOption,
293
+ max: maxOption,
294
+ })}
295
+ {#if thumbImage !== undefined && optionValue === currentValue}
296
+ <symbiote-view
297
+ p={{
298
+ style: THUMB_IMAGE_CONTAINER_STYLE,
299
+ testID: 'sliderTrackMark-thumbImage',
300
+ }}
301
+ >
302
+ <symbiote-image
303
+ p={{ source: thumbImage, style: THUMB_IMAGE_STYLE }}
304
+ />
305
+ </symbiote-view>
306
+ {/if}
307
+ </symbiote-view>
308
+ {#if renderStepNumber}
309
+ <symbiote-view p={{ style: STEP_NUMBER_CONTAINER_STYLE }}>
310
+ <symbiote-text
311
+ p={{ testID: `${index}th-step`, style: { fontSize } }}
312
+ >
313
+ {String(optionValue)}
314
+ </symbiote-text>
315
+ </symbiote-view>
316
+ {/if}
317
+ </symbiote-view>
269
318
  {/each}
270
319
  </symbiote-view>
271
320
  </symbiote-view>
272
321
  {:else}
273
- <symbiote-view p={{ ...defaultDescriptor?.props, class: className }} bind:this={hostShimDefault} />
322
+ <symbiote-view
323
+ p={{ ...defaultDescriptor?.props, class: className }}
324
+ bind:this={hostShimDefault}
325
+ />
274
326
  {/if}
@@ -3,7 +3,7 @@
3
3
  // Also the base (./slider-platform re-exports it) for headless. Mirrors
4
4
  // packages/slider/src/vue/slider/index.ios.ts exactly, one level down (platform CONSTANT here,
5
5
  // not a per-platform component — see index.svelte's header).
6
- import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS } from '../../core/index.js';
6
+ import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS, } from '../../core/index.js';
7
7
  const IOS_STEPS_CONTAINER_TOP = 10;
8
8
  export const PLATFORM = {
9
9
  defaultStyle: { height: SLIDER_IOS_DEFAULT_HEIGHT },
@@ -3,5 +3,5 @@
3
3
  // import of the codegen spec — never the library's React component), then exposes the platform-
4
4
  // split Slider. The public prop type is the agnostic core ISliderProps plus a Vue-only `class`
5
5
  // field (see slider/shared.ts); the custom StepMarker is a Vue scoped slot, not a prop.
6
- import '../register';
6
+ import '../register/index.js';
7
7
  export { Slider } from './slider';
@@ -2,7 +2,7 @@
2
2
  // default), lays out implicit steps at 1000-point resolution, and nudges the step row down 10pt.
3
3
  // Also the base (./index re-exports it) for headless. Mirrors the library's iOS branches.
4
4
  import { createSlider } from './shared.js';
5
- import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS } from '../../core/index.js';
5
+ import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS, } from '../../core/index.js';
6
6
  const IOS_STEPS_CONTAINER_TOP = 10;
7
7
  export const Slider = createSlider({
8
8
  defaultStyle: { height: SLIDER_IOS_DEFAULT_HEIGHT },
@@ -6,9 +6,9 @@
6
6
  // and color processors from the library's ViewConfig at runtime. That ViewConfig is registered by
7
7
  // the side-effect import in ../register (pulled in by the package barrel, NOT here, so this module
8
8
  // and its tests stay free of the third-party spec).
9
- import { defineComponent, h, ref } from '@vue/runtime-core';
9
+ import { defineComponent, h, ref, } from '@vue/runtime-core';
10
10
  import { descriptorToVue, normalizeVueAttrs, resolveModelValue, emitModelUpdate, Image, } from '@symbiote-native/vue';
11
- import { dlog } from '@symbiote-native/engine';
11
+ import { dlog, } from '@symbiote-native/engine';
12
12
  import { sanitizeSliderValue, resolveSliderDisabled, resolveSliderAccessibilityState, resolveSliderLowerLimit, resolveSliderUpperLimit, valueFromSliderEvent, shouldRenderStepsIndicator, resolveThumbTintColor, shouldPassNativeThumbImage, isInvalidLimitConfig, computeStepOptions, orderStepOptions, stepNumberFontSize, renderSlider, renderSliderNative, resolveStepsContainerStyle, renderStepsIndicator, STEP_INDICATOR_ELEMENT_STYLE, TRACK_MARK_CONTAINER_STYLE, THUMB_IMAGE_CONTAINER_STYLE, THUMB_IMAGE_STYLE, STEP_NUMBER_CONTAINER_STYLE, SLIDER_DEFAULT_MINIMUM_VALUE, SLIDER_DEFAULT_MAXIMUM_VALUE, SLIDER_DEFAULT_STEP, SLIDER_ON_CHANGE, SLIDER_ON_VALUE_CHANGE, SLIDER_ON_SLIDING_START, SLIDER_ON_SLIDING_COMPLETE, SLIDER_ON_ACCESSIBILITY_ACTION, } from '../../core/index.js';
13
13
  function isRecord(value) {
14
14
  return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -23,14 +23,17 @@ function asBoolean(value) {
23
23
  return typeof value === 'boolean' ? value : undefined;
24
24
  }
25
25
  function isImageSourceProp(value) {
26
- return typeof value === 'number' || (typeof value === 'object' && value !== null);
26
+ return (typeof value === 'number' || (typeof value === 'object' && value !== null));
27
27
  }
28
28
  // accessibilityState arrives untyped; narrow its disabled flag for the fold while preserving the
29
29
  // other entries at runtime (the resolve spread carries them onto the native node).
30
30
  function asAccessibilityState(value) {
31
31
  if (!isRecord(value))
32
32
  return undefined;
33
- return { ...value, disabled: typeof value.disabled === 'boolean' ? value.disabled : undefined };
33
+ return {
34
+ ...value,
35
+ disabled: typeof value.disabled === 'boolean' ? value.disabled : undefined,
36
+ };
34
37
  }
35
38
  // The props/handlers the lifecycle consumes itself; everything else (the track tints + images,
36
39
  // thumbSize, tapToSeek, vertical, accessibility*/testID/aria-*) forwards onto the native node.
@@ -233,7 +236,10 @@ function renderCustomStepsOverlay(params) {
233
236
  if (marker !== undefined)
234
237
  trackChildren.push(h('symbiote-view', {}, marker));
235
238
  if (isImageSourceProp(params.thumbImage) && value === params.currentValue) {
236
- trackChildren.push(h('symbiote-view', { style: THUMB_IMAGE_CONTAINER_STYLE, testID: 'sliderTrackMark-thumbImage' }, [h(Image, { source: params.thumbImage, style: THUMB_IMAGE_STYLE })]));
239
+ trackChildren.push(h('symbiote-view', {
240
+ style: THUMB_IMAGE_CONTAINER_STYLE,
241
+ testID: 'sliderTrackMark-thumbImage',
242
+ }, [h(Image, { source: params.thumbImage, style: THUMB_IMAGE_STYLE })]));
237
243
  }
238
244
  const cellChildren = [
239
245
  h('symbiote-view', { style: TRACK_MARK_CONTAINER_STYLE }, trackChildren),
@@ -14,7 +14,13 @@ export class Slider extends SliderBase {
14
14
  stepsContainerTop: ANDROID_STEPS_CONTAINER_TOP,
15
15
  };
16
16
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: Slider, deps: null, target: i0.ɵɵFactoryTarget.Component });
17
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: Slider, isStandalone: true, selector: "Slider", providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Slider), multi: true }], usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: Slider, isStandalone: true, selector: "Slider", providers: [
18
+ {
19
+ provide: NG_VALUE_ACCESSOR,
20
+ useExisting: forwardRef(() => Slider),
21
+ multi: true,
22
+ },
23
+ ], usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
24
  }
19
25
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: Slider, decorators: [{
20
26
  type: Component,
@@ -23,7 +29,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
23
29
  standalone: true,
24
30
  imports: [DescriptorOutlet],
25
31
  changeDetection: ChangeDetectionStrategy.OnPush,
26
- providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Slider), multi: true }],
32
+ providers: [
33
+ {
34
+ provide: NG_VALUE_ACCESSOR,
35
+ useExisting: forwardRef(() => Slider),
36
+ multi: true,
37
+ },
38
+ ],
27
39
  template: `<symbiote-descriptor-outlet [node]="descriptor" />`,
28
40
  }]
29
41
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../src/angular/slider/index.android.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mGAAmG;AAEnG,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;;AAG5D,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAUtC,MAAM,OAAO,MAAO,SAAQ,UAAU;IACjB,QAAQ,GAAG;QAC5B,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,8BAA8B;QAC9C,iBAAiB,EAAE,2BAA2B;KAC/C,CAAC;uGALS,MAAM;2FAAN,MAAM,qDAHN,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,iDACrF,oDAAoD,4DAHpD,gBAAgB;;2FAKf,MAAM;kBARlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC/F,QAAQ,EAAE,oDAAoD;iBAC/D"}
1
+ {"version":3,"file":"index.android.js","sourceRoot":"","sources":["../../../src/angular/slider/index.android.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mGAAmG;AAEnG,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;;AAG5D,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAgBtC,MAAM,OAAO,MAAO,SAAQ,UAAU;IACjB,QAAQ,GAAG;QAC5B,YAAY,EAAE,EAAE;QAChB,cAAc,EAAE,8BAA8B;QAC9C,iBAAiB,EAAE,2BAA2B;KAC/C,CAAC;uGALS,MAAM;2FAAN,MAAM,qDATN;YACT;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,IAAI;aACZ;SACF,iDACS,oDAAoD,4DATpD,gBAAgB;;2FAWf,MAAM;kBAdlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;4BACrC,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,QAAQ,EAAE,oDAAoD;iBAC/D"}
@@ -5,7 +5,7 @@ import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';
5
5
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
6
6
  import { DescriptorOutlet } from '@symbiote-native/angular';
7
7
  import { SliderBase } from './shared';
8
- import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS } from '../../core';
8
+ import { SLIDER_IOS_DEFAULT_HEIGHT, SLIDER_STEP_RESOLUTION_IOS, } from '../../core';
9
9
  import * as i0 from "@angular/core";
10
10
  const IOS_STEPS_CONTAINER_TOP = 10;
11
11
  export class Slider extends SliderBase {
@@ -15,7 +15,13 @@ export class Slider extends SliderBase {
15
15
  stepsContainerTop: IOS_STEPS_CONTAINER_TOP,
16
16
  };
17
17
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: Slider, deps: null, target: i0.ɵɵFactoryTarget.Component });
18
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: Slider, isStandalone: true, selector: "Slider", providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Slider), multi: true }], usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: Slider, isStandalone: true, selector: "Slider", providers: [
19
+ {
20
+ provide: NG_VALUE_ACCESSOR,
21
+ useExisting: forwardRef(() => Slider),
22
+ multi: true,
23
+ },
24
+ ], usesInheritance: true, ngImport: i0, template: `<symbiote-descriptor-outlet [node]="descriptor" />`, isInline: true, dependencies: [{ kind: "component", type: DescriptorOutlet, selector: "symbiote-descriptor-outlet", inputs: ["node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19
25
  }
20
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: Slider, decorators: [{
21
27
  type: Component,
@@ -24,7 +30,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
24
30
  standalone: true,
25
31
  imports: [DescriptorOutlet],
26
32
  changeDetection: ChangeDetectionStrategy.OnPush,
27
- providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Slider), multi: true }],
33
+ providers: [
34
+ {
35
+ provide: NG_VALUE_ACCESSOR,
36
+ useExisting: forwardRef(() => Slider),
37
+ multi: true,
38
+ },
39
+ ],
28
40
  template: `<symbiote-descriptor-outlet [node]="descriptor" />`,
29
41
  }]
30
42
  }] });
@@ -1 +1 @@
1
- {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../src/angular/slider/index.ios.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,0FAA0F;AAE1F,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;;AAGnF,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAUnC,MAAM,OAAO,MAAO,SAAQ,UAAU;IACjB,QAAQ,GAAG;QAC5B,YAAY,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;QACnD,cAAc,EAAE,0BAA0B;QAC1C,iBAAiB,EAAE,uBAAuB;KAC3C,CAAC;uGALS,MAAM;2FAAN,MAAM,qDAHN,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,iDACrF,oDAAoD,4DAHpD,gBAAgB;;2FAKf,MAAM;kBARlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;oBAC/F,QAAQ,EAAE,oDAAoD;iBAC/D"}
1
+ {"version":3,"file":"index.ios.js","sourceRoot":"","sources":["../../../src/angular/slider/index.ios.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,iGAAiG;AACjG,0FAA0F;AAE1F,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,YAAY,CAAC;;AAGpB,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAgBnC,MAAM,OAAO,MAAO,SAAQ,UAAU;IACjB,QAAQ,GAAG;QAC5B,YAAY,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;QACnD,cAAc,EAAE,0BAA0B;QAC1C,iBAAiB,EAAE,uBAAuB;KAC3C,CAAC;uGALS,MAAM;2FAAN,MAAM,qDATN;YACT;gBACE,OAAO,EAAE,iBAAiB;gBAC1B,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,IAAI;aACZ;SACF,iDACS,oDAAoD,4DATpD,gBAAgB;;2FAWf,MAAM;kBAdlB,SAAS;mBAAC;oBACT,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,gBAAgB,CAAC;oBAC3B,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;4BACrC,KAAK,EAAE,IAAI;yBACZ;qBACF;oBACD,QAAQ,EAAE,oDAAoD;iBAC/D"}
@@ -294,7 +294,10 @@ export class SliderBase {
294
294
  inverted,
295
295
  platform: this.platform,
296
296
  });
297
- return renderSlider(view, this.platform, { steps, onLayout: this.handleLayout });
297
+ return renderSlider(view, this.platform, {
298
+ steps,
299
+ onLayout: this.handleLayout,
300
+ });
298
301
  }
299
302
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: SliderBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
300
303
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: SliderBase, isStandalone: true, inputs: { value: "value", minimumValue: "minimumValue", maximumValue: "maximumValue", step: "step", lowerLimit: "lowerLimit", upperLimit: "upperLimit", minimumTrackTintColor: "minimumTrackTintColor", maximumTrackTintColor: "maximumTrackTintColor", thumbTintColor: "thumbTintColor", disabled: "disabled", inverted: "inverted", tapToSeek: "tapToSeek", vertical: "vertical", thumbImage: "thumbImage", minimumTrackImage: "minimumTrackImage", maximumTrackImage: "maximumTrackImage", trackImage: "trackImage", thumbSize: "thumbSize", accessibilityUnits: "accessibilityUnits", accessibilityIncrements: "accessibilityIncrements", renderStepNumber: "renderStepNumber", testID: "testID", style: "style", nativeID: "nativeID", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", onAccessibilityTap: "onAccessibilityTap", onMagicTap: "onMagicTap", onAccessibilityEscape: "onAccessibilityEscape", role: "role", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLive: ["aria-live", "ariaLive"], ariaHidden: ["aria-hidden", "ariaHidden"], ariaBusy: ["aria-busy", "ariaBusy"], ariaChecked: ["aria-checked", "ariaChecked"], ariaDisabled: ["aria-disabled", "ariaDisabled"], ariaExpanded: ["aria-expanded", "ariaExpanded"], ariaSelected: ["aria-selected", "ariaSelected"], ariaModal: ["aria-modal", "ariaModal"], ariaValueMax: ["aria-valuemax", "ariaValueMax"], ariaValueMin: ["aria-valuemin", "ariaValueMin"], ariaValueNow: ["aria-valuenow", "ariaValueNow"], ariaValueText: ["aria-valuetext", "ariaValueText"] }, outputs: { valueChange: "valueChange", slidingStart: "slidingStart", slidingComplete: "slidingComplete", accessibilityAction: "accessibilityAction" }, usesOnChanges: true, ngImport: i0 });