import { html } from "lit"; import { msg } from "@lit/localize"; import type { BuilderComponent } from "../../types/BuilderComponent"; const PLACEHOLDER_AUDIO = "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"; export const AudioComponent: BuilderComponent = { type: "audio", label: () => msg("Audio"), group: "media", defaultData: { src: PLACEHOLDER_AUDIO, }, render(data) { const src = data?.src || PLACEHOLDER_AUDIO; return html`
`; }, // Generic sidebar field bindings: () => [ { key: "src", label: msg("Audio URL"), kind: "attr", target: "audio", name: "src", placeholder: `https://… ${msg("or")} data:audio/…`, }, ], // Upload + reset grouped consistently with other media components settings: ({ setData }) => { const onFileChange = (e: Event) => { const input = e.currentTarget as HTMLInputElement; const file = input.files?.[0]; if (!file) return; if (!file.type.startsWith("audio/")) return; const reader = new FileReader(); reader.onload = () => setData({ src: String(reader.result ?? PLACEHOLDER_AUDIO) }); reader.readAsDataURL(file); input.value = ""; }; const resetToPlaceholder = () => setData({ src: PLACEHOLDER_AUDIO }); return html`

${msg("Audio")}

${msg("Reset to placeholder")}
`; }, };