Через Modifier.clickable, combinedClickable, pointerInput + detectTapGestures/detectDragGestures, либо high-level swipeable/draggable.
Разбор
- clickable даёт ripple и a11y из коробки.
- pointerInput отменяется при смене key / уходе из composition.
- Конфликты жестов решают nested scroll и orientation.
- Не блокируйте UI-поток тяжёлой работой в gesture callbacks.
Итог
Жесты — модификаторы и pointerInput; выбирайте уровень абстракции под задачу.