feat(tgu-ui): Shift+клик ближе к якорю сжимает выделение полосы

This commit is contained in:
Дмитрий Соловьев
2026-06-17 10:20:19 +03:00
parent b092e50dd8
commit 61a2c92d28
3 changed files with 28 additions and 8 deletions
@@ -40,15 +40,17 @@ export function selectionAfterCheck(
}
/**
* Новое множество выбора после жеста «полоса от первого к последнему»: добавляет всех членов
* полосы между fromKey и toKey включительно (в порядке времени). Это ВЫДЕЛЕНИЕ, не toggle
* существующий выбор сохраняется. Жест ограничен одной полосой: вызывающий передаёт members
* именно её (один КА, один крен, подряд по времени); граница полосы — гарантия «нельзя выделить
* не полосу». Если fromKey или toKey не из members — выбор не меняется (страховка). Вход не мутируется.
* Новое множество выбора после жеста «полоса от первого к последнему»: выбор полосы становится
* РОВНО диапазоном [fromKey..toKey] (в порядке времени). Члены полосы вне диапазона снимаются
* так Shift+клик по слоту ближе к якорю «сжимает» выделение. Выбор за пределами полосы (другие
* полосы/КА) сохраняется: снимаем/добавляем только ключи из members. Жест ограничен одной полосой:
* вызывающий передаёт members именно её (один КА, один крен, подряд по времени); граница полосы —
* гарантия «нельзя выделить не полосу». Если fromKey или toKey не из members — выбор не меняется
* (страховка). Вход не мутируется.
*
* @param current Текущее множество выбранных ключей.
* @param members Ключи членов полосы в порядке времени.
* @param fromKey Ключ первого клика (якорь).
* @param fromKey Ключ якоря (первый клик).
* @param toKey Ключ второго клика.
*/
export function selectStripRange(
@@ -63,7 +65,10 @@ export function selectStripRange(
if (from < 0 || to < 0) return next
const lo = Math.min(from, to)
const hi = Math.max(from, to)
for (let i = lo; i <= hi; i++) next.add(members[i]!)
members.forEach((key, i) => {
if (i >= lo && i <= hi) next.add(key)
else next.delete(key)
})
return next
}