- раз у тебя не UI либа, то
1) пишем модуль в который прокидываем массив инпутов при инициализации
2) тебе нужна общая функция, которая обновляет значения всех инпутов на массив значений
3) тебе нужна функция которой ты подпишешь событие onChange каждого инпута
4) далее функция обработчик, она должна принимать максимальное общее значение, объект {элемент: на сколько изменился}, объект {элемент: текущее значение}. тут уже идет бизнес логика того, как ты изменяешь. я бы предложил, что если изменяется в отрицательную сторону, то изменить только измененный элемент. Если в положительную, то тут берем число на которое изменился, делим его на кол-во элементов которые пользователь не изменял руками и вычитаем из их значения. если один из элементов дошел до отрицательного значение, то выставляем ему ноль, а получившееся значение мо модуюль используем в рекурсии данной функции. получившийся результат {элемент: значение отдаем на отрисовку}