{"version":3,"file":"NumberInputBox.jsx","names":["memo","useCallback","useState","TextBox","NumberInputBox","props","$","_c","value","setValue","onChangeParent","onChange","integerOnly","min","max","t0","v","value_0","replaceAll","numberValue","Number","undefined","isNaN","isFinite","isSafeInteger","t1","input","handler","e","content","data","inputType","startsWith","test","preventDefault","addEventListener","removeEventListener","t2","toString","t3","t4"],"sources":["../src/NumberInputBox.tsx"],"sourcesContent":["import { memo, useCallback, useState } from \"react\";\n\nimport TextBox, { type TextBoxProps } from \"./TextBox\";\n\nexport interface NumberInputBoxProps\n\textends Omit<\n\t\tTextBoxProps,\n\t\t\"inputMode\" | \"onChange\" | \"value\" | \"min\" | \"max\"\n\t> {\n\tvalue?: number | undefined;\n\tonChange?: (value: number | undefined) => void;\n\n\tmin?: number;\n\tmax?: number;\n\tintegerOnly?: boolean;\n\n\t// TODO:\n\t// startAdornment?: string;\n\t// endAdornment?: string;\n}\n\nexport default memo(function NumberInputBox(props: NumberInputBoxProps) {\n\tconst [value, setValue] = useState(\"\");\n\n\tconst onChangeParent = props.onChange;\n\tconst { integerOnly, min, max } = props;\n\n\tconst onChange = useCallback(\n\t\t(v: string) => {\n\t\t\tsetValue(v);\n\n\t\t\tconst value = v.replaceAll(/\\./g, \"\").replaceAll(\",\", \".\");\n\n\t\t\tconst numberValue = Number(value);\n\t\t\tif (\n\t\t\t\t(min !== undefined && numberValue < min) ||\n\t\t\t\t(max !== undefined && numberValue > max) ||\n\t\t\t\tNumber.isNaN(numberValue) ||\n\t\t\t\t!Number.isFinite(numberValue)\n\t\t\t) {\n\t\t\t\tonChangeParent?.(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (integerOnly && !Number.isSafeInteger(numberValue)) {\n\t\t\t\tonChangeParent?.(undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonChangeParent?.(numberValue);\n\t\t},\n\t\t[integerOnly, min, max, onChangeParent],\n\t);\n\n\treturn (\n\t\t<TextBox\n\t\t\tref={(input) => {\n\t\t\t\tif (!input) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst handler = (e: InputEvent) => {\n\t\t\t\t\tconst content = e.data;\n\t\t\t\t\tif (!content || !e.inputType.startsWith(\"insert\")) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(integerOnly && !/^[-0-9]*$/.test(content)) ||\n\t\t\t\t\t\t!/^[-0-9,]*$/.test(content)\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tinput.addEventListener(\"beforeinput\", handler);\n\t\t\t\treturn () => input.removeEventListener(\"beforeinput\", handler);\n\t\t\t}}\n\t\t\t{...props}\n\t\t\tmin={undefined}\n\t\t\tmax={undefined}\n\t\t\tonChange={onChange}\n\t\t\tvalue={value?.toString()}\n\t\t\tpattern={integerOnly ? \"[-0-9]*\" : \"[-0-9,]*\"}\n\t\t\tinputMode=\"numeric\"\n\t\t/>\n\t);\n});\n"],"mappings":";AAAA,SAASA,IAAI,EAAEC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AAEnD,OAAOC,OAAO,MAA6B,WAAW;AAmBtD,eAAeH,IAAI,CAAC,SAAAI,eAAAC,KAAA;EAAA,MAAAC,CAAA,GAAAC,EAAA;EACnB,OAAAC,KAAA,EAAAC,QAAA,IAA0BP,QAAA,CAAS,EAAE,CAAC;EAEtC,MAAAQ,cAAA,GAAuBL,KAAK,CAAAM,QAAA;EAC5B;IAAAC,WAAA;IAAAC,GAAA;IAAAC;EAAA,IAAkCT,KAAK;EAAC,IAAAU,EAAA;EAAA,IAAAT,CAAA,QAAAM,WAAA,IAAAN,CAAA,QAAAQ,GAAA,IAAAR,CAAA,QAAAO,GAAA,IAAAP,CAAA,QAAAI,cAAA;IAGvCK,EAAA,GAAAC,CAAA;MACCP,QAAQ,CAACO,CAAC,CAAC;MAEX,MAAAC,OAAA,GAAcD,CAAC,CAAAE,UAAA,QAAmB,EAAE,CAAC,CAAAA,UAAA,CAAY,GAAG,EAAE,GAAG,CAAC;MAE1D,MAAAC,WAAA,GAAoBC,MAAA,CAAOZ,OAAK,CAAC;MAAC,IAEhCK,GAAG,KAAAQ,SAAc,IAAIF,WAAW,GAAGN,GAAG,IACtCC,GAAG,KAAAO,SAAc,IAAIF,WAAW,GAAGL,GAAI,IACxCM,MAAA,CAAAE,KAAA,CAAaH,WAAW,CAAC,KACxBC,MAAA,CAAAG,QAAA,CAAgBJ,WAAW,CAAC;QAE7BT,cAAc,GAAAW,SAAA;QAAA;MAAA;MAAA,IAIXT,WAAW,KAAKQ,MAAA,CAAAI,aAAA,CAAqBL,WAAW,CAAC;QACpDT,cAAc,GAAAW,SAAA;QAAA;MAAA;MAIfX,cAAc,GAAGS,WAAW;IAAA;IAC5Bb,CAAA,MAAAM,WAAA;IAAAN,CAAA,MAAAQ,GAAA;IAAAR,CAAA,MAAAO,GAAA;IAAAP,CAAA,MAAAI,cAAA;IAAAJ,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAvBF,MAAAK,QAAA,GAAiBI,EAyBhB;EAAC,IAAAU,EAAA;EAAA,IAAAnB,CAAA,QAAAM,WAAA;IAIKa,EAAA,GAAAC,KAAA;MAAA,KACCA,KAAK;QAAA;MAAA;MAIV,MAAAC,OAAA,GAAAC,CAAA;QACC,MAAAC,OAAA,GAAgBD,CAAC,CAAAE,IAAA;QAAM,IACnB,CAACD,OAAO,KAAKD,CAAC,CAAAG,SAAA,CAAAC,UAAA,CAAsB,QAAQ,CAAC;UAAA;QAAA;QAAA,IAK/CpB,WAAW,KAAK,YAAAqB,IAAA,CAAiBJ,OAAO,CAAC,KACzC,aAAAI,IAAA,CAAkBJ,OAAO,CAAC;UAE3BD,CAAC,CAAAM,cAAA,CAAgB,CAAC;QAAA;MAAA;MAIpBR,KAAK,CAAAS,gBAAA,CAAkB,aAAa,EAAER,OAAO,CAAC;MAAA,aACjCD,KAAK,CAAAU,mBAAA,CAAqB,aAAa,EAAET,OAAO,CAAC;IAAA;IAC9DrB,CAAA,MAAAM,WAAA;IAAAN,CAAA,MAAAmB,EAAA;EAAA;IAAAA,EAAA,GAAAnB,CAAA;EAAA;EAAA,IAAA+B,EAAA;EAAA,IAAA/B,CAAA,QAAAE,KAAA;IAKM6B,EAAA,GAAA7B,KAAK,EAAA8B,QAAA;IAAYhC,CAAA,MAAAE,KAAA;IAAAF,CAAA,MAAA+B,EAAA;EAAA;IAAAA,EAAA,GAAA/B,CAAA;EAAA;EACf,MAAAiC,EAAA,GAAA3B,WAAW,GAAG,SAAS,GAAG,UAAU;EAAA,IAAA4B,EAAA;EAAA,IAAAlC,CAAA,QAAAK,QAAA,IAAAL,CAAA,SAAAD,KAAA,IAAAC,CAAA,SAAAmB,EAAA,IAAAnB,CAAA,SAAA+B,EAAA,IAAA/B,CAAA,SAAAiC,EAAA;IA5B9CC,EAAA,IAAC,OAAO,CACF,GAqBJ,CArBI,CAAAf,EAqBL,CAAC,KACGpB,KAAK,EACJgB,GAAS,CAATA,UAAQA,CAAC,CACTA,GAAS,CAATA,UAAQA,CAAC,CACJV,QAAQ,CAARA,SAAO,CAAC,CACX,KAAiB,CAAjB,CAAA0B,EAAgB,CAAC,CACf,OAAoC,CAApC,CAAAE,EAAmC,CAAC,CACnC,SAAS,CAAT,SAAS,GAClB;IAAAjC,CAAA,MAAAK,QAAA;IAAAL,CAAA,OAAAD,KAAA;IAAAC,CAAA,OAAAmB,EAAA;IAAAnB,CAAA,OAAA+B,EAAA;IAAA/B,CAAA,OAAAiC,EAAA;IAAAjC,CAAA,OAAAkC,EAAA;EAAA;IAAAA,EAAA,GAAAlC,CAAA;EAAA;EAAA,OA9BFkC,EA8BE;AAAA,CAEH,CAAC","ignoreList":[]}