···11+import type { DiffuseElement } from "~/common/element.js";
22+import type { ProxiedActions } from "~/common/worker.d.ts";
33+import type { Track } from "~/definitions/types.d.ts";
44+55+export type Actions = {
66+ patch(track: Track): Promise<Track>;
77+};
88+99+export type MetadataElement = DiffuseElement & ProxiedActions<Actions>;
···3232 - url: "components/configurator/input/element.js"
3333 title: "Input"
3434 desc: "Allows for multiple inputs to be used at once."
3535+ - url: "components/configurator/metadata/element.js"
3636+ title: "Metadata"
3737+ desc: "Takes metadata components as children and chains their patches in sequence."
3538 - url: "components/configurator/output/element.js"
3639 title: "Output"
3740 desc: "Enables the user to configure a specific output. If no default output is set, it creates a temporary session by storing everything in memory."
···140143 desc: >
141144 Store your user data on the storage associated with your ATProtocol identity. Data is lexicon shaped by default so this element takes in that data directly without any transformations.
142145146146+metadata:
147147+ - url: "components/metadata/audio-file/element.js"
148148+ title: "Audio File"
149149+ desc: "Extracts tags and audio stats from audio files using the music-metadata library."
150150+143151processors:
144144- - url: "components/processor/metadata/element.js"
145145- title: "Metadata"
146146- desc: "Fetch audio metadata for a given set of tracks, adding to the `Track` object."
147152 - url: "components/processor/search/element.js"
148153 title: "Search"
149154 desc: "Provides a way to search through a collection of tracks, powered by orama.js"
···237242 <li><a href="elements/#configurators">Configurators</a></li>
238243 <li><a href="elements/#engines">Engines</a></li>
239244 <li><a href="elements/#input">Input</a></li>
245245+ <li><a href="elements/#metadata">Metadata</a></li>
240246 <li><a href="elements/#orchestrators">Orchestrators</a></li>
241247 <li><a href="elements/#output">Output</a></li>
242248 <li><a href="elements/#processors">Processors</a></li>
···256262 title: "Artwork",
257263 items: artwork,
258264 content: `
259259- Artwork sources for tracks. Each implements a <code>get(track)</code> action and returns artwork bytes or null. Use an artwork configurator to combine multiple sources.
265265+ Elements that provide artwork for tracks.
260266 `
261267 }) }}
262268···264270 title: "Configurators",
265271 items: configurators,
266272 content: `
267267- Elements that serve as an intermediate in order to make a particular kind of element configurable. In other words, these allow for an element to be swapped out with another that takes the same set of the actions and data output.
273273+ Intermediates in order to make a particular kind of element configurable. In other words, these allow for an element to be swapped out with another that takes the same set of the actions and data output.
268274 `
269275 }) }}
270276···281287 items: input,
282288 content: `
283289 Inputs are sources of audio tracks. Each track is an entry in the list of possible items to play. These can be files or streams, static or dynamic.
290290+ `
291291+ }) }}
292292+293293+ {{ await comp.element({
294294+ title: "Metadata",
295295+ items: metadata,
296296+ content: `
297297+ Elements that provide metadata for tracks.
284298 `
285299 }) }}
286300