From b33eb5c64036203946fa54d59d5d53edb7cad3a5 Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 10 Jun 2026 13:02:32 -0700 Subject: [PATCH 1/3] Update changelogs for reflex-components-{core,radix} 0.9.5 --- packages/reflex-components-core/CHANGELOG.md | 9 +++++++++ packages/reflex-components-core/news/6301.feature.md | 1 - packages/reflex-components-core/news/6447.misc.md | 1 - packages/reflex-components-radix/CHANGELOG.md | 7 +++++++ packages/reflex-components-radix/news/6301.misc.md | 1 - 5 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 packages/reflex-components-core/CHANGELOG.md delete mode 100644 packages/reflex-components-core/news/6301.feature.md delete mode 100644 packages/reflex-components-core/news/6447.misc.md delete mode 100644 packages/reflex-components-radix/news/6301.misc.md diff --git a/packages/reflex-components-core/CHANGELOG.md b/packages/reflex-components-core/CHANGELOG.md new file mode 100644 index 00000000000..38e8c0c1280 --- /dev/null +++ b/packages/reflex-components-core/CHANGELOG.md @@ -0,0 +1,9 @@ +## v0.9.5 (2026-06-10) + +### Features + +- `Form` now validates statically-knowable fields against a `TypedDict`-annotated `on_submit` handler at create time: it walks nested form controls (including components nested in props), collects their static `name`/`id` values, and raises `EventHandlerValueError` listing the missing and present fields when a required `TypedDict` field has no matching control. `input`, `select`, and `textarea` are marked as form controls so their identifiers are collected, and required-field resolution honors `NotRequired` across Python 3.10 and 3.11+. The `on_submit` handler signature also accepts a mapping-style payload via `on_submit_mapping_event`. ([#6301](https://github.com/reflex-dev/reflex/issues/6301)) + +### Miscellaneous + +- The connection-error banner now subscribes only to the dedicated `CONNECT_ERRORS` hook instead of the shared events hook, and the upload component declares its `UploadFilesProvider` through `VarData.app_wraps` rather than `Upload._get_app_wrap_components`. ([#6447](https://github.com/reflex-dev/reflex/issues/6447)) diff --git a/packages/reflex-components-core/news/6301.feature.md b/packages/reflex-components-core/news/6301.feature.md deleted file mode 100644 index daf1d172ea8..00000000000 --- a/packages/reflex-components-core/news/6301.feature.md +++ /dev/null @@ -1 +0,0 @@ -`Form` now validates statically-knowable fields against a `TypedDict`-annotated `on_submit` handler at create time: it walks nested form controls (including components nested in props), collects their static `name`/`id` values, and raises `EventHandlerValueError` listing the missing and present fields when a required `TypedDict` field has no matching control. `input`, `select`, and `textarea` are marked as form controls so their identifiers are collected, and required-field resolution honors `NotRequired` across Python 3.10 and 3.11+. The `on_submit` handler signature also accepts a mapping-style payload via `on_submit_mapping_event`. diff --git a/packages/reflex-components-core/news/6447.misc.md b/packages/reflex-components-core/news/6447.misc.md deleted file mode 100644 index cb64015d0e8..00000000000 --- a/packages/reflex-components-core/news/6447.misc.md +++ /dev/null @@ -1 +0,0 @@ -The connection-error banner now subscribes only to the dedicated `CONNECT_ERRORS` hook instead of the shared events hook, and the upload component declares its `UploadFilesProvider` through `VarData.app_wraps` rather than `Upload._get_app_wrap_components`. diff --git a/packages/reflex-components-radix/CHANGELOG.md b/packages/reflex-components-radix/CHANGELOG.md index c0587ee025e..84fda97429b 100644 --- a/packages/reflex-components-radix/CHANGELOG.md +++ b/packages/reflex-components-radix/CHANGELOG.md @@ -1,3 +1,10 @@ +## v0.9.5 (2026-06-10) + +### Miscellaneous + +- Mark the Radix form controls — checkbox, checkbox group, radio group, radio cards, select, switch, and both sliders — with `_is_form_control` so their static `name`/`id` is collected when a form validates its fields against a `TypedDict`-annotated `on_submit` handler. ([#6301](https://github.com/reflex-dev/reflex/issues/6301)) + + ## v0.9.4 (2026-06-03) No significant changes. diff --git a/packages/reflex-components-radix/news/6301.misc.md b/packages/reflex-components-radix/news/6301.misc.md deleted file mode 100644 index df0f9faf3de..00000000000 --- a/packages/reflex-components-radix/news/6301.misc.md +++ /dev/null @@ -1 +0,0 @@ -Mark the Radix form controls — checkbox, checkbox group, radio group, radio cards, select, switch, and both sliders — with `_is_form_control` so their static `name`/`id` is collected when a form validates its fields against a `TypedDict`-annotated `on_submit` handler. From 98fd084d74060264c8b1b6810049d9d39e67563b Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 10 Jun 2026 13:02:56 -0700 Subject: [PATCH 2/3] Update deps to released reflex-base >= 0.9.5 --- packages/reflex-components-core/pyproject.toml | 2 +- packages/reflex-components-radix/pyproject.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/reflex-components-core/pyproject.toml b/packages/reflex-components-core/pyproject.toml index aac2ed49b02..54e72c9625b 100644 --- a/packages/reflex-components-core/pyproject.toml +++ b/packages/reflex-components-core/pyproject.toml @@ -8,7 +8,7 @@ authors = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }] maintainers = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }] requires-python = ">=3.10" dependencies = [ - "reflex-base >= 0.9.4.post23.dev0", + "reflex-base >= 0.9.5", "reflex-components-lucide >= 0.9.0", "reflex-components-sonner >= 0.9.0", "python_multipart >= 0.0.21", diff --git a/packages/reflex-components-radix/pyproject.toml b/packages/reflex-components-radix/pyproject.toml index bfc2e97c9fd..4a7ab05b751 100644 --- a/packages/reflex-components-radix/pyproject.toml +++ b/packages/reflex-components-radix/pyproject.toml @@ -8,7 +8,7 @@ authors = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }] maintainers = [{ name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" }] requires-python = ">=3.10" dependencies = [ - "reflex-base >= 0.9.4.post23.dev0", + "reflex-base >= 0.9.5", "reflex-components-core >= 0.9.0", "reflex-components-lucide >= 0.9.0", ] From 5b5215aa78d00de87cce8490903f82b68e06cdbb Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 10 Jun 2026 13:07:26 -0700 Subject: [PATCH 3/3] bump reflex -> reflex-base >= 0.9.5 this is purely for internal consistency, the released version strictly pins the same reflex-base version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 525ef5332f5..449a8d861e2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ dependencies = [ "starlette >=0.47.0", "typing_extensions >=4.13.0", "wrapt >=1.17.0,<3.0", - "reflex-base >= 0.9.4", + "reflex-base >= 0.9.5", "reflex-components-code >= 0.9.0", "reflex-components-core >= 0.9.0", "reflex-components-dataeditor >= 0.9.0",