fix(number-input): preserve '0.0x' format when typing (#6520)

This commit is contained in:
Roushan Singh 2025-09-19 11:36:06 +05:30
parent 6bd64409e8
commit ae2532d40d
2 changed files with 85 additions and 47 deletions

103
src-tauri/Cargo.lock generated
View File

@ -1030,9 +1030,9 @@ dependencies = [
[[package]]
name = "dlopen2"
version = "0.7.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6"
checksum = "b54f373ccf864bf587a89e880fb7610f8d73f3045f13580948ccbcaff26febff"
dependencies = [
"dlopen2_derive",
"libc",
@ -2946,6 +2946,16 @@ dependencies = [
"objc2-core-foundation",
]
[[package]]
name = "objc2-javascript-core"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9052cb1bb50a4c161d934befcf879526fb87ae9a68858f241e693ca46225cf5a"
dependencies = [
"objc2 0.6.1",
"objc2-core-foundation",
]
[[package]]
name = "objc2-metal"
version = "0.2.2"
@ -2994,6 +3004,17 @@ dependencies = [
"objc2-foundation 0.3.1",
]
[[package]]
name = "objc2-security"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1f8e0ef3ab66b08c42644dcb34dba6ec0a574bbd8adbb8bdbdc7a2779731a44"
dependencies = [
"bitflags 2.9.1",
"objc2 0.6.1",
"objc2-core-foundation",
]
[[package]]
name = "objc2-ui-kit"
version = "0.3.1"
@ -3018,6 +3039,8 @@ dependencies = [
"objc2-app-kit",
"objc2-core-foundation",
"objc2-foundation 0.3.1",
"objc2-javascript-core",
"objc2-security",
]
[[package]]
@ -4468,9 +4491,9 @@ dependencies = [
[[package]]
name = "serialize-to-javascript"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5"
dependencies = [
"serde",
"serde_json",
@ -4479,13 +4502,13 @@ dependencies = [
[[package]]
name = "serialize-to-javascript-impl"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
"syn 2.0.104",
]
[[package]]
@ -4869,11 +4892,12 @@ dependencies = [
[[package]]
name = "tao"
version = "0.34.0"
version = "0.34.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49c380ca75a231b87b6c9dd86948f035012e7171d1a7c40a9c2890489a7ffd8a"
checksum = "959469667dbcea91e5485fc48ba7dd6023face91bb0f1a14681a70f99847c3f7"
dependencies = [
"bitflags 2.9.1",
"block2 0.6.1",
"core-foundation 0.10.1",
"core-graphics",
"crossbeam-channel",
@ -4942,12 +4966,13 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]]
name = "tauri"
version = "2.7.0"
version = "2.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "352a4bc7bf6c25f5624227e3641adf475a6535707451b09bb83271df8b7a6ac7"
checksum = "d4d1d3b3dc4c101ac989fd7db77e045cc6d91a25349cd410455cb5c57d510c1c"
dependencies = [
"anyhow",
"bytes",
"cookie",
"dirs",
"dunce",
"embed_plist",
@ -4966,6 +4991,7 @@ dependencies = [
"objc2-app-kit",
"objc2-foundation 0.3.1",
"objc2-ui-kit",
"objc2-web-kit",
"percent-encoding",
"plist",
"raw-window-handle",
@ -4993,9 +5019,9 @@ dependencies = [
[[package]]
name = "tauri-build"
version = "2.3.1"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "182d688496c06bf08ea896459bf483eb29cdff35c1c4c115fb14053514303064"
checksum = "9c432ccc9ff661803dab74c6cd78de11026a578a9307610bbc39d3c55be7943f"
dependencies = [
"anyhow",
"cargo_toml",
@ -5009,15 +5035,15 @@ dependencies = [
"serde_json",
"tauri-utils",
"tauri-winres",
"toml 0.8.23",
"toml 0.9.5",
"walkdir",
]
[[package]]
name = "tauri-codegen"
version = "2.3.1"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b54a99a6cd8e01abcfa61508177e6096a4fe2681efecee9214e962f2f073ae4a"
checksum = "1ab3a62cf2e6253936a8b267c2e95839674e7439f104fa96ad0025e149d54d8a"
dependencies = [
"base64 0.22.1",
"ico",
@ -5041,9 +5067,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
version = "2.3.2"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7945b14dc45e23532f2ded6e120170bbdd4af5ceaa45784a6b33d250fbce3f9e"
checksum = "4368ea8094e7045217edb690f493b55b30caf9f3e61f79b4c24b6db91f07995e"
dependencies = [
"heck 0.5.0",
"proc-macro2",
@ -5055,9 +5081,9 @@ dependencies = [
[[package]]
name = "tauri-plugin"
version = "2.3.1"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bd5c1e56990c70a906ef67a9851bbdba9136d26075ee9a2b19c8b46986b3e02"
checksum = "9946a3cede302eac0c6eb6c6070ac47b1768e326092d32efbb91f21ed58d978f"
dependencies = [
"anyhow",
"glob",
@ -5066,17 +5092,18 @@ dependencies = [
"serde",
"serde_json",
"tauri-utils",
"toml 0.8.23",
"toml 0.9.5",
"walkdir",
]
[[package]]
name = "tauri-plugin-deep-link"
version = "2.4.1"
version = "2.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fec67f32d7a06d80bd3dc009fdb678c35a66116d9cb8cd2bb32e406c2b5bbd2"
checksum = "cd67112fb1131834c2a7398ffcba520dbbf62c17de3b10329acd1a3554b1a9bb"
dependencies = [
"dunce",
"plist",
"rust-ini",
"serde",
"serde_json",
@ -5237,9 +5264,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-os"
version = "2.3.0"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05bccb4c6de4299beec5a9b070878a01bce9e2c945aa7a75bcea38bcba4c675d"
checksum = "77a1c77ebf6f20417ab2a74e8c310820ba52151406d0c80fbcea7df232e3f6ba"
dependencies = [
"gethostname",
"log",
@ -5276,9 +5303,9 @@ dependencies = [
[[package]]
name = "tauri-plugin-single-instance"
version = "2.3.2"
version = "2.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50a0e5a4ce43cb3a733c3aef85e8478bc769dac743c615e26639cbf5d953faf7"
checksum = "fb9cac815bf11c4a80fb498666bcdad66d65b89e3ae24669e47806febb76389c"
dependencies = [
"serde",
"serde_json",
@ -5340,9 +5367,9 @@ dependencies = [
[[package]]
name = "tauri-runtime"
version = "2.7.1"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b1cc885be806ea15ff7b0eb47098a7b16323d9228876afda329e34e2d6c4676"
checksum = "d4cfc9ad45b487d3fded5a4731a567872a4812e9552e3964161b08edabf93846"
dependencies = [
"cookie",
"dpi",
@ -5351,20 +5378,23 @@ dependencies = [
"jni",
"objc2 0.6.1",
"objc2-ui-kit",
"objc2-web-kit",
"raw-window-handle",
"serde",
"serde_json",
"tauri-utils",
"thiserror 2.0.12",
"url",
"webkit2gtk",
"webview2-com",
"windows 0.61.3",
]
[[package]]
name = "tauri-runtime-wry"
version = "2.7.2"
version = "2.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe653a2fbbef19fe898efc774bc52c8742576342a33d3d028c189b57eb1d2439"
checksum = "c1fe9d48bd122ff002064e88cfcd7027090d789c4302714e68fcccba0f4b7807"
dependencies = [
"gtk",
"http 1.3.1",
@ -5389,9 +5419,9 @@ dependencies = [
[[package]]
name = "tauri-utils"
version = "2.6.0"
version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330c15cabfe1d9f213478c9e8ec2b0c76dab26bb6f314b8ad1c8a568c1d186e"
checksum = "41a3852fdf9a4f8fbeaa63dc3e9a85284dd6ef7200751f0bd66ceee30c93f212"
dependencies = [
"anyhow",
"cargo_metadata",
@ -5417,7 +5447,7 @@ dependencies = [
"serde_with",
"swift-rs",
"thiserror 2.0.12",
"toml 0.8.23",
"toml 0.9.5",
"url",
"urlpattern",
"uuid",
@ -6921,14 +6951,15 @@ checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
[[package]]
name = "wry"
version = "0.52.1"
version = "0.53.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12a714d9ba7075aae04a6e50229d6109e3d584774b99a6a8c60de1698ca111b9"
checksum = "31f0e9642a0d061f6236c54ccae64c2722a7879ad4ec7dff59bd376d446d8e90"
dependencies = [
"base64 0.22.1",
"block2 0.6.1",
"cookie",
"crossbeam-channel",
"dirs",
"dpi",
"dunce",
"gdkx11",

View File

@ -63,7 +63,7 @@ export default function AddEditAssistant({
const emojiPickerRef = useRef<HTMLDivElement>(null)
const emojiPickerTriggerRef = useRef<HTMLDivElement>(null)
const [nameError, setNameError] = useState<string | null>(null)
const [toolSteps, setToolSteps] = useState(20)
const [toolStepsInput, setToolStepsInput] = useState('20')
// Handle click outside emoji picker or trigger
useEffect(() => {
@ -95,7 +95,7 @@ export default function AddEditAssistant({
setDescription(initialData.description)
setInstructions(initialData.instructions)
setShowEmojiPicker(false)
setToolSteps(initialData.tool_steps ?? 20)
setToolStepsInput(String(initialData.tool_steps ?? 20))
// Convert parameters object to arrays of keys and values
const keys = Object.keys(initialData.parameters || {})
@ -128,7 +128,7 @@ export default function AddEditAssistant({
setParamsTypes(['string'])
setNameError(null)
setShowEmojiPicker(false)
setToolSteps(20)
setToolStepsInput('20')
}
const handleParameterChange = (
@ -145,7 +145,8 @@ export default function AddEditAssistant({
// Convert value based on parameter type
if (paramsTypes[index] === 'number' && typeof value === 'string') {
newValues[index] = value === '' ? '' : Number(value)
// Preserve raw string while typing (e.g., "0."), convert on save
newValues[index] = value
} else if (
paramsTypes[index] === 'boolean' &&
typeof value === 'boolean'
@ -212,11 +213,17 @@ export default function AddEditAssistant({
// Convert parameters arrays to object
const parameters: Record<string, unknown> = {}
paramsKeys.forEach((key, index) => {
if (key) {
parameters[key] = paramsValues[index]
if (!key) return
const value = paramsValues[index]
if (paramsTypes[index] === 'number') {
const parsed = Number(value as string)
parameters[key] = isNaN(parsed) ? 0 : parsed
} else {
parameters[key] = value
}
})
const parsedToolSteps = Number(toolStepsInput)
const assistant: Assistant = {
avatar,
id: initialData?.id || Math.random().toString(36).substring(7),
@ -225,7 +232,7 @@ export default function AddEditAssistant({
description,
instructions,
parameters: parameters || {},
tool_steps: toolSteps,
tool_steps: isNaN(parsedToolSteps) ? 20 : parsedToolSteps,
}
onSave(assistant)
onOpenChange(false)
@ -350,13 +357,12 @@ export default function AddEditAssistant({
<p className="text-sm">{t('assistants:maxToolSteps')}</p>
</div>
<Input
value={toolSteps}
value={toolStepsInput}
type="number"
min={0}
step="any"
onChange={(e) => {
const newSteps = e.target.value
const stepNumber = Number(newSteps)
setToolSteps(isNaN(stepNumber) ? 20 : stepNumber)
setToolStepsInput(e.target.value)
}}
placeholder="20"
className="w-18 text-right"
@ -552,6 +558,7 @@ export default function AddEditAssistant({
handleParameterChange(index, e.target.value, 'value')
}
type={paramsTypes[index] === 'number' ? 'number' : 'text'}
step={paramsTypes[index] === 'number' ? 'any' : undefined}
placeholder={t('assistants:value')}
className="sm:flex-1 h-[36px] w-full"
/>