import { ifDefined } from "lit-html/directives/if-defined.js"; import { DEFAULT_GROUP, defineElement, DiffuseElement, } from "~/common/element.js"; import "~/components/configurator/output/element.js"; import "~/components/transformer/output/refiner/default/element.js"; import "~/components/transformer/output/refiner/initial-contents/element.js"; import "~/components/output/polymorphic/indexed-db/element.js"; import "~/components/transformer/output/string/json/element.js"; /** * @import {RenderArg} from "~/common/element.d.ts" * @import {OutputElement} from "@specs/components/output/types.d.ts" * @import {OutputConfiguratorElement} from "@specs/components/configurator/output/types.d.ts" */ //////////////////////////////////////////// // ELEMENT //////////////////////////////////////////// /** * A default setup for managing output. * * @implements {OutputConfiguratorElement} */ class OutputOrchestrator extends DiffuseElement { static NAME = "diffuse/orchestrator/output"; // ELEMENT GETTERS /** * @returns {OutputElement} */ get output() { /** @type {OutputElement | null} */ const output = this.root().querySelector("#do-output__output"); if (!output) throw new Error("Output orchestrator did not render yet."); return output; } /** * @returns {OutputConfiguratorElement} */ get outputConfigurator() { /** @type {OutputConfiguratorElement | null} */ const outputConfigurator = this.root().querySelector( "#do-output__dc-output", ); if (!outputConfigurator) { throw new Error("Output orchestrator did not render yet."); } return outputConfigurator; } // PROXY OUTPUT ACTIONS get facets() { return this.output.facets; } get playlistItems() { return this.output.playlistItems; } get settings() { return this.output.settings; } get tracks() { return this.output.tracks; } get ready() { return this.output.ready; } // PROXY ADDITIONAL OUTPUT CONFIGURATOR ACTIONS get activated() { return this.outputConfigurator.activated.bind(this.outputConfigurator); } get deselect() { return this.outputConfigurator.deselect.bind(this.outputConfigurator); } get hasDefault() { return this.outputConfigurator.hasDefault.bind(this.outputConfigurator); } get hasSelected() { return this.outputConfigurator.hasSelected.bind(this.outputConfigurator); } get loadSelected() { return this.outputConfigurator.loadSelected.bind(this.outputConfigurator); } get options() { return this.outputConfigurator.options.bind(this.outputConfigurator); } get select() { return this.outputConfigurator.select.bind(this.outputConfigurator); } get selected() { return this.outputConfigurator.selected.bind(this.outputConfigurator); } get waitForOption() { return this.outputConfigurator.waitForOption.bind(this.outputConfigurator); } // RENDER /** * @param {RenderArg} _ */ render({ html }) { const group = this.group === DEFAULT_GROUP ? undefined : this.group; return html` `; } } export default OutputOrchestrator; //////////////////////////////////////////// // REGISTER //////////////////////////////////////////// export const CLASS = OutputOrchestrator; export const NAME = "do-output"; defineElement(NAME, CLASS);