diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb59ef3a8b..3226c679d1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,8 @@
## Bug Fixes:
-No changes to highlight.
+* The `.change()` event is fixed in `Video` and `Image` so that it only fires once by [@abidlabs](https://github.com/abidlabs) in [PR 4793](https://github.com/gradio-app/gradio/pull/4793)
+* The `.change()` event is fixed in `Audio` so that fires when the component value is programmatically updated by [@abidlabs](https://github.com/abidlabs) in [PR 4793](https://github.com/gradio-app/gradio/pull/4793)
## Other Changes:
diff --git a/demo/change_vs_input/files/cantina.wav b/demo/change_vs_input/files/cantina.wav
new file mode 100644
index 0000000000..41f0204384
Binary files /dev/null and b/demo/change_vs_input/files/cantina.wav differ
diff --git a/demo/change_vs_input/files/lion.jpg b/demo/change_vs_input/files/lion.jpg
new file mode 100644
index 0000000000..e9bf9f5d08
Binary files /dev/null and b/demo/change_vs_input/files/lion.jpg differ
diff --git a/demo/change_vs_input/files/world.mp4 b/demo/change_vs_input/files/world.mp4
new file mode 100644
index 0000000000..efdda67248
Binary files /dev/null and b/demo/change_vs_input/files/world.mp4 differ
diff --git a/demo/change_vs_input/run.ipynb b/demo/change_vs_input/run.ipynb
index 42b3d8b392..4fccd7df65 100644
--- a/demo/change_vs_input/run.ipynb
+++ b/demo/change_vs_input/run.ipynb
@@ -1 +1 @@
-{"cells": [{"cell_type": "markdown", "id": 302934307671667531413257853548643485645, "metadata": {}, "source": ["# Gradio Demo: change_vs_input"]}, {"cell_type": "code", "execution_count": null, "id": 272996653310673477252411125948039410165, "metadata": {}, "outputs": [], "source": ["!pip install -q gradio "]}, {"cell_type": "code", "execution_count": null, "id": 288918539441861185822528903084949547379, "metadata": {}, "outputs": [], "source": ["import gradio as gr\n", "\n", "with gr.Blocks() as demo:\n", " set_button = gr.Button(\"Set Values\")\n", " with gr.Row():\n", " with gr.Column():\n", " gr.Markdown(\"# Enter Here\")\n", " text = gr.Textbox()\n", " num = gr.Number()\n", " slider = gr.Slider()\n", " checkbox = gr.Checkbox()\n", " checkbox_group = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker = gr.ColorPicker()\n", " code = gr.Code()\n", " dataframe = gr.Dataframe()\n", "\n", " with gr.Column():\n", " gr.Markdown(\"# ON:INPUT\")\n", " text_in = gr.Textbox()\n", " num_in = gr.Number()\n", " slider_in = gr.Slider()\n", " checkbox_in = gr.Checkbox()\n", " checkbox_group_in = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio_in = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown_in = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker_in = gr.ColorPicker()\n", " code_in = gr.Code()\n", " dataframe_in = gr.Dataframe()\n", "\n", " with gr.Column():\n", " gr.Markdown(\"# ON:CHANGE\")\n", " text_ch = gr.Textbox()\n", " num_ch = gr.Number()\n", " slider_ch = gr.Slider()\n", " checkbox_ch = gr.Checkbox()\n", " checkbox_group_ch = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio_ch = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown_ch = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker_ch = gr.ColorPicker()\n", " code_ch = gr.Code()\n", " dataframe_ch = gr.Dataframe()\n", "\n", " set_button.click(\n", " lambda: [\"asdf\", 555, 12, True, [\"a\", \"c\"], \"b\", \"b\", \"#FF0000\", \"import gradio as gr\", [[\"a\", \"b\", \"c\", \"d\"], [\"1\", \"2\", \"3\", \"4\"]]], \n", " None, \n", " [text, num, slider, checkbox, checkbox_group, radio, dropdown, colorpicker, code, dataframe])\n", "\n", " text.input(lambda x:x, text, text_in)\n", " num.input(lambda x:x, num, num_in)\n", " slider.input(lambda x:x, slider, slider_in)\n", " checkbox.input(lambda x:x, checkbox, checkbox_in)\n", " checkbox_group.input(lambda x:x, checkbox_group, checkbox_group_in)\n", " radio.input(lambda x:x, radio, radio_in)\n", " dropdown.input(lambda x:x, dropdown, dropdown_in)\n", " colorpicker.input(lambda x:x, colorpicker, colorpicker_in)\n", " code.input(lambda x:x, code, code_in)\n", " dataframe.input(lambda x:x, dataframe, dataframe_in)\n", "\n", " text.change(lambda x:x, text, text_ch)\n", " num.change(lambda x:x, num, num_ch)\n", " slider.change(lambda x:x, slider, slider_ch)\n", " checkbox.change(lambda x:x, checkbox, checkbox_ch)\n", " checkbox_group.change(lambda x:x, checkbox_group, checkbox_group_ch)\n", " radio.change(lambda x:x, radio, radio_ch)\n", " dropdown.change(lambda x:x, dropdown, dropdown_ch)\n", " colorpicker.change(lambda x:x, colorpicker, colorpicker_ch)\n", " code.change(lambda x:x, code, code_ch)\n", " dataframe.change(lambda x:x, dataframe, dataframe_ch)\n", "\n", "if __name__ == \"__main__\":\n", " demo.launch()"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5}
\ No newline at end of file
+{"cells": [{"cell_type": "markdown", "id": 302934307671667531413257853548643485645, "metadata": {}, "source": ["# Gradio Demo: change_vs_input"]}, {"cell_type": "code", "execution_count": null, "id": 272996653310673477252411125948039410165, "metadata": {}, "outputs": [], "source": ["!pip install -q gradio "]}, {"cell_type": "code", "execution_count": null, "id": 288918539441861185822528903084949547379, "metadata": {}, "outputs": [], "source": ["# Downloading files from the demo repo\n", "import os\n", "os.mkdir('files')\n", "!wget -q -O files/cantina.wav https://github.com/gradio-app/gradio/raw/main/demo/change_vs_input/files/cantina.wav\n", "!wget -q -O files/lion.jpg https://github.com/gradio-app/gradio/raw/main/demo/change_vs_input/files/lion.jpg\n", "!wget -q -O files/world.mp4 https://github.com/gradio-app/gradio/raw/main/demo/change_vs_input/files/world.mp4"]}, {"cell_type": "code", "execution_count": null, "id": 44380577570523278879349135829904343037, "metadata": {}, "outputs": [], "source": ["import os\n", "import gradio as gr\n", "\n", "with gr.Blocks() as demo:\n", " set_button = gr.Button(\"Set Values\")\n", " with gr.Row():\n", " with gr.Column(min_width=200):\n", " gr.Markdown(\"# Enter Here\")\n", " text = gr.Textbox()\n", " num = gr.Number()\n", " slider = gr.Slider()\n", " checkbox = gr.Checkbox()\n", " checkbox_group = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker = gr.ColorPicker()\n", " code = gr.Code()\n", " dataframe = gr.Dataframe()\n", " image = gr.Image(elem_id=\"image-original\")\n", " audio = gr.Audio(elem_id=\"audio-original\")\n", " video = gr.Video(elem_id=\"video-original\")\n", "\n", " with gr.Column(min_width=200):\n", " gr.Markdown(\"# ON:INPUT/UPLOAD\")\n", " text_in = gr.Textbox()\n", " num_in = gr.Number()\n", " slider_in = gr.Slider()\n", " checkbox_in = gr.Checkbox()\n", " checkbox_group_in = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio_in = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown_in = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker_in = gr.ColorPicker()\n", " code_in = gr.Code()\n", " dataframe_in = gr.Dataframe()\n", " image_up = gr.Image(elem_id=\"image-upload\")\n", " audio_up = gr.Audio(elem_id=\"audio-upload\")\n", " video_up = gr.Video(elem_id=\"video-upload\")\n", "\n", " with gr.Column(min_width=200):\n", " gr.Markdown(\"# ON:CHANGE\")\n", " text_ch = gr.Textbox()\n", " num_ch = gr.Number()\n", " slider_ch = gr.Slider()\n", " checkbox_ch = gr.Checkbox()\n", " checkbox_group_ch = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio_ch = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown_ch = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker_ch = gr.ColorPicker()\n", " code_ch = gr.Code()\n", " dataframe_ch = gr.Dataframe()\n", " image_ch = gr.Image(elem_id=\"image-change\")\n", " audio_ch = gr.Audio(elem_id=\"audio-change\")\n", " video_ch = gr.Video(elem_id=\"video-change\")\n", "\n", " with gr.Column(min_width=200):\n", " gr.Markdown(\"# ON:CHANGE x2\")\n", " text_ch2 = gr.Textbox()\n", " num_ch2 = gr.Number()\n", " slider_ch2 = gr.Slider()\n", " checkbox_ch2 = gr.Checkbox()\n", " checkbox_group_ch2 = gr.CheckboxGroup([\"a\", \"b\", \"c\"])\n", " radio_ch2 = gr.Radio([\"a\", \"b\", \"c\"])\n", " dropdown_ch2 = gr.Dropdown([\"a\", \"b\", \"c\"])\n", " colorpicker_ch2 = gr.ColorPicker()\n", " code_ch2 = gr.Code()\n", " dataframe_ch2 = gr.Dataframe()\n", " image_ch2 = gr.Image(elem_id=\"image-change-2\")\n", " audio_ch2 = gr.Audio(elem_id=\"audio-change-2\")\n", " video_ch2 = gr.Video(elem_id=\"video-change-2\")\n", "\n", " counter = gr.Number(label=\"Change counter\")\n", "\n", " lion = os.path.join(os.path.abspath(''), \"files/lion.jpg\")\n", " cantina = os.path.join(os.path.abspath(''), \"files/cantina.wav\")\n", " world = os.path.join(os.path.abspath(''), \"files/world.mp4\")\n", "\n", " set_button.click(\n", " lambda: [\"asdf\", 555, 12, True, [\"a\", \"c\"], \"b\", \"b\", \"#FF0000\", \"import gradio as gr\", [[\"a\", \"b\", \"c\", \"d\"], [\"1\", \"2\", \"3\", \"4\"]], lion, cantina, world], \n", " None, \n", " [text, num, slider, checkbox, checkbox_group, radio, dropdown, colorpicker, code, dataframe, image, audio, video])\n", "\n", " text.input(lambda x:x, text, text_in)\n", " num.input(lambda x:x, num, num_in)\n", " slider.input(lambda x:x, slider, slider_in)\n", " checkbox.input(lambda x:x, checkbox, checkbox_in)\n", " checkbox_group.input(lambda x:x, checkbox_group, checkbox_group_in)\n", " radio.input(lambda x:x, radio, radio_in)\n", " dropdown.input(lambda x:x, dropdown, dropdown_in)\n", " colorpicker.input(lambda x:x, colorpicker, colorpicker_in)\n", " code.input(lambda x:x, code, code_in)\n", " dataframe.input(lambda x:x, dataframe, dataframe_in)\n", " image.upload(lambda x:x, image, image_up)\n", " audio.upload(lambda x:x, audio, audio_up)\n", " video.upload(lambda x:x, video, video_up)\n", "\n", " text.change(lambda x,y:(x,y+1), [text, counter], [text_ch, counter])\n", " num.change(lambda x,y:(x, y+1), [num, counter], [num_ch, counter])\n", " slider.change(lambda x,y:(x, y+1), [slider, counter], [slider_ch, counter])\n", " checkbox.change(lambda x,y:(x, y+1), [checkbox, counter], [checkbox_ch, counter])\n", " checkbox_group.change(lambda x,y:(x, y+1), [checkbox_group, counter], [checkbox_group_ch, counter])\n", " radio.change(lambda x,y:(x, y+1), [radio, counter], [radio_ch, counter])\n", " dropdown.change(lambda x,y:(x, y+1), [dropdown, counter], [dropdown_ch, counter])\n", " colorpicker.change(lambda x,y:(x, y+1), [colorpicker, counter], [colorpicker_ch, counter])\n", " code.change(lambda x,y:(x, y+1), [code, counter], [code_ch, counter])\n", " dataframe.change(lambda x,y:(x, y+1), [dataframe, counter], [dataframe_ch, counter])\n", " image.change(lambda x,y:(x, y+1), [image, counter], [image_ch, counter])\n", " audio.change(lambda x,y:(x, y+1), [audio, counter], [audio_ch, counter])\n", " video.change(lambda x,y:(x, y+1), [video, counter], [video_ch, counter])\n", "\n", " text_ch.change(lambda x:x, text_ch, text_ch2)\n", " num_ch.change(lambda x:x, num_ch, num_ch2)\n", " slider_ch.change(lambda x:x, slider_ch, slider_ch2)\n", " checkbox_ch.change(lambda x:x, checkbox_ch, checkbox_ch2)\n", " checkbox_group_ch.change(lambda x:x, checkbox_group_ch, checkbox_group_ch2)\n", " radio_ch.change(lambda x:x, radio_ch, radio_ch2)\n", " dropdown_ch.change(lambda x:x, dropdown_ch, dropdown_ch2)\n", " colorpicker_ch.change(lambda x:x, colorpicker_ch, colorpicker_ch2)\n", " code_ch.change(lambda x:x, code_ch, code_ch2)\n", " dataframe_ch.change(lambda x:x, dataframe_ch, dataframe_ch2)\n", " image_ch.change(lambda x:x, image_ch, image_ch2)\n", " audio_ch.change(lambda x:x, audio_ch, audio_ch2)\n", " video_ch.change(lambda x:x, video_ch, video_ch2)\n", " \n", "\n", "if __name__ == \"__main__\":\n", " demo.launch()"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5}
\ No newline at end of file
diff --git a/demo/change_vs_input/run.py b/demo/change_vs_input/run.py
index 625a2bde69..f16adf029d 100644
--- a/demo/change_vs_input/run.py
+++ b/demo/change_vs_input/run.py
@@ -1,9 +1,10 @@
+import os
import gradio as gr
with gr.Blocks() as demo:
set_button = gr.Button("Set Values")
with gr.Row():
- with gr.Column():
+ with gr.Column(min_width=200):
gr.Markdown("# Enter Here")
text = gr.Textbox()
num = gr.Number()
@@ -15,9 +16,12 @@ with gr.Blocks() as demo:
colorpicker = gr.ColorPicker()
code = gr.Code()
dataframe = gr.Dataframe()
+ image = gr.Image(elem_id="image-original")
+ audio = gr.Audio(elem_id="audio-original")
+ video = gr.Video(elem_id="video-original")
- with gr.Column():
- gr.Markdown("# ON:INPUT")
+ with gr.Column(min_width=200):
+ gr.Markdown("# ON:INPUT/UPLOAD")
text_in = gr.Textbox()
num_in = gr.Number()
slider_in = gr.Slider()
@@ -28,8 +32,11 @@ with gr.Blocks() as demo:
colorpicker_in = gr.ColorPicker()
code_in = gr.Code()
dataframe_in = gr.Dataframe()
+ image_up = gr.Image(elem_id="image-upload")
+ audio_up = gr.Audio(elem_id="audio-upload")
+ video_up = gr.Video(elem_id="video-upload")
- with gr.Column():
+ with gr.Column(min_width=200):
gr.Markdown("# ON:CHANGE")
text_ch = gr.Textbox()
num_ch = gr.Number()
@@ -41,33 +48,79 @@ with gr.Blocks() as demo:
colorpicker_ch = gr.ColorPicker()
code_ch = gr.Code()
dataframe_ch = gr.Dataframe()
+ image_ch = gr.Image(elem_id="image-change")
+ audio_ch = gr.Audio(elem_id="audio-change")
+ video_ch = gr.Video(elem_id="video-change")
- set_button.click(
- lambda: ["asdf", 555, 12, True, ["a", "c"], "b", "b", "#FF0000", "import gradio as gr", [["a", "b", "c", "d"], ["1", "2", "3", "4"]]],
- None,
- [text, num, slider, checkbox, checkbox_group, radio, dropdown, colorpicker, code, dataframe])
+ with gr.Column(min_width=200):
+ gr.Markdown("# ON:CHANGE x2")
+ text_ch2 = gr.Textbox()
+ num_ch2 = gr.Number()
+ slider_ch2 = gr.Slider()
+ checkbox_ch2 = gr.Checkbox()
+ checkbox_group_ch2 = gr.CheckboxGroup(["a", "b", "c"])
+ radio_ch2 = gr.Radio(["a", "b", "c"])
+ dropdown_ch2 = gr.Dropdown(["a", "b", "c"])
+ colorpicker_ch2 = gr.ColorPicker()
+ code_ch2 = gr.Code()
+ dataframe_ch2 = gr.Dataframe()
+ image_ch2 = gr.Image(elem_id="image-change-2")
+ audio_ch2 = gr.Audio(elem_id="audio-change-2")
+ video_ch2 = gr.Video(elem_id="video-change-2")
- text.input(lambda x:x, text, text_in)
- num.input(lambda x:x, num, num_in)
- slider.input(lambda x:x, slider, slider_in)
- checkbox.input(lambda x:x, checkbox, checkbox_in)
- checkbox_group.input(lambda x:x, checkbox_group, checkbox_group_in)
- radio.input(lambda x:x, radio, radio_in)
- dropdown.input(lambda x:x, dropdown, dropdown_in)
- colorpicker.input(lambda x:x, colorpicker, colorpicker_in)
- code.input(lambda x:x, code, code_in)
- dataframe.input(lambda x:x, dataframe, dataframe_in)
+ counter = gr.Number(label="Change counter")
- text.change(lambda x:x, text, text_ch)
- num.change(lambda x:x, num, num_ch)
- slider.change(lambda x:x, slider, slider_ch)
- checkbox.change(lambda x:x, checkbox, checkbox_ch)
- checkbox_group.change(lambda x:x, checkbox_group, checkbox_group_ch)
- radio.change(lambda x:x, radio, radio_ch)
- dropdown.change(lambda x:x, dropdown, dropdown_ch)
- colorpicker.change(lambda x:x, colorpicker, colorpicker_ch)
- code.change(lambda x:x, code, code_ch)
- dataframe.change(lambda x:x, dataframe, dataframe_ch)
+ lion = os.path.join(os.path.dirname(__file__), "files/lion.jpg")
+ cantina = os.path.join(os.path.dirname(__file__), "files/cantina.wav")
+ world = os.path.join(os.path.dirname(__file__), "files/world.mp4")
+
+ set_button.click(
+ lambda: ["asdf", 555, 12, True, ["a", "c"], "b", "b", "#FF0000", "import gradio as gr", [["a", "b", "c", "d"], ["1", "2", "3", "4"]], lion, cantina, world],
+ None,
+ [text, num, slider, checkbox, checkbox_group, radio, dropdown, colorpicker, code, dataframe, image, audio, video])
+
+ text.input(lambda x:x, text, text_in)
+ num.input(lambda x:x, num, num_in)
+ slider.input(lambda x:x, slider, slider_in)
+ checkbox.input(lambda x:x, checkbox, checkbox_in)
+ checkbox_group.input(lambda x:x, checkbox_group, checkbox_group_in)
+ radio.input(lambda x:x, radio, radio_in)
+ dropdown.input(lambda x:x, dropdown, dropdown_in)
+ colorpicker.input(lambda x:x, colorpicker, colorpicker_in)
+ code.input(lambda x:x, code, code_in)
+ dataframe.input(lambda x:x, dataframe, dataframe_in)
+ image.upload(lambda x:x, image, image_up)
+ audio.upload(lambda x:x, audio, audio_up)
+ video.upload(lambda x:x, video, video_up)
+
+ text.change(lambda x,y:(x,y+1), [text, counter], [text_ch, counter])
+ num.change(lambda x,y:(x, y+1), [num, counter], [num_ch, counter])
+ slider.change(lambda x,y:(x, y+1), [slider, counter], [slider_ch, counter])
+ checkbox.change(lambda x,y:(x, y+1), [checkbox, counter], [checkbox_ch, counter])
+ checkbox_group.change(lambda x,y:(x, y+1), [checkbox_group, counter], [checkbox_group_ch, counter])
+ radio.change(lambda x,y:(x, y+1), [radio, counter], [radio_ch, counter])
+ dropdown.change(lambda x,y:(x, y+1), [dropdown, counter], [dropdown_ch, counter])
+ colorpicker.change(lambda x,y:(x, y+1), [colorpicker, counter], [colorpicker_ch, counter])
+ code.change(lambda x,y:(x, y+1), [code, counter], [code_ch, counter])
+ dataframe.change(lambda x,y:(x, y+1), [dataframe, counter], [dataframe_ch, counter])
+ image.change(lambda x,y:(x, y+1), [image, counter], [image_ch, counter])
+ audio.change(lambda x,y:(x, y+1), [audio, counter], [audio_ch, counter])
+ video.change(lambda x,y:(x, y+1), [video, counter], [video_ch, counter])
+
+ text_ch.change(lambda x:x, text_ch, text_ch2)
+ num_ch.change(lambda x:x, num_ch, num_ch2)
+ slider_ch.change(lambda x:x, slider_ch, slider_ch2)
+ checkbox_ch.change(lambda x:x, checkbox_ch, checkbox_ch2)
+ checkbox_group_ch.change(lambda x:x, checkbox_group_ch, checkbox_group_ch2)
+ radio_ch.change(lambda x:x, radio_ch, radio_ch2)
+ dropdown_ch.change(lambda x:x, dropdown_ch, dropdown_ch2)
+ colorpicker_ch.change(lambda x:x, colorpicker_ch, colorpicker_ch2)
+ code_ch.change(lambda x:x, code_ch, code_ch2)
+ dataframe_ch.change(lambda x:x, dataframe_ch, dataframe_ch2)
+ image_ch.change(lambda x:x, image_ch, image_ch2)
+ audio_ch.change(lambda x:x, audio_ch, audio_ch2)
+ video_ch.change(lambda x:x, video_ch, video_ch2)
+
if __name__ == "__main__":
demo.launch()
\ No newline at end of file
diff --git a/js/app/src/components/Audio/Audio.svelte b/js/app/src/components/Audio/Audio.svelte
index 1d6fc0bc70..192bfdd665 100644
--- a/js/app/src/components/Audio/Audio.svelte
+++ b/js/app/src/components/Audio/Audio.svelte
@@ -1,3 +1,5 @@
+
+
@@ -64,10 +74,7 @@
{label}
{show_label}
value={_value}
- on:change={({ detail }) => {
- value = detail;
- dispatch("change", value);
- }}
+ on:change={({ detail }) => (value = detail)}
on:stream={({ detail }) => {
value = detail;
dispatch("stream", value);
diff --git a/js/app/src/components/Audio/Audio.test.ts b/js/app/src/components/Audio/Audio.test.ts
index 35b238f053..a95d269179 100644
--- a/js/app/src/components/Audio/Audio.test.ts
+++ b/js/app/src/components/Audio/Audio.test.ts
@@ -317,4 +317,36 @@ describe("Audio", () => {
assert.equal(fn.callCount, 2);
});
+
+ test("audio change event trigger fires when value is changed and only fires once", async () => {
+ const { component } = await render(Audio, {
+ show_label: true,
+ loading_status,
+ mode: "static",
+ value: {
+ name: "https://gradio-builds.s3.amazonaws.com/demo-files/audio_sample.wav",
+ data: null,
+ is_file: true
+ },
+ label: "static",
+ root: "foo",
+ root_url: null,
+ streaming: false,
+ pending: false,
+ source: "microphone",
+ autoplay: true
+ });
+
+ const mock = spy();
+ component.$on("change", mock);
+
+ (component.value = [
+ {
+ name: "https://gradio-builds.s3.amazonaws.com/demo-files/audio_sample2.wav",
+ data: null,
+ is_file: true
+ }
+ ]),
+ assert.equal(mock.callCount, 1);
+ });
});
diff --git a/js/app/src/components/Image/Image.svelte b/js/app/src/components/Image/Image.svelte
index 359f7a8234..b4e88f164b 100644
--- a/js/app/src/components/Image/Image.svelte
+++ b/js/app/src/components/Image/Image.svelte
@@ -1,3 +1,5 @@
+
+