Компоненты с дискретными значениями в Carbon
Components Svelte позволяют пользователям выбирать конкретные
фиксированные значения вместо произвольного диапазона. Основными
примерами являются Slider и Dropdown, где шаги
(step) и дискретные значения критически важны для точного контроля
пользовательского ввода.
Слайдер (Slider) поддерживает свойство
step, определяющее величину изменения значения при
перемещении ползунка. Без явного указания step слайдер
интерпретирует любое значение в диапазоне как допустимое, что не всегда
подходит для дискретного выбора.
Пример с шагами:
<script>
import { Slider } from 'carbon-components-svelte';
let volume = 50;
</script>
<Slider
bind:value={volume}
min={0}
max={100}
step={10}
labelText="Громкость"
showInput
/>
Ключевые моменты:
min и max задают диапазон допустимых
значений.step={10} ограничивает ползунок дискретными значениями:
0, 10, 20 … 100.bind:value обеспечивает реактивную синхронизацию
состояния с переменной volume.showInput позволяет пользователю вводить значение
вручную, при этом соблюдая шаги.Для выбора из фиксированного набора значений идеально подходит
компонент Dropdown. Каждый элемент списка можно
интерпретировать как дискретное значение.
<script>
import { Dropdown } from 'carbon-components-svelte';
let selectedOption = null;
const options = [
{ id: '1', label: 'Низкий' },
{ id: '2', label: 'Средний' },
{ id: '3', label: 'Высокий' }
];
</script>
<Dropdown
bind:value={selectedOption}
items={options}
label="Приоритет"
itemToString={(item) => (item ? item.label : '')}
/>
Особенности:
items задаёт массив объектов с уникальными
id и текстовым label.itemToString конвертирует объект в отображаемое
значение.bind:value позволяет легко работать с
выбранным элементом в логике приложения.Часто требуется комбинировать слайдер с заранее определёнными дискретными значениями, аналогичными элементам dropdown. Для этого можно использовать массив допустимых значений и на основе индекса управлять ползунком.
<script>
import { Slider } from 'carbon-components-svelte';
let levels = [0, 25, 50, 75, 100];
let selectedIndex = 2;
$: selectedValue = levels[selectedIndex];
</script>
<Slider
bind:value={selectedIndex}
min={0}
max={levels.length - 1}
step={1}
labelText="Уровень"
showInput
/>
<p>Выбранный уровень: {selectedValue}</p>
Разбор механизма:
levels.step={1} обеспечивает выбор только существующих
дискретных уровней.$: selectedValue = levels[selectedIndex] преобразует индекс
в реальное значение.В Slider можно визуально показать шаги с помощью
свойства stepLabels или ticks. Для Svelte
версии библиотеки часто создаются кастомные отметки:
<script>
import { Slider } from 'carbon-components-svelte';
let values = [0, 25, 50, 75, 100];
</script>
<Slider
min={0}
max={values.length - 1}
step={1}
labelText="Дискретные значения"
showInput
>
<div slot="tickLabels">
{#each values as val, idx}
<span style="position:absolute; left:{(idx/(values.length-1))*100}%">{val}</span>
{/each}
</div>
</Slider>
Ключевые детали:
slot="tickLabels" используется для отображения
кастомных отметок.showInput, чтобы пользователь мог
вводить только допустимые значения.Иногда шаги необходимо применять к числовым полям
(NumberInput) для контроля ввода:
<script>
import { NumberInput } from 'carbon-components-svelte';
let quantity = 0;
</script>
<NumberInput
bind:value={quantity}
min={0}
max={100}
step={5}
label="Количество"
/>
step={5} предотвращает ввод значений, не кратных
5.step управляет дискретностью в Slider и
NumberInput.Dropdown идеально подходит для выбора среди
фиксированных опций.tickLabels) помогают пользователю
понимать доступные дискретные значения.Этот подход обеспечивает точность пользовательского ввода и повышает удобство работы с компонентами Carbon Components Svelte, особенно когда важны фиксированные уровни, интервалы или заранее определённые варианты.