@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
68 lines (65 loc) • 1.71 kB
JavaScript
;
var react = require('react');
var jsxRuntime = require('react/jsx-runtime');
// src/components/AmountInput.tsx
var AmountInput = ({
value,
onChange,
placeholder,
className = "",
disabled = false
}) => {
const [inputValue, setInputValue] = react.useState(value);
const [error, setError] = react.useState(null);
const validateAmount = (amount) => {
if (!amount) return true;
if (!/^\d*\.?\d*$/.test(amount)) {
return false;
}
const numericValue = parseFloat(amount);
if (isNaN(numericValue)) {
return false;
}
if (numericValue < 0) {
return false;
}
return true;
};
const handleChange = (e) => {
const newValue = e.target.value.trim();
setInputValue(newValue);
if (!newValue) {
setError(null);
onChange(newValue);
return;
}
if (!validateAmount(newValue)) {
setError("Invalid amount");
onChange(newValue);
return;
}
setError(null);
onChange(newValue);
};
react.useEffect(() => {
setInputValue(value);
}, [value]);
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `sk-amount-input ${className}`, children: [
/* @__PURE__ */ jsxRuntime.jsx(
"input",
{
type: "text",
value: inputValue,
onChange: handleChange,
placeholder: placeholder || "Enter SUI amount",
disabled,
className: `${error ? "error" : ""} ${className}`
}
),
error && /* @__PURE__ */ jsxRuntime.jsx("span", { children: error })
] });
};
var AmountInput_default = AmountInput;
module.exports = AmountInput_default;
//# sourceMappingURL=AmountInput.js.map
//# sourceMappingURL=AmountInput.js.map