@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
1 lines • 3.5 kB
Source Map (JSON)
{"version":3,"sources":["../src/components/AmountInput.tsx"],"names":[],"mappings":";;;;AAUA,IAAM,cAAgC,CAAC;AAAA,EACrC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAY,GAAA,EAAA;AAAA,EACZ,QAAW,GAAA;AACb,CAAM,KAAA;AACJ,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AAEtD,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA4B,KAAA;AAClD,IAAI,IAAA,CAAC,QAAe,OAAA,IAAA;AAGpB,IAAA,IAAI,CAAC,aAAA,CAAc,IAAK,CAAA,MAAM,CAAG,EAAA;AAC/B,MAAO,OAAA,KAAA;AAAA;AAGT,IAAM,MAAA,YAAA,GAAe,WAAW,MAAM,CAAA;AAEtC,IAAI,IAAA,KAAA,CAAM,YAAY,CAAG,EAAA;AACvB,MAAO,OAAA,KAAA;AAAA;AAGT,IAAA,IAAI,eAAe,CAAG,EAAA;AACpB,MAAO,OAAA,KAAA;AAAA;AAGT,IAAO,OAAA,IAAA;AAAA,GACT;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,CAAqC,KAAA;AACzD,IAAA,MAAM,QAAW,GAAA,CAAA,CAAE,MAAO,CAAA,KAAA,CAAM,IAAK,EAAA;AACrC,IAAA,aAAA,CAAc,QAAQ,CAAA;AAGtB,IAAA,IAAI,CAAC,QAAU,EAAA;AACb,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA;AAAA;AAGF,IAAI,IAAA,CAAC,cAAe,CAAA,QAAQ,CAAG,EAAA;AAC7B,MAAA,QAAA,CAAS,gBAAgB,CAAA;AACzB,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA;AAAA;AAGF,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,GACnB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,GACrB,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,gBAAA,EAAmB,SAAS,CAC1C,CAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAK,EAAA,MAAA;AAAA,QACL,KAAO,EAAA,UAAA;AAAA,QACP,QAAU,EAAA,YAAA;AAAA,QACV,aAAa,WAAe,IAAA,kBAAA;AAAA,QAC5B,QAAA;AAAA,QACA,WAAW,CAAG,EAAA,KAAA,GAAQ,OAAU,GAAA,EAAE,IAAI,SAAS,CAAA;AAAA;AAAA,KACjD;AAAA,IACC,KAAA,oBAAU,GAAA,CAAA,MAAA,EAAA,EAAM,QAAM,EAAA,KAAA,EAAA;AAAA,GACzB,EAAA,CAAA;AAEJ,CAAA;AAEA,IAAO,mBAAQ,GAAA","file":"chunk-OTZWN3H4.mjs","sourcesContent":["import { ChangeEvent, FC, useEffect, useState } from 'react'\n\nexport interface IAmountInput {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n className?: string\n disabled?: boolean\n}\n\nconst AmountInput: FC<IAmountInput> = ({\n value,\n onChange,\n placeholder,\n className = '',\n disabled = false,\n}) => {\n const [inputValue, setInputValue] = useState(value)\n const [error, setError] = useState<string | null>(null)\n\n const validateAmount = (amount: string): boolean => {\n if (!amount) return true\n\n // Only allow numbers and decimal points\n if (!/^\\d*\\.?\\d*$/.test(amount)) {\n return false\n }\n\n const numericValue = parseFloat(amount)\n\n if (isNaN(numericValue)) {\n return false\n }\n\n if (numericValue < 0) {\n return false\n }\n\n return true\n }\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value.trim()\n setInputValue(newValue)\n\n // Allow empty input\n if (!newValue) {\n setError(null)\n onChange(newValue)\n return\n }\n\n if (!validateAmount(newValue)) {\n setError('Invalid amount')\n onChange(newValue)\n return\n }\n\n setError(null)\n onChange(newValue)\n }\n\n useEffect(() => {\n setInputValue(value)\n }, [value])\n\n return (\n <div className={`sk-amount-input ${className}`}>\n <input\n type=\"text\"\n value={inputValue}\n onChange={handleChange}\n placeholder={placeholder || 'Enter SUI amount'}\n disabled={disabled}\n className={`${error ? 'error' : ''} ${className}`}\n />\n {error && <span>{error}</span>}\n </div>\n )\n}\n\nexport default AmountInput\n"]}