function InputNumber(
range = [0, 10],
{
step = 1,
value = 0,
label = "",
pattern = "[0-9]*.?[0-9]{0,2}",
format = (_) => parseFloat(_).toFixed(2),
inputStyle = "margin-left: 5px;"
} = {}
) {
const [min, max] = range;
const input = htl.html`<input
type=${isMobile() ? "text" : "number"}
style=${inputStyle}
inputmode="decimal"
pattern="${pattern}"
placeholder="${min}"
min=${min}
max=${max}
step=${step}
value=${value}
name="min"></input>`;
const widget = ReactiveWidget(htl.html`<label>${label}${input}</label>`, {
value,
showValue
});
function showValue() {
console.log("🔢 input show Value", widget.value, input.value);
}
input.addEventListener("blur", function (evt) {
evt.stopPropagation();
evt.preventDefault();
if (this.value !== undefined && !isNaN(parseFloat(this.value))) {
this.value = format(this.value);
}
});
input.addEventListener("input", (evt) => {
console.log("input", input.value);
if (input.value !== undefined && !isNaN(parseFloat(input.value))) {
console.log("✅ input setting", input.value);
evt.stopPropagation();
widget.setValue(+input.value);
}
});
return widget;
}