From d63253e00d43a752c547ff0f85cc121305df297b Mon Sep 17 00:00:00 2001 From: AnnMarueW Date: Tue, 28 Jul 2026 15:47:10 -0700 Subject: [PATCH 1/4] Fix number input spinner when only min is set --- components/dash-core-components/src/components/Input.tsx | 2 +- .../tests/integration/input/test_number_input.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/components/dash-core-components/src/components/Input.tsx b/components/dash-core-components/src/components/Input.tsx index bcc08d3ca8..8b15db8299 100644 --- a/components/dash-core-components/src/components/Input.tsx +++ b/components/dash-core-components/src/components/Input.tsx @@ -194,7 +194,7 @@ function Input({ parseFloat(props.min as string) ); } - if (props.max !== null && props.min !== undefined) { + if (props.max !== null && props.max !== undefined) { constrainedValue = Math.min( constrainedValue, parseFloat(props.max as string) diff --git a/components/dash-core-components/tests/integration/input/test_number_input.py b/components/dash-core-components/tests/integration/input/test_number_input.py index 72d1d3ecad..b2d65cf5dc 100644 --- a/components/dash-core-components/tests/integration/input/test_number_input.py +++ b/components/dash-core-components/tests/integration/input/test_number_input.py @@ -258,13 +258,14 @@ def test_inni010_valid_numbers(dash_dcc, ninput_app): assert dash_dcc.get_logs() == [] -def test_inni011_min_max_bug(dash_dcc): - """Test that decrement increment button works correctly with min/max set to None.""" +@pytest.mark.parametrize("min", [None, 1]) +def test_inni011_min_max_bug(dash_dcc, min): + """Test that decrement increment button works correctly with min/max set to None or only min is set.""" app = Dash(__name__) app.layout = html.Div( [ - dcc.Input(id="number", value=17, type="number", min=None, max=None), + dcc.Input(id="number", value=17, type="number", min=min, max=None), html.Div(id="output"), ] ) @@ -282,3 +283,4 @@ def update_output(val): dash_dcc.wait_for_text_to_equal("#output", "16") assert dash_dcc.get_logs() == [] + From c18e7fb264938f4b23aa3db100c46ea46419fedf Mon Sep 17 00:00:00 2001 From: AnnMarueW Date: Tue, 28 Jul 2026 16:12:25 -0700 Subject: [PATCH 2/4] lint & changelog --- CHANGELOG.md | 1 + .../tests/integration/input/test_number_input.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc0af57c54..d3b77ae064 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](https://semver.org/). ### Fixed - [#3916](https://github.com/plotly/dash/pull/3916) Fixed a regression where dragging multiple files into `dcc.Upload` would upload only the first file when `multiple=True` +- [#3922](https://github.com/plotly/dash/pull/3922) Fix `dcc.Input(type="number")` stepper behavior when only `min` is set. ## [4.4.1] - 2026-07-21 diff --git a/components/dash-core-components/tests/integration/input/test_number_input.py b/components/dash-core-components/tests/integration/input/test_number_input.py index b2d65cf5dc..b9542e1891 100644 --- a/components/dash-core-components/tests/integration/input/test_number_input.py +++ b/components/dash-core-components/tests/integration/input/test_number_input.py @@ -283,4 +283,3 @@ def update_output(val): dash_dcc.wait_for_text_to_equal("#output", "16") assert dash_dcc.get_logs() == [] - From d8ed81fa1dac40b750eb24aa742fd79603ba3545 Mon Sep 17 00:00:00 2001 From: AnnMarueW Date: Tue, 28 Jul 2026 16:25:01 -0700 Subject: [PATCH 3/4] Replace deprecated onKeyPress with onKeyDown --- components/dash-core-components/src/components/Input.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/dash-core-components/src/components/Input.tsx b/components/dash-core-components/src/components/Input.tsx index 8b15db8299..fc92c7b516 100644 --- a/components/dash-core-components/src/components/Input.tsx +++ b/components/dash-core-components/src/components/Input.tsx @@ -128,7 +128,7 @@ function Input({ setValue(value); }, []); - const onKeyPress: KeyboardEventHandler = useCallback( + const onKeyDown: KeyboardEventHandler = useCallback( (e: KeyboardEvent) => { if (e.key === 'Enter') { props.setProps({ @@ -288,7 +288,7 @@ function Input({ className="dash-input-element" onBlur={onBlur} onChange={onChange} - onKeyPress={onKeyPress} + onKeyDown={onKeyDown} {...valprops} {...pickedInputs} {...loadingProps} From 0aeec683e3b41f0140b36cf3bf470d5833e1fc51 Mon Sep 17 00:00:00 2001 From: Ann Marie Ward <72614349+AnnMarieW@users.noreply.github.com> Date: Tue, 28 Jul 2026 16:30:34 -0700 Subject: [PATCH 4/4] Update components/dash-core-components/tests/integration/input/test_number_input.py Co-authored-by: Adrian Borrmann --- .../tests/integration/input/test_number_input.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/dash-core-components/tests/integration/input/test_number_input.py b/components/dash-core-components/tests/integration/input/test_number_input.py index b9542e1891..db6997c8cb 100644 --- a/components/dash-core-components/tests/integration/input/test_number_input.py +++ b/components/dash-core-components/tests/integration/input/test_number_input.py @@ -258,7 +258,7 @@ def test_inni010_valid_numbers(dash_dcc, ninput_app): assert dash_dcc.get_logs() == [] -@pytest.mark.parametrize("min", [None, 1]) +@pytest.mark.parametrize("min", [None, 0, 1]) def test_inni011_min_max_bug(dash_dcc, min): """Test that decrement increment button works correctly with min/max set to None or only min is set."""