import { html, render as litRender } from "lit-html"; import { data as facetsData } from "~/facets/index.js"; import foundation from "~/common/foundation.js"; foundation.setup({ title: "Connect" }); /** @param {string} path */ const loaderHref = (path) => `l/?path=${encodeURIComponent(path)}`; /** @type {Record} */ const icons = { "facets/connect/atproto-passkey/index.tile": "at", "facets/connect/atproto-space/index.tile": "at", "facets/connect/dropbox/index.tile": "cloud", "facets/connect/https/index.tile": "globe", "facets/connect/https-json/index.tile": "list-bullets", "facets/connect/icecast/index.tile": "radio", "facets/connect/local/index.tile": "folder-open", "facets/connect/opensubsonic/index.tile": "broadcast", "facets/connect/s3/index.tile": "hard-drives", "facets/connect/webdav/index.tile": "hard-drive", }; const recommended = new Set([ "facets/connect/dropbox/index.tile", "facets/connect/local/index.tile", "facets/connect/s3/index.tile", ]); const facets = facetsData .filter( (f) => f.url.startsWith("facets/connect/") && f.url !== "facets/connect/index.tile" && !f.incomplete, ) .map((f) => ({ name: f.title.replace(/^Connect \/ /, ""), description: f.desc, icon: icons[f.url] ?? "plug", href: loaderHref(f.url), isRecommended: recommended.has(f.url), })) .sort((a, b) => (b.isRecommended ? 1 : 0) - (a.isRecommended ? 1 : 0)) ; const main = document.querySelector("main"); if (!main) throw new Error("No
element"); litRender( html`
Diffuse

Connect

These are some of the options available to add as an audio source, or to use as user-data storage. Some offer both.

`, main, ); //////////////////////////////////////////// // 🚀 //////////////////////////////////////////// foundation.ready();