export interface RangeInfo { min: number; step: number; max: number; } /** * Вычисляет границы и шаг диапазона слайдера из числовых значений `name` опций * (мин, макс по отсортированным числам; шаг 1 при наличии >1 значения, иначе 0). * Возвращает null, если числовых опций нет. * @param options - опции фильтра (поле `name` ожидается числовым) */ export function getSliderRangeInfo(options: { name: string }[]): RangeInfo | null { const numericValues = options .map(opt => Number(opt.name)) .filter(v => !isNaN(v)) .sort((a, b) => a - b); if (numericValues.length === 0) { return null; } const min = numericValues[0] || 0; const max = numericValues[numericValues.length - 1] || 100; const step = numericValues.length > 1 ? 1 : 0; return { min, step, max }; }