Spaces:
Runtime error
Runtime error
| import math | |
| from pathlib import Path | |
| from faicons import icon_svg | |
| from htmltools import HTMLDependency | |
| from shiny import module, ui | |
| __all__ = ( | |
| "input_video_clip", | |
| "audio_spinner", | |
| ) | |
| multimodal_dep = HTMLDependency( | |
| "multimodal", | |
| "0.0.1", | |
| source={ | |
| "subdir": str(Path(__file__).parent / "dist"), | |
| }, | |
| script={"src": "index.js"}, | |
| stylesheet={"href": "index.css"}, | |
| ) | |
| def input_video_clip(id: str, **kwargs): | |
| id = module.resolve_id(id) | |
| return ui.Tag( | |
| "video-clipper", | |
| multimodal_dep, | |
| ui.Tag( | |
| "av-settings-menu", | |
| ui.div( | |
| ui.tags.button( | |
| icon_svg("gear").add_class("fw"), | |
| class_="btn btn-sm btn-secondary dropdown-toggle px-3 py-2", | |
| type="button", | |
| **{"data-bs-toggle": "dropdown"}, | |
| ), | |
| ui.tags.ul( | |
| ui.tags.li( | |
| ui.tags.h6("Camera", class_="dropdown-header"), | |
| class_="camera-header", | |
| ), | |
| # Camera items will go here | |
| ui.tags.li(ui.tags.hr(class_="dropdown-divider")), | |
| ui.tags.li( | |
| ui.tags.h6("Microphone", class_="dropdown-header"), | |
| class_="mic-header", | |
| ), | |
| # Microphone items will go here | |
| class_="dropdown-menu", | |
| ), | |
| class_="btn-group", | |
| ), | |
| slot="settings", | |
| ), | |
| ui.div( | |
| ui.tags.button( | |
| ui.TagList( | |
| ui.tags.div( | |
| style="display: inline-block; background-color: red; width: 1rem; height: 1rem; border-radius: 100%; position: relative; top: 0.175rem; margin-right: 0.3rem;" | |
| ), | |
| "Record", | |
| ), | |
| style="display: block;", | |
| class_="record-button btn btn-secondary px-3 mx-auto", | |
| ), | |
| ui.tags.button( | |
| ui.TagList( | |
| ui.tags.div( | |
| style="display: inline-block; background-color: currentColor; width: 1rem; height: 1rem; position: relative; top: 0.175rem; margin-right: 0.3rem;" | |
| ), | |
| "Stop", | |
| ), | |
| style="display: block;", | |
| class_="stop-button btn btn-secondary px-3 mx-auto", | |
| ), | |
| slot="recording-controls", | |
| class_="btn-group", | |
| **{"aria-label": "Recording controls"}, | |
| ), | |
| id=id, | |
| **kwargs, | |
| ) | |
| def audio_spinner( | |
| *, | |
| src: str, | |
| spin_velocity: float = 1, | |
| gap: float = math.pi / 5, | |
| thickness: float = 2.5, | |
| min_radius: float = 30, | |
| radius_factor: float = 1.8, | |
| steps: float = 3, | |
| blades: float = 3, | |
| **kwargs | |
| ): | |
| return ui.Tag( | |
| "audio-spinner", | |
| multimodal_dep, | |
| src=src, | |
| style="width: 125px; height: 125px;", | |
| class_="mx-auto", | |
| **{ | |
| "data-spin-velocity": spin_velocity, | |
| "data-gap": gap, | |
| "data-thickness": thickness, | |
| "data-min-radius": min_radius, | |
| "data-radius-factor": radius_factor, | |
| "data-steps": steps, | |
| "data-blades": blades, | |
| }, | |
| ) | |