nebius/SWE-bench-extra huggingface dataset:
Repository: gradio-app/gradio

Issue:
Dropdown is disabled when created with blocks
### Describe the bug

Hi,
Tried creating gradio app with blocks, Dropdown was disabled after launch.


### Is there an existing issue for this?

- [x] I have searched the existing issues

### Reproduction

```
import gradio as gr

demo = gr.Blocks()

with demo:
    with gr.Tabs():
        with gr.TabItem("Record Video"):
        
            with gr.Row():
                inp1=gr.inputs.Video(source="webcam",optional=False,label='Capture Video')
                inp2=gr.inputs.Video(source="webcam",optional=False,label='Capture Video')
            with gr.Row():
                subject_id = gr.inputs.Dropdown(["cat", "dog", "bird"])
    
        
demo.launch()
```

### Screenshot

<img width="1283" alt="image" src="https://user-images.githubusercontent.com/102731859/173801150-712bc70e-479a-456e-a12b-7e0bb293bdf5.png">
<img width="915" alt="image" src="https://user-images.githubusercontent.com/102731859/173801336-8f571c6d-026e-457e-8269-192f5d4ecc4d.png">


### Logs

```shell
NA
```


### System Info

```shell
Browser: Chrome
Gradio Version: 3.0.17
```


### Severity

blocking all usage of gradio

Comments:

Patch:
diff --git a/gradio/components.py b/gradio/components.py
index f977fdca9..246016f70 100644
--- a/gradio/components.py
+++ b/gradio/components.py
@@ -1233,9 +1233,7 @@ class Radio(Changeable, IOComponent):
         Returns:
         (str): string of choice
         """
-        return (
-            y if y is not None else self.choices[0] if len(self.choices) > 0 else None
-        )
+        return y
 
     def deserialize(self, x):
         """
diff --git a/ui/packages/app/src/Blocks.svelte b/ui/packages/app/src/Blocks.svelte
index 752d9b5e4..0243e1548 100644
--- a/ui/packages/app/src/Blocks.svelte
+++ b/ui/packages/app/src/Blocks.svelte
@@ -119,12 +119,22 @@
 		const is_input = is_dep(id, "inputs", dependencies);
 		const is_output = is_dep(id, "outputs", dependencies);
 
-		if (!is_input && !is_output && !props.value) acc.add(id); // default dynamic
+		if (!is_input && !is_output && has_no_default_value(props.value))
+			acc.add(id); // default dynamic
 		if (is_input) acc.add(id);
 
 		return acc;
 	}, new Set());
 
+	function has_no_default_value(value: any) {
+		return (
+			(Array.isArray(value) && value.length === 0) ||
+			value === "" ||
+			value === 0 ||
+			!value
+		);
+	}
+
 	let instance_map = components.reduce((acc, next) => {
 		acc[next.id] = next;
 		return acc;


Test patch:
diff --git a/test/test_components.py b/test/test_components.py
index d0ff01735..049fdc3a5 100644
--- a/test/test_components.py
+++ b/test/test_components.py
@@ -537,7 +537,7 @@ class TestRadio(unittest.TestCase):
             radio_input.get_config(),
             {
                 "choices": ["a", "b", "c"],
-                "value": "a",
+                "value": None,
                 "name": "radio",
                 "show_label": True,
                 "label": "Pick Your One Input",