import * as TID from "@atcute/tid"; import { html } from "lit-html"; import * as Output from "~/common/output.js"; import { SCHEME } from "~/components/input/webdav/constants.js"; import { buildURI, parseURI, serverId } from "~/components/input/webdav/common.js"; import { effect } from "~/common/signal.js"; import foundation from "~/common/foundation.js"; import { setup } from "~/facets/connect/common.js"; /** * @import { Server } from "@specs/components/input/webdav/types.d.ts" */ foundation.setup({ title: "Connect WebDAV" }); //////////////////////////////////////////// // SETUP //////////////////////////////////////////// const [inputConfigurator, outputOrchestrator, sourcesOrchestrator] = await Promise.all([ foundation.configurator.input(), foundation.orchestrator.output(), foundation.orchestrator.sources(), ]); await Promise.all([ customElements.whenDefined(inputConfigurator.localName), customElements.whenDefined(outputOrchestrator.localName), customElements.whenDefined(sourcesOrchestrator.localName), ]); //////////////////////////////////////////// // UI //////////////////////////////////////////// const { setItems, setError } = setup({ title: "WebDAV", hasOutput: false, description: html`
Connect to a WebDAV server to use it as an audio source.
`, formFields: html`* Required
`, onSubmit: () => addServer(), }); const hostInput = /** @type {HTMLInputElement} */ (document.querySelector("#webdav-host")); const dirInput = /** @type {HTMLInputElement} */ (document.querySelector("#webdav-dir")); const usernameInput = /** @type {HTMLInputElement} */ (document.querySelector("#webdav-username")); const passwordInput = /** @type {HTMLInputElement} */ (document.querySelector("#webdav-password")); //////////////////////////////////////////// // REACTIVE LIST //////////////////////////////////////////// effect(() => { const inputSources = sourcesOrchestrator.sources()[SCHEME] ?? []; /** @type {Map