Spaces:
Runtime error
Runtime error
import gradio as gr | |
from gradio.components import FormComponent | |
class ButtonGroup: | |
"""Base class for button groups with common functionality.""" | |
def __init__(self, events: list[str], *args, **kwargs): | |
self.buttons = {event: None for event in events} | |
self.click_args = {event: None for event in events} | |
self.render() | |
def render(self): | |
"""Render the buttons and set up their event handlers.""" | |
for event, button in self.buttons.items(): | |
if self.click_args[event]: | |
button.click(*self.click_args[event]) | |
def _setup_button(self, event, fn, inputs, outputs): | |
"""Set up a button's click event handler.""" | |
self.click_args[event] = fn, inputs, outputs | |
if self.buttons[event]: | |
self.buttons[event].click(fn, inputs, outputs) | |
def api_info(self): | |
return { | |
"name": self.__class__.__name__, | |
"events": self.EVENTS, | |
"inputs": [], | |
"outputs": [], | |
} | |
def example_payload(self): | |
"""Return None since this component doesn't have direct input values.""" | |
return None | |
def example_value(self): | |
"""Return None since this component doesn't have direct output values.""" | |
return None | |
class InputRowButtonGroup(ButtonGroup): | |
"""Button group for input rows with delete and add buttons.""" | |
EVENTS = ["delete", "add"] | |
def __init__(self, *args, **kwargs): | |
super().__init__(self.EVENTS, *args, **kwargs) | |
def render(self): | |
with gr.Column(scale=0, min_width=40, elem_classes="button-column"): | |
self.buttons["delete"] = gr.Button("β", elem_classes="icon-button delete-button", scale=0) | |
self.buttons["add"] = gr.Button("β", elem_classes="icon-button add-field-button", scale=0) | |
super().render() | |
def delete(self, fn, inputs, outputs): | |
self._setup_button("delete", fn, inputs, outputs) | |
def add(self, fn, inputs, outputs): | |
self._setup_button("add", fn, inputs, outputs) | |
class OutputRowButtonGroup(ButtonGroup): | |
"""Button group for output rows with delete, add, up, and down buttons.""" | |
EVENTS = ["delete", "add", "up", "down"] | |
def __init__(self, *args, **kwargs): | |
super().__init__(self.EVENTS, *args, **kwargs) | |
def render(self): | |
with gr.Column(scale=0, elem_classes="button-column", min_width=40): | |
self.buttons["delete"] = gr.Button("β", elem_classes="icon-button delete-button", scale=0) | |
self.buttons["add"] = gr.Button("β", elem_classes="icon-button add-field-button", scale=0) | |
with gr.Column(scale=0, elem_classes="button-column", min_width=40): | |
self.buttons["up"] = gr.Button("β¬οΈ", elem_classes="icon-button up-button", scale=0) | |
self.buttons["down"] = gr.Button("β¬οΈ", elem_classes="icon-button down-button", scale=0) | |
return super().render() | |
def delete(self, fn, inputs, outputs): | |
self._setup_button("delete", fn, inputs, outputs) | |
def add(self, fn, inputs, outputs): | |
self._setup_button("add", fn, inputs, outputs) | |
def up(self, fn, inputs, outputs): | |
self._setup_button("up", fn, inputs, outputs) | |
def down(self, fn, inputs, outputs): | |
self._setup_button("down", fn, inputs, outputs) | |