{ "version": 3, "sources": ["../src/ui/fjsc/src/store.ts", "../src/ui/fjsc/src/signals.ts", "../src/ui/code/state.ts", "../src/ui/code/routing/Router.ts", "../src/ui/fjsc/src/f2.ts", "../src/ui/code/components/nav.ts", "../src/ui/code/functions/notifications.ts", "../src/ui/code/api/fetcher.ts", "../src/ui/code/api/api.ts", "../src/ui/code/functions/dates.ts", "../src/ui/code/functions/templates.ts", "../src/ui/code/functions/Time.ts", "../src/ui/code/components/artists.ts", "../src/ui/code/components/tracks.ts", "../src/ui/code/components/albums.ts", "../src/ui/fjsc/src/FJSC.ts", "../src/ui/code/components/search.ts", "../src/ui/code/components/home.ts", "../src/ui/code/components/inputs.ts", "../src/ui/code/components/submission.ts", "../src/ui/code/functions/formatters.ts", "../src/ui/code/components/about.ts", "../src/ui/code/components/generics.ts", "../src/ui/main.ts"], "sourcesContent": [ "export class FjsStore {\n static keyName = \"__fjs_store__\";\n\n static get(key: string) {\n // @ts-ignore\n return window[this.keyName][key];\n }\n\n static set(key: any, value: any) {\n // @ts-ignore\n window[this.keyName][key] = value;\n }\n\n static clear() {\n // @ts-ignore\n window[this.keyName] = {};\n }\n\n static remove(key: any) {\n // @ts-ignore\n delete window[this.keyName][key];\n }\n\n static getAll() {\n // @ts-ignore\n return window[this.keyName];\n }\n\n static keys() {\n // @ts-ignore\n return Object.keys(window[this.keyName]);\n }\n\n static values() {\n // @ts-ignore\n return Object.values(window[this.keyName]);\n }\n\n static getSignalValue(key: any) {\n return this.get(key).value;\n }\n\n static setSignalValue(key: any, value: any) {\n this.get(key).value = value;\n }\n}\n\n/**\n * If called with one argument, gets the value for that key, otherwise saves it to the store.\n * @param key\n * @param value\n * @returns {*|void}\n */\nexport function store(key = null, value = null): any | void {\n if (!window) {\n console.warn(\"store() is not supported outside of the browser!\");\n return;\n }\n // @ts-ignore\n if (!window[FjsStore.keyName]) {\n // @ts-ignore\n window[FjsStore.keyName] = {};\n }\n if (arguments.length === 1) {\n return FjsStore.get(arguments[0]);\n } else if (arguments.length === 2) {\n return FjsStore.set(arguments[0], arguments[1]);\n }\n\n throw new Error(\"Passing more than 2 arguments to store() is not supported.\");\n}", "import {store} from \"./store.ts\";\n\nexport interface BoolValueAssignments {\n [key: string]: {\n onTrue: T,\n onFalse: T,\n }\n}\n\nexport type SignalCallback = (newValue: T, changed: boolean) => void;\n\nexport class Signal {\n _callbacks: SignalCallback[] = [];\n _value: T;\n _values: { [key: string]: Signal } = {};\n\n constructor(initialValue: T, updateCallback: SignalCallback = () => {\n }, key = null) {\n this._value = initialValue;\n this._values = {};\n this._callbacks.push(updateCallback);\n if (key) {\n store().set(key, this);\n }\n }\n\n /**\n * Creates an object with boolean signals that update when {this} updates.\n * @param assignments {Object} e.g. { someKey: { onTrue: value1, onFalse: value2 } }\n */\n boolValues(assignments: BoolValueAssignments = {}) {\n for (let key in assignments) {\n this._values[key] = signal(this._value ? assignments[key].onTrue : assignments[key].onFalse);\n }\n this.subscribe((newValue: T) => {\n for (let key in assignments) {\n this._values[key].value = newValue ? assignments[key].onTrue : assignments[key].onFalse;\n }\n });\n return this._values;\n }\n\n unsubscribeAll() {\n this._callbacks = [];\n }\n\n subscribe(callback: SignalCallback) {\n this._callbacks.push(callback);\n }\n\n unsubscribe(callback: SignalCallback) {\n const index = this._callbacks.indexOf(callback);\n if (index >= 0) {\n this._callbacks.splice(index, 1);\n }\n }\n\n get onUpdate(): SignalCallback[] {\n return this._callbacks;\n }\n\n set onUpdate(callback: SignalCallback) {\n this._callbacks.push(callback);\n }\n\n get value(): T {\n return this._value;\n }\n\n set value(value: T) {\n const changed = this._value !== value;\n this._value = value;\n this._callbacks.forEach(callback => callback(value, changed));\n }\n}\n\nexport function signal(initialValue: T) {\n return new Signal(initialValue);\n}\n\nexport function compute(\n valueFunction: (...args: Args) => T,\n ...signals: {[K in keyof Args]: Signal}\n): Signal {\n const getValues = () => signals.map(s => s.value) as Args;\n let out = signal(valueFunction(...getValues()));\n\n for (const sig of signals) {\n sig.subscribe((_, changed) => {\n if (!changed) {\n return;\n }\n out.value = valueFunction(...getValues());\n });\n }\n return out;\n}\n\nexport async function asyncCompute(\n valueFunction: (...args: Args) => Promise,\n ...signals: { [K in keyof Args]: Signal }\n): Promise> {\n const getValues = () => signals.map(s => s.value) as Args;\n let out = signal(await valueFunction(...getValues()));\n\n for (const sig of signals) {\n sig.subscribe(async (_, changed) => {\n if (!changed) {\n return;\n }\n out.value = await valueFunction(...getValues());\n });\n }\n return out;\n}\n\n/**\n * Short wrapper to make dependent signals easier.\n * @deprecated Use compute() instead\n * @param sourceSignal {Signal} Whenever the source signal is updated, the updateMethod gets called to update the output signal.\n * @param updateMethod {Function} Should return the value to update the output signal with.\n */\nexport function computedSignal(sourceSignal: Signal, updateMethod: Function): Signal {\n const returnSignal = signal(updateMethod(sourceSignal.value));\n sourceSignal.subscribe((newVal: (T)) => {\n try {\n returnSignal.value = updateMethod(newVal);\n } catch (e) {\n // @ts-ignore\n returnSignal.value = null;\n }\n });\n return returnSignal;\n}\n\n/**\n * @deprecated Use compute() instead\n * @param sourceSignal\n * @param propertyName\n */\nexport function signalFromProperty(sourceSignal: Signal, propertyName: string) {\n return compute((source: any) => {\n if (!source) {\n return null;\n }\n return source[propertyName];\n }, sourceSignal);\n}", "import {signal} from \"../fjsc/src/signals.ts\";\nimport {Router} from \"./routing/Router.ts\";\nimport {Route} from \"./routing/Route.ts\";\n\nexport const router = signal(null);\n\nexport const currentRoute = signal(null);", "import {signal} from \"../../fjsc/src/signals.ts\";\nimport {currentRoute, router} from \"../state.ts\";\nimport {Route} from \"./Route.ts\";\n\nexport class Router {\n public currentRoute = signal(null);\n public currentParams = signal<{\n [key: string]: string;\n }>({});\n routes: any[];\n protected preRouteChange: Function = () => {};\n protected postRouteChange: Function = () => {};\n protected onNoRouteFound: Function = () => {};\n\n constructor(routes: Route[], preRouteChange: Function = () => {}, postRouteChange: Function = () => {}, onNoRouteFound: Function = () => {}) {\n this.routes = routes;\n this.preRouteChange = preRouteChange;\n this.postRouteChange = postRouteChange;\n this.onNoRouteFound = onNoRouteFound;\n setTimeout(() => {\n this.init();\n });\n }\n\n setRoutes(routes: Route[]) {\n this.routes = routes;\n }\n\n init() {\n console.log(\"Initializing router\");\n window.onpopstate = () => this.handleRouteChange();\n this.handleRouteChange().then();\n }\n\n async handleRouteChange() {\n let path = window.location.pathname.substring(1);\n if (path === \"\") {\n path = \"/\";\n }\n const page = path.split(\"/\").filter(p => p !== \"\")[0] ?? \"/\";\n const route = this.routes.find(r => page.startsWith(r.path) || (r.aliases && r.aliases.some((a: string) => path.startsWith(a))));\n this.currentRoute.value = route;\n currentRoute.value = route;\n if (route) {\n const params = this.getParams(path, route);\n this.currentParams.value = params;\n this.preRouteChange && await this.preRouteChange(route, params);\n route.handler && await route.handler(route, params);\n this.postRouteChange && await this.postRouteChange(route,params);\n } else {\n this.onNoRouteFound && await this.onNoRouteFound();\n this.currentParams.value = {};\n }\n }\n\n getParams(fullPath: string, route: Route) {\n const path = fullPath.split(\"/\").filter(p => p !== \"\");\n const params: {\n [key: string]: string;\n } = {};\n for (let i = 0; i < path.length; i++) {\n params[\"path_\" + i] = path[i];\n }\n const urlParams = new URLSearchParams(window.location.search);\n for (let [key, value] of urlParams.entries()) {\n params[key] = value;\n }\n if (route.pathParams) {\n for (let i = 0; i < route.pathParams.length; i++) {\n params[route.pathParams[i]] = params[\"path_\" + (i + 1)];\n }\n }\n return params;\n }\n\n async navigate(path: string) {\n if (!path.startsWith(\"/\")) {\n path = \"/\" + path;\n }\n history.pushState({}, \"\", window.location.origin + path);\n await this.handleRouteChange();\n }\n\n reload() {\n this.handleRouteChange().then();\n }\n}\n\nconst content = document.querySelector(\"#content\");\nif (!content) {\n throw new Error(\"Content element not found\");\n}\nrouter.value = new Router([], async (route: Route, params: any) => {\n content.innerHTML = \"\";\n\n const component = await route.template(route, params);\n content.appendChild(component);\n content.firstElementChild?.scrollIntoView();\n}, () => {}, () => {\n if (router.value!.routes?.length === 0) {\n return;\n }\n setTimeout(() => {\n navigate(\"404\");\n });\n});\n\nexport function navigate(path: string, params: string[] = []) {\n if (params.length > 0) {\n path += \"?\" + params.join(\"&\");\n }\n router.value!.navigate(path).then();\n}\n\nexport function reload() {\n router.value!.reload();\n}\n\nexport function startRouter() {\n setTimeout(() => {\n router.value!.handleRouteChange().then();\n });\n}", "import {InputType} from \"./Types.ts\";\nimport {signal, Signal} from \"./signals.ts\";\n\nexport type TypeOrSignal = T | Signal;\nexport type StringOrSignal = TypeOrSignal;\nexport type HtmlPropertyValue = StringOrSignal | TypeOrSignal;\nexport type EventHandler = ((this: GlobalEventHandlers, ev: T) => any) | Function;\nexport type AnyElement = HTMLElement | SVGElement;\nexport type AnyNode = DomNode | AnyElement;\nexport type AnyElementFactory = () => AnyElement;\n\ntype propertyOmissions = Omit;\ntype StringKeys = {\n [K in keyof T]: T[K] extends string ? K : never;\n}[keyof T];\ntype stringProperties = StringKeys;\nexport type SettableCss = {\n [K in stringProperties]: StringOrSignal\n};\nexport type CssClass = Partial;\n\nexport function mergeCss(...cssObjs: (CssClass|undefined)[]): CssClass {\n return Object.assign({}, ...cssObjs.filter(o => o));\n}\n\nexport function create(tag: string) {\n return new DomNode(tag);\n}\n\nexport function nullElement() {\n return create(\"div\").styles(\"display\", \"none\").build();\n}\n\nexport function ifjs(condition: any, element: AnyElement | AnyElementFactory, inverted = false) {\n function getElement(): AnyElement {\n if (element.constructor === Function) {\n return (element)();\n }\n return element;\n }\n\n if (condition && condition.constructor === Signal) {\n const state = signal(condition.value ? (inverted ? nullElement() : getElement()) : (inverted ? getElement() : nullElement()));\n condition.subscribe((newValue: any) => {\n if (newValue) {\n state.value = inverted ? nullElement() : getElement();\n } else {\n state.value = inverted ? getElement() : nullElement();\n }\n });\n return state;\n } else {\n return condition ? (inverted ? nullElement() : getElement()) : (inverted ? getElement() : nullElement());\n }\n}\n\ntype SignalMapCallback = (item: T, index: number) => AnyElement;\n\nexport function signalMap(arrayState: Signal, wrapper: DomNode, callback: SignalMapCallback, renderSequentially = false): any {\n if (!arrayState.subscribe) {\n throw new Error(\"arrayState argument for signalMap is not subscribable\");\n }\n\n const update = (newValue: Iterable) => {\n if (!newValue) {\n return;\n }\n const tmp = [...newValue];\n const children = [];\n if (renderSequentially) {\n wrapper.overwriteChildren();\n for (let i = 0; i < tmp.length; i++) {\n wrapper.children(callback(tmp[i], i));\n }\n } else {\n for (let i = 0; i < tmp.length; i++) {\n children.push(callback(tmp[i], i));\n }\n // @ts-ignore\n wrapper.overwriteChildren(...children);\n }\n };\n arrayState.subscribe(update);\n update(arrayState.value);\n\n return wrapper.build();\n}\n\nexport function stack(message: string, debugInfo = {}) {\n console.warn(message, { debugInfo }, (new Error()).stack);\n}\n\nexport function isValidElement(element: any) {\n const validTypes = [HTMLElement, SVGElement];\n return validTypes.some(type => element instanceof type);\n}\n\nexport function getValue(maybeSignal: Signal|T): T {\n if (maybeSignal instanceof Signal) {\n return (maybeSignal as Signal).value;\n }\n return maybeSignal as T;\n}\n\ntype AnyElementWithKeyIndex = AnyElement & {\n [key: string]: HtmlPropertyValue\n};\n\nexport class DomNode {\n _node: AnyElementWithKeyIndex;\n svgTags = ['svg', 'g', 'circle', 'ellipse', 'line', 'path', 'polygon', 'polyline', 'rect', 'text', 'textPath', 'tspan'];\n\n constructor(tag: string) {\n if (this.svgTags.includes(tag)) {\n this._node = document.createElementNS(\"http://www.w3.org/2000/svg\", tag) as AnyElementWithKeyIndex;\n } else {\n this._node = document.createElement(tag) as AnyElementWithKeyIndex;\n }\n }\n\n applyGenericConfig(config: any) {\n return this.classes(\"fjsc\", ...(config.classes ?? []))\n .attributes(...(config.attributes ?? []))\n .styles(...(config.styles ?? []))\n .id(config.id)\n .css(config.css)\n .title(config.title)\n .role(config.role);\n }\n\n build(): AnyElement {\n if (!isValidElement(this._node)) {\n throw new Error('Invalid node type. Must be an HTMLElement or a subclass.');\n }\n return this._node;\n }\n\n wrapProperty(property: string, value: HtmlPropertyValue) {\n if (value && value.constructor === Signal) {\n const sig = value as Signal;\n this._node[property] = sig.value;\n sig.subscribe((newValue: HtmlPropertyValue) => {\n this._node[property] = newValue;\n });\n } else {\n if (value !== undefined && value !== null) {\n this._node[property] = value;\n }\n }\n }\n\n class(className: string) {\n return this.classes(className);\n }\n\n classes(...classes: StringOrSignal[]) {\n for (let cls of classes) {\n if (cls && cls.constructor === Signal) {\n const sig = cls as Signal;\n let previousValue = sig.value as string;\n this._node.classList.add(previousValue);\n sig.subscribe((newValue: string) => {\n this._node.classList.remove(previousValue);\n this._node.classList.add(newValue);\n previousValue = newValue;\n });\n } else {\n this._node.classList.add(cls as string);\n }\n }\n return this;\n }\n\n attribute(key: string, value: HtmlPropertyValue) {\n return this.attributes(key, value);\n }\n\n attributes(...attributes: HtmlPropertyValue[]) {\n if (arguments.length % 2 === 0) {\n for (let i = 0; i < arguments.length; i += 2) {\n const key = arguments[i];\n const value = arguments[i + 1];\n if (value && value.constructor === Signal) {\n this._node.setAttribute(key, value.value);\n value.onUpdate = (newValue: string) => {\n this._node.setAttribute(key, newValue);\n };\n } else {\n this._node.setAttribute(key, value);\n }\n }\n } else {\n throw new Error('Invalid number of arguments for attributes. Must be even. (key, value, key, value, ...)');\n }\n return this;\n }\n\n id(id: HtmlPropertyValue) {\n this.wrapProperty('id', id);\n return this;\n }\n\n text(text: HtmlPropertyValue) {\n this.wrapProperty('innerText', text);\n return this;\n }\n\n title(title: HtmlPropertyValue) {\n this.wrapProperty('title', title);\n return this;\n }\n\n html(html: HtmlPropertyValue) {\n this.wrapProperty('innerHTML', html);\n return this;\n }\n\n children(...children: (TypeOrSignal|TypeOrSignal|TypeOrSignal|null)[]) {\n for (let node of arguments) {\n if (isValidElement(node)) {\n this._node.appendChild(node);\n } else if (node instanceof DomNode) {\n this._node.appendChild(node.build());\n } else if (node && node.constructor === Signal) {\n node.subscribe((newValue: AnyNode) => {\n if (isValidElement(newValue)) {\n this._node.replaceChild(newValue as AnyElement, childNode);\n childNode = newValue;\n } else if (newValue.constructor === DomNode) {\n this._node.replaceChild(newValue.build(), childNode);\n childNode = newValue.build();\n } else {\n stack('Unexpected value for child. Must be an HTMLElement or a subclass.', newValue);\n }\n });\n let childNode = node.value;\n if (!isValidElement(childNode)) {\n // Create a placeholder div if the value is not an HTMLElement so we can swap it out later\n childNode = nullElement();\n }\n this._node.appendChild(childNode);\n } else if (node && node.constructor === Array) {\n for (let childNode of node) {\n this.children(childNode);\n }\n } else {\n if (node) {\n stack('Invalid node type. Must be an HTMLElement or a subclass.', node);\n }\n }\n }\n return this;\n }\n\n overwriteChildren() {\n this._node.innerHTML = '';\n return this.children(...arguments);\n }\n\n child() {\n return this.children(...arguments);\n }\n\n role(role: HtmlPropertyValue) {\n this.wrapProperty('role', role);\n return this;\n }\n\n prefixedAttribute(prefix: string, key: string, value: HtmlPropertyValue) {\n return this.attributes(`${prefix}-${key}`, value);\n }\n\n aria(key: string, value: HtmlPropertyValue) {\n return this.prefixedAttribute('aria', key, value);\n }\n\n data(key: string, value: HtmlPropertyValue) {\n return this.prefixedAttribute('data', key, value);\n }\n\n onclick(callback: EventHandler) {\n // @ts-ignore\n this._node.onclick = callback;\n return this;\n }\n\n onauxclick(callback: EventHandler) {\n // @ts-ignore\n this._node.onauxclick = callback;\n return this;\n }\n\n ondblclick(callback: EventHandler) {\n // @ts-ignore\n this._node.ondblclick = callback;\n return this;\n }\n\n onchange(callback: EventHandler) {\n // @ts-ignore\n this._node.onchange = callback;\n return this;\n }\n\n oninput(callback: EventHandler) {\n // @ts-ignore\n this._node.oninput = callback;\n return this;\n }\n\n onkeydown(callback: EventHandler) {\n // @ts-ignore\n this._node.onkeydown = callback;\n return this;\n }\n\n onkeyup(callback: EventHandler) {\n // @ts-ignore\n this._node.onkeyup = callback;\n return this;\n }\n\n onmousedown(callback: EventHandler) {\n // @ts-ignore\n this._node.onmousedown = callback;\n return this;\n }\n\n onmouseup(callback: EventHandler) {\n // @ts-ignore\n this._node.onmouseup = callback;\n return this;\n }\n\n onmouseover(callback: EventHandler) {\n // @ts-ignore\n this._node.onmouseover = callback;\n return this;\n }\n\n onmouseout(callback: EventHandler) {\n // @ts-ignore\n this._node.onmouseout = callback;\n return this;\n }\n\n onmousemove(callback: EventHandler) {\n // @ts-ignore\n this._node.onmousemove = callback;\n return this;\n }\n\n onmouseenter(callback: EventHandler) {\n // @ts-ignore\n this._node.onmouseenter = callback;\n return this;\n }\n\n onmouseleave(callback: EventHandler) {\n // @ts-ignore\n this._node.onmouseleave = callback;\n return this;\n }\n\n oncontextmenu(callback: EventHandler) {\n // @ts-ignore\n this._node.oncontextmenu = callback;\n return this;\n }\n\n onwheel(callback: EventHandler) {\n // @ts-ignore\n this._node.onwheel = callback;\n return this;\n }\n\n ondrag(callback: EventHandler) {\n // @ts-ignore\n this._node.ondrag = callback;\n return this;\n }\n\n ondragend(callback: EventHandler) {\n // @ts-ignore\n this._node.ondragend = callback;\n return this;\n }\n\n ondragenter(callback: EventHandler) {\n // @ts-ignore\n this._node.ondragenter = callback;\n return this;\n }\n\n ondragstart(callback: EventHandler) {\n // @ts-ignore\n this._node.ondragstart = callback;\n return this;\n }\n\n ondragleave(callback: EventHandler) {\n // @ts-ignore\n this._node.ondragleave = callback;\n return this;\n }\n\n ondragover(callback: EventHandler) {\n // @ts-ignore\n this._node.ondragover = callback;\n return this;\n }\n\n ondrop(callback: EventHandler) {\n // @ts-ignore\n this._node.ondrop = callback;\n return this;\n }\n\n onscroll(callback: EventListener) {\n this._node.onscroll = callback;\n return this;\n }\n\n onfocus(callback: EventListener) {\n this._node.onfocus = callback;\n return this;\n }\n\n onblur(callback: EventListener) {\n this._node.onblur = callback;\n return this;\n }\n\n onresize(callback: EventListener) {\n this._node.onresize = callback;\n return this;\n }\n\n onselect(callback: EventListener) {\n this._node.onselect = callback;\n return this;\n }\n\n onsubmit(callback: EventListener) {\n this._node.onsubmit = callback;\n return this;\n }\n\n onreset(callback: EventListener) {\n this._node.onreset = callback;\n return this;\n }\n\n onabort(callback: EventListener) {\n this._node.onabort = callback;\n return this;\n }\n\n onerror(callback: OnErrorEventHandler) {\n this._node.onerror = callback;\n return this;\n }\n\n oncanplay(callback: EventListener) {\n this._node.oncanplay = callback;\n return this;\n }\n\n oncanplaythrough(callback: EventListener) {\n this._node.oncanplaythrough = callback;\n return this;\n }\n\n ondurationchange(callback: EventListener) {\n this._node.ondurationchange = callback;\n return this;\n }\n\n onemptied(callback: EventListener) {\n this._node.onemptied = callback;\n return this;\n }\n\n onended(callback: EventListener) {\n this._node.onended = callback;\n return this;\n }\n\n onloadeddata(callback: EventListener) {\n this._node.onloadeddata = callback;\n return this;\n }\n\n onloadedmetadata(callback: EventListener) {\n this._node.onloadedmetadata = callback;\n return this;\n }\n\n onloadstart(callback: EventListener) {\n this._node.onloadstart = callback;\n return this;\n }\n\n onpause(callback: EventListener) {\n this._node.onpause = callback;\n return this;\n }\n\n onplay(callback: EventListener) {\n this._node.onplay = callback;\n return this;\n }\n\n onplaying(callback: EventListener) {\n this._node.onplaying = callback;\n return this;\n }\n\n onprogress(callback: EventListener) {\n this._node.onprogress = callback;\n return this;\n }\n\n onratechange(callback: EventListener) {\n this._node.onratechange = callback;\n return this;\n }\n\n onseeked(callback: EventListener) {\n this._node.onseeked = callback;\n return this;\n }\n\n onseeking(callback: EventListener) {\n this._node.onseeking = callback;\n return this;\n }\n\n onstalled(callback: EventListener) {\n this._node.onstalled = callback;\n return this;\n }\n\n onsuspend(callback: EventListener) {\n this._node.onsuspend = callback;\n return this;\n }\n\n ontimeupdate(callback: EventListener) {\n this._node.ontimeupdate = callback;\n return this;\n }\n\n onvolumechange(callback: EventListener) {\n this._node.onvolumechange = callback;\n return this;\n }\n\n onwaiting(callback: EventListener) {\n this._node.onwaiting = callback;\n return this;\n }\n\n oncopy(callback: EventListener) {\n this._node.oncopy = callback;\n return this;\n }\n\n oncut(callback: EventListener) {\n this._node.oncut = callback;\n return this;\n }\n\n onpaste(callback: EventListener) {\n this._node.onpaste = callback;\n return this;\n }\n\n onanimationstart(callback: EventListener) {\n this._node.onanimationstart = callback;\n return this;\n }\n\n onanimationend(callback: EventListener) {\n this._node.onanimationend = callback;\n return this;\n }\n\n onanimationiteration(callback: EventListener) {\n this._node.onanimationiteration = callback;\n return this;\n }\n\n ontransitionend(callback: EventListener) {\n this._node.ontransitionend = callback;\n return this;\n }\n\n on(eventName: string, callback: EventListenerOrEventListenerObject) {\n this._node.addEventListener(eventName, callback);\n return this;\n }\n\n open(open: HtmlPropertyValue) {\n this.wrapProperty('open', open);\n return this;\n }\n\n src(src: HtmlPropertyValue) {\n this.wrapProperty('src', src);\n return this;\n }\n\n alt(alt: HtmlPropertyValue) {\n this.wrapProperty('alt', alt);\n return this;\n }\n\n css(css: CssClass) {\n if (!css) {\n return this;\n }\n for (const [key, value] of Object.entries(css as Record)) {\n this.styles(key, value);\n }\n return this;\n }\n\n style(key: string, value: StringOrSignal) {\n return this.styles(key, value);\n }\n\n styles(...styles: StringOrSignal[]) {\n if (arguments.length % 2 === 0) {\n for (let i = 0; i < arguments.length; i += 2) {\n const key = arguments[i];\n const value = arguments[i + 1];\n if (key.constructor !== String) {\n throw new Error('Invalid key type for styles. Must be a string.');\n }\n if (value && value.constructor === Signal) {\n // @ts-ignore\n this._node.style[key] = value.value;\n value.onUpdate = (newValue: any) => {\n // @ts-ignore\n this._node.style[key] = newValue;\n };\n } else {\n // @ts-ignore\n this._node.style[key] = value;\n }\n }\n } else {\n throw new Error('Invalid number of arguments for styles. Must be even. (key, value, key, value, ...)');\n }\n return this;\n }\n\n width(width: HtmlPropertyValue) {\n this.wrapProperty('width', width);\n return this;\n }\n\n height(height: HtmlPropertyValue) {\n this.wrapProperty('height', height);\n return this;\n }\n\n type(type: TypeOrSignal) {\n // @ts-ignore\n this.wrapProperty('type', type);\n return this;\n }\n\n name(name: HtmlPropertyValue) {\n this.wrapProperty('name', name);\n return this;\n }\n\n value(value: HtmlPropertyValue) {\n this.wrapProperty('value', value);\n return this;\n }\n\n placeholder(placeholder: HtmlPropertyValue) {\n this.wrapProperty('placeholder', placeholder);\n return this;\n }\n\n for(forId: HtmlPropertyValue) {\n this.wrapProperty('for', forId);\n return this;\n }\n\n checked(checked: HtmlPropertyValue) {\n this.wrapProperty('checked', checked);\n return this;\n }\n\n disabled(disabled: HtmlPropertyValue) {\n this.wrapProperty('disabled', disabled);\n return this;\n }\n\n selected(selected: HtmlPropertyValue) {\n this.wrapProperty('selected', selected);\n return this;\n }\n\n href(href: HtmlPropertyValue) {\n this.wrapProperty('href', href);\n return this;\n }\n\n target(target: HtmlPropertyValue) {\n this.wrapProperty('target', target);\n return this;\n }\n\n rel(rel: HtmlPropertyValue) {\n this.wrapProperty('rel', rel);\n return this;\n }\n\n required(required: HtmlPropertyValue) {\n this.wrapProperty('required', required);\n return this;\n }\n\n multiple(multiple: HtmlPropertyValue) {\n this.wrapProperty('multiple', multiple);\n return this;\n }\n\n accept(accept: HtmlPropertyValue) {\n this.wrapProperty('accept', accept);\n return this;\n }\n\n acceptCharset(acceptCharset: HtmlPropertyValue) {\n this.wrapProperty('acceptCharset', acceptCharset);\n return this;\n }\n\n action(action: HtmlPropertyValue) {\n this.wrapProperty('action', action);\n return this;\n }\n\n autocomplete(autocomplete: HtmlPropertyValue) {\n this.wrapProperty('autocomplete', autocomplete);\n return this;\n }\n\n enctype(enctype: HtmlPropertyValue) {\n this.wrapProperty('enctype', enctype);\n return this;\n }\n\n method(method: HtmlPropertyValue) {\n this.wrapProperty('method', method);\n return this;\n }\n\n novalidate(novalidate: HtmlPropertyValue) {\n this.wrapProperty('novalidate', novalidate);\n return this;\n }\n}", "import {compute} from \"../../fjsc/src/signals.ts\";\nimport {currentRoute} from \"../state.ts\";\nimport {create} from \"../../fjsc/src/f2.ts\";\nimport type {NavItem} from \"../models/NavItem.ts\";\nimport {Generics} from \"./generics.ts\";\nimport {navigate} from \"../routing/Router.ts\";\n\nexport class Nav {\n static navItem(item: NavItem) {\n const active = compute(r => r && r.path === item.path, currentRoute);\n const activeClass = compute((a): string => a ? \"active\" : \"_\", active);\n\n return create(\"a\")\n .classes(\"button\", \"flex\", \"center-items\", activeClass)\n .href(window.location.origin + \"/\" + item.path)\n .target(\"_blank\")\n .onclick((e: MouseEvent) => {\n if (e.button === 0) {\n e.preventDefault();\n navigate(item.path);\n }\n })\n .children(\n Generics.icon(item.icon),\n create(\"span\")\n .text(item.text)\n .build()\n ).build();\n }\n}", "import {NotificationType} from \"../enums/NotificationType.ts\";\nimport {Generics} from \"../components/generics.ts\";\n\nexport function notify(text: string, type = NotificationType.info, time = 7000) {\n const notifications = document.querySelector(\"#notifications\");\n const notification = Generics.notification(type, text);\n const previousNotifications = document.querySelectorAll(\".notification\") as NodeListOf;\n if (previousNotifications) {\n const lastNotification = previousNotifications[previousNotifications.length - 1];\n if (lastNotification) {\n notification.style.top = lastNotification.offsetTop + lastNotification.clientHeight + \"px\";\n }\n }\n notifications?.appendChild(notification);\n setTimeout(() => {\n notification.remove();\n }, time);\n}\n", "import {NotificationType} from \"../enums/NotificationType.ts\";\nimport {notify} from \"../functions/notifications.ts\";\n\nexport class Fetcher {\n private static async handleResponse(res: Response, parseOutput = true): Promise {\n const text = await res.text();\n if (!res.ok) {\n const json = JSON.parse(text);\n if (json.error) {\n notify(`Failed POST (${res.status}): ${json.error}`, NotificationType.error);\n throw new Error(json.error);\n }\n notify(`Failed POST (${res.status}): ${text}`, NotificationType.error);\n throw new Error(text);\n }\n\n if (!parseOutput) {\n return text as T;\n }\n\n try {\n return JSON.parse(text) as T;\n } catch (e) {\n notify(`Failed to parse response: ${text}`, NotificationType.error);\n throw e;\n }\n }\n\n static async get(url: string, params: any = {}): Promise {\n const urlWithParams = url + (Object.keys(params).length > 0 ? \"?\" + new URLSearchParams(params).toString() : \"\");\n\n const res = await fetch(urlWithParams, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n credentials: \"include\"\n });\n\n return await this.handleResponse(res);\n }\n\n static async post(url: string, body: any = {}): Promise {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n credentials: \"include\",\n body: JSON.stringify(body)\n });\n\n return await this.handleResponse(res, false);\n }\n\n static async postWithResponse(url: string, body: any = {}): Promise {\n const res = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n credentials: \"include\",\n body: JSON.stringify(body)\n });\n\n return await this.handleResponse(res);\n }\n}", "import {Fetcher} from \"./fetcher.ts\";\nimport {Album} from \"../models/db/tri/Album.ts\";\nimport {Track} from \"../models/db/tri/Track.ts\";\nimport {SearchResult} from \"../models/SearchResult.ts\";\nimport {SubmissionRequest} from \"../models/SubmissionRequest.ts\";\nimport {Artist} from \"../models/db/tri/Artist.ts\";\n\nconst base = window.location.origin.includes(\"localhost\") ? \"http://localhost:8090\" : \"https://artists-api.trirecords.eu\";\n\nexport class Api {\n static baseUrl = base;\n\n static async getAlbums() {\n return await Fetcher.get(base + \"/albums/get?onlyReleased=true\");\n }\n\n static async getAlbum(id: number) {\n return await Fetcher.get(base + \"/albums/byId?id=\" + id);\n }\n\n static getTrack(id: number) {\n return Fetcher.get(base + \"/tracks/byId?id=\" + id);\n }\n\n static async getTracks() {\n return await Fetcher.get(base + \"/tracks/get?onlyReleased=true\");\n }\n\n static searchTracks(q: string) {\n return Fetcher.get(base + \"/search/tracks?search=\" + q);\n }\n\n static searchAlbums(q: string) {\n return Fetcher.get(base + \"/search/albums?search=\" + q);\n }\n\n static submitRelease(param: SubmissionRequest) {\n return Fetcher.post(base + \"/submissions/create\", param);\n }\n\n static getArtists() {\n return Fetcher.get(base + \"/artists/get\");\n }\n\n static async getArtist(name: string) {\n return await Fetcher.get(base + \"/artists/byName?name=\" + name);\n }\n}", "export function today() {\n return dayFrom(new Date());\n}\n\nexport function dayFrom(date: Date|string|null) {\n if (!date) {\n return '';\n }\n\n if (date.constructor === String) {\n date = new Date(date);\n }\n\n return (date as Date).toISOString().split('T')[0];\n}\n\nexport function todayWithOffset(offset: number) {\n const date = new Date();\n date.setDate(date.getDate() + offset);\n return date;\n}", "import {MediaFileType} from \"../enums/MediaFileType.ts\";\nimport {Api} from \"../api/api.ts\";\nimport {RequestableImageSize} from \"../components/requestableImageSize.ts\";\n\nexport function target(e: Event) {\n return e.target as T;\n}\n\nexport function getImageUrl(type: MediaFileType, id: number, quality: RequestableImageSize) {\n return `${Api.baseUrl}/media/image?mediaFileType=${type}&id=${id}&quality=${quality}`;\n}\n", "import {signal} from \"../../fjsc/src/signals.ts\";\n\nexport class Time {\n static localDate(time: number|string|Date) {\n return new Date(time).toDateString();\n }\n\n static adjust(time: number|string|Date): Date {\n time = new Date(time);\n time.setMinutes(time.getMinutes() - time.getTimezoneOffset());\n return time;\n }\n\n static ago(time: number|string|Date, useShort = false): string {\n time = Time.adjust(time);\n switch (typeof time) {\n case \"number\":\n break;\n case \"string\":\n time = +new Date(time);\n break;\n case \"object\":\n if (time.constructor === Date) time = time.getTime();\n break;\n default:\n time = +new Date();\n }\n const time_formats = [\n [60, \"seconds\", 1], // 60\n [120, \"1 minute ago\", \"1 minute from now\"], // 60*2\n [3600, \"minutes\", 60], // 60*60, 60\n [7200, \"1 hour ago\", \"1 hour from now\"], // 60*60*2\n [86400, \"hours\", 3600], // 60*60*24, 60*60\n [172800, \"Yesterday\", \"Tomorrow\"], // 60*60*24*2\n [604800, \"days\", 86400], // 60*60*24*7, 60*60*24\n [1209600, \"Last week\", \"Next week\"], // 60*60*24*7*4*2\n [2419200, \"weeks\", 604800], // 60*60*24*7*4, 60*60*24*7\n [4838400, \"Last month\", \"Next month\"], // 60*60*24*7*4*2\n [29030400, \"months\", 2419200], // 60*60*24*7*4*12, 60*60*24*7*4\n [58060800, \"Last year\", \"Next year\"], // 60*60*24*7*4*12*2\n [2903040000, \"years\", 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12\n [5806080000, \"Last century\", \"Next century\"], // 60*60*24*7*4*12*100*2\n [58060800000, \"centuries\", 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100\n ];\n const time_formats_short = [\n [60, \"s\", 1], // 60\n [120, \"1m ago\", \"1m until\"], // 60*2\n [3600, \"m\", 60], // 60*60, 60\n [7200, \"1h ago\", \"1h until\"], // 60*60*2\n [86400, \"h\", 3600], // 60*60*24, 60*60\n [172800, \"1d ago\", \"1d until\"], // 60*60*24*2\n [604800, \"d\", 86400], // 60*60*24*7, 60*60*24\n [1209600, \"1w ago\", \"1w until\"], // 60*60*24*7*4*2\n [2419200, \"w\", 604800], // 60*60*24*7*4, 60*60*24*7\n [4838400, \"1mo ago\", \"1mo until\"], // 60*60*24*7*4*2\n [29030400, \"mo\", 2419200], // 60*60*24*7*4*12, 60*60*24*7*4\n [58060800, \"1y ago\", \"1y until\"], // 60*60*24*7*4*12*2\n [2903040000, \"y\", 29030400], // 60*60*24*7*4*12*100, 60*60*24*7*4*12\n [5806080000, \"1c ago\", \"1c until\"], // 60*60*24*7*4*12*100*2\n [58060800000, \"c\", 2903040000] // 60*60*24*7*4*12*100*20, 60*60*24*7*4*12*100\n ];\n let seconds = (+new Date() - time) / 1000,\n token = \"ago\",\n list_choice = 1;\n\n if (seconds === 0) {\n return \"Just now\";\n }\n if (seconds < 0) {\n seconds = Math.abs(seconds);\n token = \"from now\";\n list_choice = 2;\n }\n let i = 0, format;\n const used_formats = useShort ? time_formats_short : time_formats;\n while ((format = used_formats[i++])) {\n if (seconds < (format[0] as number)) {\n if (typeof format[2] == \"string\")\n return format[list_choice] as string;\n else\n return Math.floor(seconds / format[2]) + \" \" + format[1] + \" \" + token;\n }\n }\n return time.toString();\n }\n\n static #shouldUpdateInSeconds(time: string) {\n return time.includes(\"seconds\") || time === \"Just now\";\n }\n\n static agoUpdating(time: number|string|Date, useShort = false) {\n const state = signal(Time.ago(time, useShort));\n const update = () => {\n state.value = Time.ago(time, useShort);\n const updateInterval = Time.#shouldUpdateInSeconds(state.value) ? 1000 : 60000;\n if (state.value.includes(\"hours\")) {\n return;\n }\n setTimeout(update, updateInterval);\n };\n update();\n\n return state;\n }\n\n static format(time: number): string {\n let minutes = Math.floor(time / 60);\n let seconds = Math.floor(time - minutes * 60);\n return minutes + \":\" + seconds.toString().padStart(2, \"0\");\n }\n\n static toTimeString(time: number|string|Date) {\n return new Date(time).toTimeString().split(\" \")[0];\n }\n\n static toTimeFromSeconds(seconds: number) {\n const minutes = Math.floor(seconds / 60);\n const secondsLeft = seconds - minutes * 60;\n return minutes + \":\" + secondsLeft.toString().padStart(2, \"0\");\n }\n}", "import {Generics} from \"./generics.ts\";\nimport {Artist} from \"../models/db/tri/Artist.ts\";\nimport {compute, Signal, signal} from \"../../fjsc/src/signals.ts\";\nimport {Api} from \"../api/api.ts\";\nimport {create, ifjs, signalMap, StringOrSignal} from \"../../fjsc/src/f2.ts\";\nimport {RequestableImageSize} from \"./requestableImageSize.ts\";\nimport {MediaFileType} from \"../enums/MediaFileType.ts\";\nimport {getImageUrl} from \"../functions/templates.ts\";\nimport {Route} from \"../routing/Route.ts\";\nimport {navigate} from \"../routing/Router.ts\";\nimport {Time} from \"../functions/Time.ts\";\nimport {Tracks} from \"./tracks.ts\";\nimport {Albums} from \"./albums.ts\";\n\nconst artists = signal([]);\nconst sortedArtists = compute(a => a.sort((a, b) => a.has_logo === b.has_logo ? 0 : a.has_logo ? -1 : 1), artists);\n\nexport class Artists {\n static page() {\n const loading = signal(false);\n loading.value = true;\n Api.getArtists()\n .then(a => artists.value = a)\n .finally(() => loading.value = false);\n\n return Generics.pageFrame(\n Generics.heading(1, \"Roster\", [\"bold\"]),\n ifjs(loading, Generics.loading()),\n signalMap(sortedArtists, create(\"div\").classes(\"flex\"), a => create(\"button\")\n .classes(\"fjsc\", \"center-items\")\n .onclick(() => navigate(\"/artist/\" + a.name))\n .children(\n ifjs(a.has_logo, Generics.image(getImageUrl(MediaFileType.artistLogo, a.id, RequestableImageSize.s50), [\"artist-icon\"])),\n Generics.heading(2, a.name)\n ).build())\n );\n }\n\n static artistPage(route: Route, params: any) {\n let name = params.name;\n if (!name) {\n const urlParams = new URLSearchParams(window.location.search);\n name = urlParams.get(\"name\");\n }\n const artist = signal(null);\n const loading = signal(false);\n loading.value = true;\n Api.getArtist(name ?? \"\")\n .then(a => artist.value = a)\n .finally(() => loading.value = false);\n\n return Generics.pageFrame(\n ifjs(loading, Generics.loading()),\n ifjs(artist, Artists.artist(artist))\n );\n }\n\n static artistsFromString(artistString: StringOrSignal) {\n const artists = signal([]);\n if (artistString instanceof Signal) {\n artistString.subscribe(a => {\n artists.value = a.split(\",\");\n });\n } else {\n artists.value = artistString.split(\",\");\n }\n\n return signalMap(artists, create(\"div\").classes(\"flex\"), a => {\n if (a === \"Various Artists\") {\n return create(\"span\")\n .text(\"Various Artists\")\n .build();\n }\n\n return Generics.link(\"/artist/\" + a, a);\n });\n }\n\n static artist(artist: Signal) {\n const name = compute(a => a?.name ?? \"Artist\", artist);\n const description = compute(a => a?.description ?? \"\", artist);\n const id = compute(a => a?.id ?? 0, artist);\n const tracks = compute(a => a?.tracks ?? [], artist);\n const albums = compute(a => a?.albums ?? [], artist);\n const src = compute(i => getImageUrl(MediaFileType.artistLogo, i, RequestableImageSize.s100), id);\n const has_logo = compute(a => a?.has_logo ?? false, artist);\n\n return create(\"div\")\n .classes(\"flex-v\")\n .children(\n create(\"div\")\n .classes(\"flex\")\n .children(\n ifjs(has_logo, Generics.image(src, [\"artist-logo\"])),\n create(\"div\")\n .classes(\"flex-v\")\n .children(\n Generics.heading(1, name, [\"bold\", \"small-line\"]),\n ifjs(description, Generics.heading(2, description)),\n ).build(),\n ).build(),\n Generics.heading(2, \"Releases\"),\n Albums.albumsList(albums),\n Generics.heading(2, \"Tracks\"),\n Tracks.tracksList(tracks)\n ).build();\n }\n}", "import {compute, Signal, signal} from \"../../fjsc/src/signals.ts\";\nimport {Api} from \"../api/api.ts\";\nimport {Generics} from \"./generics.ts\";\nimport {create, ifjs, signalMap} from \"../../fjsc/src/f2.ts\";\nimport {Track} from \"../models/db/tri/Track.ts\";\nimport {Route} from \"../routing/Route.ts\";\nimport {navigate} from \"../routing/Router.ts\";\nimport {dayFrom} from \"../functions/dates.ts\";\nimport {getImageUrl} from \"../functions/templates.ts\";\nimport {MediaFileType} from \"../enums/MediaFileType.ts\";\nimport {RequestableImageSize} from \"./requestableImageSize.ts\";\nimport {ServiceLink} from \"../models/ServiceLink.ts\";\nimport {LinkServices} from \"../enums/LinkServices.ts\";\nimport {Time} from \"../functions/Time.ts\";\nimport {Artists} from \"./artists.ts\";\n\nconst tracks = signal([]);\n\nexport class Tracks {\n static trackPage(route: Route, params: any) {\n const track = signal(null);\n const loading = signal(false);\n if (!params.id) {\n const urlParams = new URLSearchParams(window.location.search);\n params.id = urlParams.get(\"id\");\n if (!params.id) {\n return Generics.notFound();\n }\n }\n Api.getTrack(params.id ?? 0)\n .then(a => track.value = a)\n .finally(() => loading.value = false);\n\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\")\n .children(\n ifjs(loading, Generics.loading()),\n ifjs(track, Tracks.track(track))\n ).build()\n );\n }\n\n private static track(track$: Signal) {\n const title = compute(t => t?.title ?? \"\", track$);\n const artists = compute(t => t?.artists ?? \"\", track$);\n const releaseDate = compute(t => {\n return dayFrom(t?.release_date ?? new Date());\n }, track$);\n const id = compute(t => t?.id ?? 0, track$);\n const src = compute(i => getImageUrl(MediaFileType.trackCover, i, RequestableImageSize.s500), id);\n const albumTitle = compute(t => t?.album?.title ?? \"Unknown album\", track$);\n const albumUrl = compute(t => \"/album/\" + t?.album?.id, track$);\n\n return create(\"div\")\n .classes(\"flex-v\")\n .children(\n create(\"div\")\n .classes(\"flex\")\n .children(\n Generics.image(src, [\"image-500\"]),\n create(\"div\")\n .classes(\"flex-v\")\n .children(\n Generics.heading(1, title, [\"bold\", \"small-line\"]),\n Artists.artistsFromString(artists),\n create(\"div\")\n .classes(\"flex\", \"center-items\")\n .children(\n create(\"i\")\n .text(\"in album\")\n .build(),\n Generics.link(albumUrl, albumTitle)\n ).build(),\n Generics.date(releaseDate),\n Tracks.serviceLinks(track$),\n ).build()\n ).build()\n ).build();\n }\n\n static serviceLinks(track: Signal) {\n const linkMap = compute((t: Track|null) => new Map([\n [LinkServices.lyda, t?.link_lyda],\n [LinkServices.bandcamp, t?.link_bandcamp],\n [LinkServices.applemusic, t?.link_applemusic],\n [LinkServices.youtube, t?.link_youtube],\n [LinkServices.soundcloud, t?.link_soundcloud],\n [LinkServices.spotify, t?.link_spotify],\n ]), track);\n const links = compute(m => Array.from(m.values()).filter(l => l), linkMap);\n\n return signalMap(links, create(\"div\").classes(\"flex\"), link => {\n const service = linkMap.value.keys().find(s => link?.includes(s));\n return Tracks.serviceLink({\n service,\n link\n })\n });\n }\n\n static serviceLink(link: ServiceLink) {\n const fileMap = new Map([\n [LinkServices.youtube, \"youtube.png\"],\n [LinkServices.applemusic, \"apple.svg\"],\n [LinkServices.bandcamp, \"bandcamp.png\"],\n [LinkServices.soundcloud, \"soundcloud.svg\"],\n [LinkServices.spotify, \"spotify.svg\"],\n [LinkServices.lyda, \"lyda.svg\"],\n ]);\n const src = \"/images/services/\" + fileMap.get(link.service as LinkServices);\n\n return create(\"div\")\n .classes(\"flex\", \"center-items\", \"service-link\", \"noflexwrap\", link.service)\n .onclick(() => {\n window.open(link.link, \"_blank\");\n })\n .children(\n Generics.image(src, [\"service-logo\"]),\n create(\"span\")\n .text(link.service)\n .build(),\n ).build();\n }\n\n static tracksList(tracks: Signal) {\n return Generics.table(\n [\"\", \"Track title\", \"Artists\", \"Release date\", \"Length\"],\n tracks,\n (track) => create(\"tr\")\n .children(\n create(\"td\")\n .children(\n Generics.image(getImageUrl(MediaFileType.trackCover, track.id, RequestableImageSize.s50))\n ).build(),\n create(\"td\")\n .children(\n Generics.link(\"/track/\" + track.id, track.title)\n ).build(),\n create(\"td\")\n .children(Artists.artistsFromString(track.artists))\n .build(),\n create(\"td\")\n .text(dayFrom(track.release_date))\n .build(),\n create(\"td\")\n .text(Time.toTimeFromSeconds(track.length))\n .build()\n ).build()\n );\n }\n\n static tracksTab() {\n const filter = signal(\"\");\n const filteredTracks = compute((a, f) => a.filter(a => {\n return a.title.toLowerCase().includes(f.toLowerCase()) ||\n a.artists.toLowerCase().includes(f.toLowerCase());\n }), tracks, filter);\n const count = compute(a => a.length + \" Tracks\", filteredTracks);\n const loading = signal(false);\n Api.getTracks()\n .then(a => tracks.value = a)\n .finally(() => loading.value = false);\n\n return create(\"div\")\n .classes(\"flex-v\")\n .children(\n Generics.heading(2, count),\n ifjs(loading, Generics.loading()),\n Tracks.tracksList(filteredTracks)\n ).build();\n }\n}", "import {compute, Signal, signal} from \"../../fjsc/src/signals.ts\";\nimport {Album} from \"../models/db/tri/Album.ts\";\nimport {Api} from \"../api/api.ts\";\nimport {Generics} from \"./generics.ts\";\nimport {create, ifjs} from \"../../fjsc/src/f2.ts\";\nimport {Route} from \"../routing/Route.ts\";\nimport {Tab} from \"../models/Tab.ts\";\nimport {Tracks} from \"./tracks.ts\";\nimport {getImageUrl} from \"../functions/templates.ts\";\nimport {dayFrom} from \"../functions/dates.ts\";\nimport {MediaFileType} from \"../enums/MediaFileType.ts\";\nimport {RequestableImageSize} from \"./requestableImageSize.ts\";\nimport {Artists} from \"./artists.ts\";\n\nconst albums = signal([]);\n\nexport class Albums {\n static page() {\n const tabs: Tab[] = [\n {\n key: \"albums\",\n text: \"Albums\",\n icon: \"album\"\n },\n {\n key: \"tracks\",\n text: \"Tracks\",\n icon: \"graphic_eq\"\n }\n ];\n const tab$ = signal(tabs[0].key);\n\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\")\n .children(\n Generics.heading(1, \"Releases\", [\"bold\"]),\n Generics.tabSelector(tab$, tabs),\n Generics.tabContents(tab$, {\n \"albums\": () => Albums.albumsTab(),\n \"tracks\": () => Tracks.tracksTab()\n })\n ).build()\n );\n }\n\n static albumsTab() {\n const filter = signal(\"\");\n const filteredAlbums = compute((a, f) => a.filter(a => {\n return a.title.toLowerCase().includes(f.toLowerCase()) ||\n a.artists.toLowerCase().includes(f.toLowerCase());\n }), albums, filter);\n const count = compute(a => a.length + \" Albums\", filteredAlbums);\n const loading = signal(false);\n Api.getAlbums()\n .then(a => albums.value = a)\n .finally(() => loading.value = false);\n\n return create(\"div\")\n .classes(\"flex-v\")\n .children(\n Generics.heading(2, count),\n ifjs(loading, Generics.loading()),\n Albums.albumsList(filteredAlbums)\n ).build();\n }\n\n static albumsList(filteredAlbums: Signal) {\n return Generics.table(\n [\"\", \"Album title\", \"Artists\", \"Release date\", \"Tracks\"],\n filteredAlbums,\n (album) => create(\"tr\")\n .children(\n create(\"td\")\n .children(\n Generics.image(getImageUrl(MediaFileType.albumCover, album.id, RequestableImageSize.s50))\n ).build(),\n create(\"td\")\n .children(\n Generics.link(\"/album/\" + album.id, album.title)\n ).build(),\n create(\"td\")\n .children(\n Artists.artistsFromString(album.artists)\n ).build(),\n create(\"td\")\n .text(dayFrom(album.release_date))\n .build(),\n create(\"td\")\n .text(album.tracks?.length ?? 0)\n .build(),\n ).build()\n );\n }\n\n static albumPage(route: Route, params: any) {\n const album = signal(null);\n const loading = signal(false);\n loading.value = true;\n if (!params.id) {\n const urlParams = new URLSearchParams(window.location.search);\n params.id = urlParams.get(\"id\");\n if (!params.id) {\n return Generics.notFound();\n }\n }\n Api.getAlbum(params.id ?? 0)\n .then(a => album.value = a)\n .finally(() => loading.value = false);\n\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\")\n .children(\n ifjs(loading, Generics.loading()),\n ifjs(album, Albums.album(album)),\n ).build()\n );\n }\n\n static album(album: Signal) {\n const title = compute(a => a?.title ?? \"Album\", album);\n const releaseDate = compute(a => {\n return dayFrom(a?.release_date ?? new Date());\n }, album);\n const artists = compute(a => a?.artists ?? \"\", album);\n const tracks = compute(a => a?.tracks ?? [], album);\n const id = compute(a => a?.id ?? 0, album);\n const src = compute(i => getImageUrl(MediaFileType.albumCover, i, RequestableImageSize.s500), id);\n const firstTrack = compute(t => t.at(0) ?? null, tracks);\n\n return create(\"div\")\n .classes(\"flex-v\")\n .children(\n create(\"div\")\n .classes(\"flex\")\n .children(\n Generics.image(src, [\"album-cover\"]),\n create(\"div\")\n .classes(\"flex-v\")\n .children(\n Generics.heading(1, title, [\"bold\", \"small-line\"]),\n Artists.artistsFromString(artists),\n Generics.date(releaseDate),\n Tracks.serviceLinks(firstTrack)\n ).build(),\n ).build(),\n Tracks.tracksList(tracks)\n ).build();\n }\n}", "import type {AnyElement, StringOrSignal, TypeOrSignal} from \"./f2.ts\";\nimport {create, ifjs, signalMap} from \"./f2.ts\";\nimport type {\n BooleanConfig,\n ButtonConfig,\n ContainerConfig,\n HeadingConfig,\n IconConfig,\n InputConfig,\n SearchableSelectConfig,\n SelectOption,\n SelectOptionConfig,\n TextareaConfig,\n TextConfig,\n} from \"./Types.ts\";\nimport {InputType} from \"./Types.ts\";\nimport {compute, Signal, signal} from \"./signals.ts\";\n\nfunction getDisabledClass(config: { disabled?: TypeOrSignal }) {\n let disabledClass;\n if (config.disabled?.subscribe) {\n disabledClass = compute((newValue): string =>\n newValue ? \"disabled\" : \"enabled\", config.disabled as Signal);\n } else {\n disabledClass = config.disabled ? \"disabled\" : \"enabled\";\n }\n\n return disabledClass;\n}\n\nexport class FJSC {\n static button(config: ButtonConfig) {\n config.classes ??= [];\n\n return create(\"button\")\n .applyGenericConfig(config)\n .onclick(config.onclick)\n .classes(getDisabledClass(config))\n .attributes(\"tabindex\", config.tabindex ?? \"0\")\n .children(\n ifjs(config.icon, () => FJSC.icon(config.icon!)),\n ifjs(config.text, () => FJSC.text({\n text: config.text!,\n }))\n ).build();\n }\n\n static input(config: InputConfig) {\n const errors = signal([]);\n const hasError = compute((e) => [...e].length > 0, errors);\n const invalidClass = compute((has: boolean): string => has ? \"invalid\" : \"valid\", hasError);\n const touched = signal(false);\n const isPassword = config.type === InputType.password;\n const toggleState = signal(false);\n const configTypeSignal = config.type.constructor === Signal ? config.type as Signal : signal(config.type as InputType);\n const actualType = compute((t: boolean) => t ? InputType.text : configTypeSignal.value, toggleState);\n let lastChange = 0;\n let debounceTimeout: number | Timer | undefined;\n\n function validate(newValue: any) {\n errors.value = [];\n if (config.debounce) {\n if (Date.now() - lastChange < config.debounce) {\n if (debounceTimeout) {\n clearTimeout(debounceTimeout);\n }\n debounceTimeout = setTimeout(() => {\n debounceTimeout = undefined;\n validate(newValue);\n }, config.debounce);\n return;\n }\n }\n config.validators?.forEach(async valFunction => {\n const valErrors = await valFunction(newValue);\n if (valErrors) {\n errors.value = errors.value.concat(valErrors);\n }\n });\n if (config.required && (newValue === null || newValue === undefined || newValue === \"\") && touched.value) {\n errors.value = errors.value.concat([\"This field is required.\"]);\n }\n }\n\n let value: Signal = config.value as Signal;\n if (config.value?.subscribe) {\n config.value.subscribe(validate);\n validate(config.value.value);\n } else {\n validate(config.value as T);\n // @ts-ignore\n value = signal(config.value ?? \"\");\n }\n\n return create(\"div\")\n .classes(\"flex-v\", \"fjsc\")\n .children(\n create(\"label\")\n .classes(\"flex-v\", \"fjsc\", getDisabledClass(config))\n .text(config.label ?? \"\")\n .for(config.title)\n .children(\n create(\"input\")\n .classes(invalidClass)\n .applyGenericConfig(config)\n .type(actualType)\n .value(value)\n .accept(config.accept ?? \"\")\n .required(config.required ?? false)\n .placeholder(config.placeholder ?? \"\")\n .attributes(\"autofocus\", config.autofocus ?? \"\")\n .oninput((e: any) => {\n touched.value = true;\n lastChange = Date.now();\n if (!config.value?.subscribe) {\n validate(e.target.value);\n }\n\n if (config.onchange) {\n config.onchange(e.target.value);\n }\n })\n .onchange((e: any) => {\n touched.value = true;\n lastChange = Date.now();\n if (!config.value?.subscribe) {\n validate(e.target.value);\n }\n\n if (config.onchange) {\n config.onchange(e.target.value);\n }\n })\n .onkeydown(config.onkeydown ?? (() => {}))\n .name(config.name)\n .build(),\n ifjs(isPassword, FJSC.eyeButton(toggleState, () => {\n toggleState.value = !toggleState.value;\n })),\n ).build(),\n ifjs(hasError, FJSC.errorList(errors))\n ).build();\n }\n\n static eyeButton(toggleState: Signal, onClick: Function): AnyElement {\n const icon = compute((t: boolean): string => t ? \"visibility\" : \"visibility_off\", toggleState);\n\n return create(\"div\")\n .classes(\"fjsc-eye-button\")\n .onclick(onClick)\n .children(\n FJSC.icon({\n icon,\n adaptive: true,\n isUrl: false,\n })\n ).build();\n }\n\n static textarea(config: TextareaConfig) {\n const errors = signal([]);\n const hasError = compute((e) => e.length > 0, errors);\n const invalidClass = compute((has: boolean): string => has ? \"invalid\" : \"valid\", hasError);\n\n function validate(newValue: any) {\n errors.value = [];\n config.validators?.forEach(async valFunction => {\n const valErrors = await valFunction(newValue);\n if (valErrors) {\n errors.value = errors.value.concat(valErrors);\n }\n });\n if (config.required && (newValue === null || newValue === undefined || newValue === \"\")) {\n errors.value = errors.value.concat([\"This field is required.\"]);\n }\n }\n\n if (config.value?.subscribe) {\n config.value.subscribe(validate);\n validate(config.value.value);\n } else {\n validate(config.value as string);\n }\n\n return create(\"div\")\n .classes(\"flex-v\", \"fjsc\")\n .children(\n create(\"label\")\n .classes(\"flex-v\", \"fjsc\", getDisabledClass(config))\n .text(config.label ?? \"\")\n .for(config.name)\n .children(\n create(\"textarea\")\n .classes(invalidClass)\n .applyGenericConfig(config)\n .styles(\"resize\", config.resize ?? \"vertical\")\n .value(config.value)\n .required(config.required ?? false)\n .placeholder(config.placeholder ?? \"\")\n .attributes(\"autofocus\", config.autofocus ?? \"\", \"rows\", config.rows?.toString() ?? \"3\")\n .oninput((e: any) => {\n if (!config.value?.subscribe) {\n validate(e.target.value);\n }\n\n if (config.onchange) {\n config.onchange(e.target.value);\n }\n })\n .onchange((e: any) => {\n if (!config.value?.subscribe) {\n validate(e.target.value);\n }\n\n if (config.onchange) {\n config.onchange(e.target.value);\n }\n })\n .name(config.name)\n .build(),\n ).build(),\n ifjs(hasError, FJSC.errorList(errors))\n ).build();\n }\n\n static errorList(errors: Signal) {\n return signalMap(errors, create(\"div\")\n .classes(\"flex-v\", \"fjsc\", \"fjsc-error-list\"), FJSC.error);\n }\n\n static error(error: StringOrSignal) {\n return create(\"span\")\n .classes(\"fjsc-error\")\n .text(error)\n .build();\n }\n\n static area(config: ContainerConfig) {\n config.classes ??= [];\n config.children ??= [];\n\n return create(config.tag ?? \"div\")\n .applyGenericConfig(config)\n .classes(\"fjsc-area\")\n .children(...config.children)\n .build();\n }\n\n static container(config: ContainerConfig) {\n config.classes ??= [];\n config.children ??= [];\n\n return create(config.tag ?? \"div\")\n .applyGenericConfig(config)\n .classes(\"fjsc-container\")\n .children(...config.children)\n .build();\n }\n\n static text(config: TextConfig) {\n return create(config.tag ?? \"span\")\n .applyGenericConfig(config)\n .text(config.text)\n .build();\n }\n\n static heading(config: HeadingConfig) {\n return create(`h${config.level ?? 1}`)\n .applyGenericConfig(config)\n .text(config.text)\n .build();\n }\n\n static icon(config: IconConfig) {\n const icon = config.icon;\n const isMaterial = !config.isUrl;\n const iconClass = config.adaptive ? \"adaptive-icon\" : \"static-icon\";\n const pointerClass = config.title ? \"_\" : \"no-pointer\";\n\n if (isMaterial) {\n return create(\"i\")\n .applyGenericConfig(config)\n .classes(iconClass, \"material-symbols-outlined\", pointerClass)\n .text(icon)\n .onclick(config.onclick)\n .build();\n }\n\n return create(\"img\")\n .applyGenericConfig(config)\n .classes(iconClass, pointerClass)\n .attributes(\"src\", icon)\n .onclick(config.onclick)\n .build();\n }\n\n static searchableSelect(config: SearchableSelectConfig) {\n const options = config.options ?? signal([]);\n const value = config.value ?? signal(null);\n\n const search = signal(options.value.find(o => o.id === value.value)?.name ?? \"\");\n const optionsVisible = signal(false);\n const filtered = signal(options.value);\n const selectedIndex = signal(0);\n const filter = () => {\n filtered.value = options.value.filter(o => o.name.toLowerCase().includes(search.value.toLowerCase()));\n }\n options.subscribe(filter);\n search.subscribe(filter);\n filter();\n const selectedId = signal(options.value[0]?.id ?? null);\n const updateSelectedId = () => {\n selectedId.value = filtered.value[selectedIndex.value]?.id;\n }\n selectedIndex.subscribe(updateSelectedId);\n filtered.subscribe(updateSelectedId);\n updateSelectedId();\n const currentIcon = compute((vis: boolean): string => vis ? \"arrow_drop_up\" : \"arrow_drop_down\", optionsVisible);\n\n return create(\"div\")\n .applyGenericConfig(config)\n .classes(\"fjsc-search-select\", \"flex-v\", \"relative\")\n .children(\n ifjs(config.label, create(\"label\")\n .classes(\"fjsc\")\n .text(config.label)\n .build()),\n create(\"div\")\n .classes(\"flex\", \"fjsc-search-select-visible\", \"fjsc\")\n .children(\n create(\"input\")\n .classes(\"fjsc\", \"fjsc-search-select-input\", getDisabledClass(config))\n .value(search)\n .onfocus(() => {\n optionsVisible.value = true;\n })\n .onkeydown((e: any) => {\n switch (e.key) {\n case \"Enter\":\n e.preventDefault();\n e.stopPropagation();\n const selectedOption = filtered.value[selectedIndex.value];\n value.value = selectedOption?.id ?? value.value;\n search.value = selectedOption?.name ?? search.value;\n optionsVisible.value = false;\n break;\n case \"ArrowDown\":\n e.preventDefault();\n e.stopPropagation();\n selectedIndex.value = (selectedIndex.value + 1) % filtered.value.length;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n e.stopPropagation();\n selectedIndex.value = (selectedIndex.value - 1 + filtered.value.length) % filtered.value.length;\n break;\n case \"Escape\":\n case \"Tab\":\n optionsVisible.value = false;\n break;\n default:\n if ((e.keyCode > 32 && e.keyCode < 126) || e.key === \"Backspace\") {\n setTimeout(() => {\n search.value = e.target.value;\n selectedIndex.value = 0;\n });\n }\n break;\n }\n })\n .build(),\n create(\"div\")\n .classes(\"fjsc-search-select-dropdown\", getDisabledClass(config))\n .onclick(() => {\n optionsVisible.value = !optionsVisible.value;\n })\n .children(\n FJSC.icon({\n icon: currentIcon,\n adaptive: true,\n isUrl: false,\n })\n ).build()\n ).build(),\n ifjs(optionsVisible, signalMap(filtered, create(\"div\").classes(\"fjsc-search-select-options\", \"flex-v\"), (option: SelectOption) =>\n FJSC.searchSelectOption({option, value, search, optionsVisible, selectedId})))\n ).build();\n }\n\n static searchSelectOption(config: SelectOptionConfig) {\n let element: any;\n const selectedClass = compute((id: string): string => {\n element?.scrollIntoView({behavior: \"smooth\", block: \"nearest\"});\n return id === config.option.id ? \"selected\" : \"_\";\n }, config.selectedId);\n\n element = create(\"div\")\n .classes(\"fjsc-search-select-option\", \"flex\", \"gap\", \"padded\", selectedClass)\n .onclick(() => {\n config.value.value = config.option.id;\n config.search.value = config.option.name;\n config.optionsVisible.value = false;\n })\n .children(\n ifjs(config.option.image, FJSC.icon({\n icon: config.option.image ?? \"\",\n isUrl: config.option.imageIsUrl,\n adaptive: true\n })),\n create(\"span\")\n .text(config.option.name)\n .build()\n ).build();\n return element;\n }\n\n static checkbox(config: BooleanConfig) {\n const errors = signal([]);\n const hasError = compute((e) => e.length > 0, errors);\n const invalidClass = compute((has: boolean): string => has ? \"invalid\" : \"valid\", hasError);\n\n function validate(newValue: boolean) {\n errors.value = [];\n config.validators?.forEach(async valFunction => {\n const valErrors = await valFunction(newValue);\n if (valErrors) {\n errors.value = errors.value.concat(valErrors);\n }\n });\n if (config.required && (newValue === null || newValue === undefined || newValue === false)) {\n errors.value = errors.value.concat([\"This field is required.\"]);\n }\n }\n\n let checked: StringOrSignal;\n if (config.checked && config.checked.subscribe) {\n const sig = config.checked as Signal;\n sig.subscribe(validate);\n validate(sig.value);\n checked = compute(c => c.toString(), sig);\n } else {\n validate(config.checked as boolean);\n checked = config.checked.toString();\n }\n\n return create(\"div\")\n .classes(\"flex-v\", \"fjsc\")\n .children(\n create(\"label\")\n .applyGenericConfig(config)\n .classes(\"fjsc-checkbox-container\", invalidClass, getDisabledClass(config))\n .text(config.text)\n .children(\n create(\"input\")\n .type(InputType.checkbox)\n .name(config.name ?? \"\")\n .id(config.name ?? \"\")\n .required(config.required ?? false)\n .checked(checked)\n .onclick((e) => {\n const c = (e.target as HTMLInputElement).checked;\n if (!config.checked.subscribe) {\n validate(c);\n }\n\n config.onchange && config.onchange(c);\n })\n .build(),\n create(\"span\")\n .classes(\"fjsc-checkmark\")\n .children(\n ifjs(config.checked, create(\"span\")\n .classes(\"fjsc-checkmark-icon\")\n .text(\"✓\")\n .build())\n ).build(),\n ).build(),\n ifjs(hasError, FJSC.errorList(errors))\n ).build();\n }\n\n static toggle(config: BooleanConfig) {\n const errors = signal([]);\n const hasError = compute((e) => e.length > 0, errors);\n const invalidClass = compute((has: boolean): string => has ? \"invalid\" : \"valid\", hasError);\n\n function validate(newValue: boolean) {\n errors.value = [];\n config.validators?.forEach(async valFunction => {\n const valErrors = await valFunction(newValue);\n if (valErrors) {\n errors.value = errors.value.concat(valErrors);\n }\n });\n if (config.required && (newValue === null || newValue === undefined || newValue === false)) {\n errors.value = errors.value.concat([\"This field is required.\"]);\n }\n }\n\n if (config.checked.subscribe) {\n const sig = config.checked as Signal;\n sig.subscribe(validate);\n validate(sig.value);\n } else {\n validate(config.checked as boolean);\n }\n\n return create(\"div\")\n .classes(\"flex-v\", \"fjsc\")\n .children(\n create(\"label\")\n .applyGenericConfig(config)\n .classes(\"flex\", \"gap\", \"align-children\", invalidClass, getDisabledClass(config))\n .for(config.name ?? \"\")\n .children(\n create(\"input\")\n .type(InputType.checkbox)\n .classes(\"hidden\", \"fjsc-slider\")\n .id(config.name ?? \"\")\n .required(config.required ?? false)\n .checked(config.checked)\n .onclick((e) => {\n const checked = (e.target as HTMLInputElement).checked;\n if (!config.checked.subscribe) {\n validate(checked);\n }\n\n config.onchange && config.onchange(checked);\n })\n .build(),\n create(\"div\")\n .classes(\"fjsc-toggle-container\")\n .children(\n create(\"span\")\n .classes(\"fjsc-toggle-slider\")\n .build()\n ).build(),\n create(\"span\")\n .classes(\"fjsc-toggle-text\")\n .text(config.text ?? \"\")\n .build(),\n ).build(),\n ifjs(hasError, FJSC.errorList(errors))\n ).build();\n }\n}", "import {compute, signal, Signal} from \"../../fjsc/src/signals.ts\";\nimport {SearchResult} from \"../models/SearchResult.ts\";\nimport {AnyElement, create, ifjs, signalMap, StringOrSignal} from \"../../fjsc/src/f2.ts\";\nimport {getImageUrl, target} from \"../functions/templates.ts\";\nimport {MediaFileType} from \"../enums/MediaFileType.ts\";\nimport {RequestableImageSize} from \"./requestableImageSize.ts\";\nimport {navigate} from \"../routing/Router.ts\";\nimport {FJSC} from \"../../fjsc\";\nimport {InputType} from \"../../fjsc/src/Types.ts\";\nimport {Generics} from \"./generics.ts\";\nimport {Inputs} from \"./inputs.ts\";\n\nexport class Search {\n static results(results: Signal, title: StringOrSignal) {\n return create(\"div\")\n .classes(\"flex-v\", \"fjsc-fill-parent\")\n .children(\n create(\"div\")\n .classes(\"flex\", \"center-items\")\n .children(\n Generics.heading(2, title),\n ).build(),\n signalMap(results, create(\"div\").classes(\"flex\", \"search-results\", \"scroll-shadows\"), Search.result)\n ).build();\n }\n\n private static result(result: SearchResult) {\n let elementReference: AnyElement;\n let display = result.display;\n if (result.display.length > 50) {\n display = result.display.substring(0, 50) + \"...\";\n }\n let subtitle = result.subtitle;\n if (subtitle && subtitle.length > 50) {\n subtitle = subtitle.substring(0, 50) + \"...\";\n }\n\n const image = signal(\"/images/LOGO.svg\");\n const typeMap = new Map([\n [\"track\", MediaFileType.trackCover],\n [\"album\", MediaFileType.albumCover]\n ]);\n if (result.hasImage) {\n image.value = getImageUrl(typeMap.get(result.type)!, result.id, RequestableImageSize.s50);\n }\n\n elementReference = create(\"button\")\n .classes(\"fjsc\", \"search-result\", \"space-outwards\", \"padded\", \"flex\", \"noflexwrap\")\n .onclick(async () => {\n navigate(result.url);\n })\n .children(\n create(\"div\")\n .classes(\"flex\", \"noflexwrap\")\n .children(\n create(\"span\")\n .classes(\"search-result-image\")\n .children(\n create(\"img\")\n .src(image)\n .build()\n ).build(),\n create(\"div\")\n .classes(\"flex-v\", \"nogap\", \"search-result-text\")\n .children(\n create(\"div\")\n .classes(\"flex\", \"center-items\")\n .children(\n ifjs(result.exactMatch, FJSC.icon({\n icon: \"star\",\n classes: [\"nopointer\", \"svg\", \"inline-icon\"]\n })),\n create(\"span\")\n .classes(\"search-result-display\")\n .text(display)\n .build(),\n ).build(),\n create(\"span\")\n .classes(\"search-result-subtitle\", \"text-xsmall\")\n .text(subtitle)\n .build(),\n ).build(),\n ).build(),\n create(\"span\")\n .classes(\"search-result-type\", \"hideOnSmallBreakpoint\", result.type)\n .text(result.type)\n .build()\n ).build();\n return elementReference;\n }\n\n static searchInput(search: Signal) {\n let timeout: number|Timer|null;\n\n return create(\"div\")\n .classes(\"flex\", \"relative\", \"search-input-container\")\n .children(\n FJSC.input({\n type: InputType.text,\n name: \"search\",\n value: search,\n placeholder: \"Search\",\n classes: [\"search-input\"],\n onkeydown: (e) => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n search.value = target(e).value;\n }, 200);\n }\n }),\n Generics.icon(\"search\", [\"search-icon\"]),\n Generics.iconButton(\"close\", [\"clear-icon\"], () => {\n search.value = \"\";\n }),\n ).build();\n }\n}", "import {create, ifjs} from \"../../fjsc/src/f2.ts\";\nimport {Generics} from \"./generics.ts\";\nimport {FJSC} from \"../../fjsc\";\nimport {InputType} from \"../../fjsc/src/Types.ts\";\nimport {compute, Signal, signal} from \"../../fjsc/src/signals.ts\";\nimport {SearchResult} from \"../models/SearchResult.ts\";\nimport {target} from \"../functions/templates.ts\";\nimport {Api} from \"../api/api.ts\";\nimport {Search} from \"./search.ts\";\n\nexport class Home {\n static page() {\n const search = signal(\"\");\n const tracks = signal([]);\n const albums = signal([]);\n const loading = signal(false);\n search.subscribe(q => {\n if (!q || q === \"\") {\n tracks.value = [];\n albums.value = [];\n return;\n }\n Api.searchTracks(q)\n .then(r => tracks.value = r)\n .finally(() => loading.value = false);\n Api.searchAlbums(q)\n .then(r => albums.value = r)\n .finally(() => loading.value = false);\n });\n const hasTracks = compute(t => t.length > 0, tracks);\n const hasAlbums = compute(a => a.length > 0, albums);\n const normalLogo = \"/images/LOGO512_COLOR.png\";\n const hoverLogo = \"/images/LOGO512.png\";\n const src = signal(normalLogo);\n\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\", \"center-items\")\n .children(\n create(\"div\")\n .styles(\"border-radius\", \"999px\")\n .onmouseover(() => {\n src.value = hoverLogo;\n })\n .onmouseleave(() => {\n src.value = normalLogo;\n })\n .children(\n Generics.image(src, [\"home-logo\"]),\n ).build(),\n create(\"h1\")\n .children(\n create(\"b\").text(\"Tri\").build(),\n create(\"span\").text(\"Records\").build(),\n ).build(),\n Search.searchInput(search),\n create(\"div\")\n .classes(\"flex\", \"width-divided\")\n .children(\n ifjs(hasTracks, Search.results(tracks, \"Tracks\")),\n ifjs(hasAlbums, Search.results(albums, \"Albums\"))\n ).build()\n ).build(),\n );\n }\n}", "import {Signal} from \"../../fjsc/src/signals.ts\";\nimport {FJSC} from \"../../fjsc\";\nimport {InputType} from \"../../fjsc/src/Types.ts\";\n\nexport class Inputs {\n static text(value: Signal, label: string, name: string) {\n return FJSC.input({\n type: InputType.text,\n name,\n label,\n value,\n attributes: [\"autocomplete\", name],\n onchange: (v) => {\n value.value = v;\n }\n });\n }\n\n static longtext(value: Signal, label: string, name: string) {\n return FJSC.textarea({\n name,\n label,\n value,\n attributes: [\"autocomplete\", name],\n onchange: (v) => {\n value.value = v;\n }\n });\n }\n\n static date(value: Signal, label: string, name: string) {\n return FJSC.input({\n type: InputType.date,\n name,\n label,\n value,\n attributes: [\"autocomplete\", name],\n onchange: (v) => {\n value.value = v;\n }\n });\n }\n\n static number(value: Signal, label: string, name: string) {\n return FJSC.input({\n type: InputType.number,\n name,\n label,\n value,\n attributes: [\"autocomplete\", name],\n onchange: (v) => {\n value.value = v;\n }\n });\n }\n\n static url(link: Signal, label: string, name: string) {\n return FJSC.input({\n type: InputType.url,\n name,\n label,\n value: link,\n attributes: [\"autocomplete\", name],\n onchange: (v) => {\n link.value = v;\n }\n });\n }\n\n static email(email: Signal, label: string, name: string) {\n return FJSC.input({\n type: InputType.email,\n name,\n label,\n value: email,\n attributes: [\"autocomplete\", name],\n onchange: (v) => {\n email.value = v;\n }\n });\n }\n}\n", "import {Generics} from \"./generics.ts\";\nimport {SubmissionRequest} from \"../models/SubmissionRequest.ts\";\nimport {compute, signal} from \"../../fjsc/src/signals.ts\";\nimport {dayFrom, todayWithOffset} from \"../functions/dates.ts\";\nimport {create, ifjs} from \"../../fjsc/src/f2.ts\";\nimport {FJSC} from \"../../fjsc\";\nimport {Inputs} from \"./inputs.ts\";\nimport {Api} from \"../api/api.ts\";\nimport {notify} from \"../functions/notifications.ts\";\nimport {NotificationType} from \"../enums/NotificationType.ts\";\nimport {navigate} from \"../routing/Router.ts\";\n\nexport class Submission {\n static page() {\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\", \"center-items\")\n .children(\n Generics.heading(1, \"Submit\", [\"bold\"]),\n Submission.form()\n ).build()\n );\n }\n\n static form() {\n const link = signal(\"\");\n const actualLink = compute(l => {\n if (l.includes(\"soundcloud.com\")) {\n return l.split(\"?\")[0];\n }\n return l;\n }, link);\n const desiredReleaseDate = signal(dayFrom(todayWithOffset(90)));\n const artistName = signal(\"\");\n const email = signal(\"\");\n const message = signal(\"\");\n const anyEmpty = compute((l, d, a, e, m) => {\n return l === \"\" || d === null || a === \"\" || e === \"\" || m === \"\";\n }, actualLink, desiredReleaseDate, artistName, email, message);\n const loading = signal(false);\n const buttonDisabled = compute((a, l) => a || l, anyEmpty, loading);\n\n return create(\"div\")\n .classes(\"flex-v\", \"form-content\")\n .children(\n Inputs.url(link, \"Link\", \"link\"),\n Inputs.date(desiredReleaseDate, \"Desired release date\", \"desired_release_date\"),\n Inputs.text(artistName, \"Artist name\", \"artist_name\"),\n Inputs.email(email, \"Email\", \"email\"),\n Inputs.longtext(message, \"Message\", \"message\"),\n FJSC.button({\n text: \"Submit\",\n classes: [\"positive\"],\n disabled: buttonDisabled,\n icon: { icon: \"send\" },\n onclick: () => {\n loading.value = true;\n Api.submitRelease({\n link: actualLink.value,\n desiredReleaseDate: desiredReleaseDate.value,\n artistName: artistName.value,\n email: email.value,\n message: message.value,\n }).then(() => {\n notify(\"Submission submitted\", NotificationType.success);\n }).finally(() => {\n loading.value = false;\n navigate(\"/submission-success\");\n });\n }\n }),\n ifjs(loading, create(\"div\")\n .classes(\"flex\", \"center-items\")\n .children(\n create(\"span\")\n .text(\"Submitting\")\n .build(),\n Generics.loading(),\n ).build()),\n create(\"span\")\n .classes(\"color-dim\")\n .text(\"Alternatively, you can also submit a release by sending an email to alex @ trirecords.eu\")\n .build()\n ).build();\n }\n\n static successPage() {\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\", \"center-items\")\n .children(\n create(\"h1\")\n .classes(\"flex\", \"center-items\")\n .children(\n create(\"b\").text(\"Success\").build(),\n Generics.icon(\"check\")\n ).build(),\n create(\"p\")\n .text(\"Your submission has been received. We will get back to you as soon as possible.\")\n .build()\n ).build()\n );\n }\n}", "export function currency(value: number|undefined|null, currency = \"USD\") {\n if (!value) {\n return \"--\";\n }\n\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency\n }).format(value);\n}\n\nexport function linkPath(link: string) {\n if (!link) {\n return \"\";\n }\n const noProtocol = link.replace(/^https?:\\/\\//, \"\");\n const removeGetStrings = [\"spotify\", \"lyda\", \"apple\", \"bandcamp\", \"soundcloud\"];\n let noParams = noProtocol;\n if (removeGetStrings.some(s => noProtocol.includes(s))) {\n noParams = noProtocol.split(\"?\")[0];\n }\n const firstSlash = noParams.indexOf(\"/\");\n if (firstSlash > 0) {\n noParams = noParams.substring(firstSlash, noParams.length);\n }\n return noParams;\n}\n", "import {Generics} from \"./generics.ts\";\nimport {create} from \"../../fjsc/src/f2.ts\";\n\nexport class About {\n static page() {\n return Generics.pageFrame(\n create(\"div\")\n .classes(\"flex-v\", \"center-items\")\n .children(\n Generics.heading(1, \"About\", [\"bold\"]),\n Generics.paragraph(\"Tri Records is a place for artists to focus on their music - We handle the rest.\"),\n Generics.paragraph(\"Artists keep 85% of the royalties.\"),\n create(\"div\")\n .classes(\"flex\", \"center-items\")\n .children(\n Generics.link(\"https://trirecords.bandcamp.com/\", \"Bandcamp\"),\n Generics.link(\"https://open.spotify.com/playlist/44rDC5pq9ueh86XAPH0OEf\", \"Spotify\"),\n Generics.link(\"https://soundcloud.com/tri-label\", \"Soundcloud\"),\n Generics.link(\"https://www.youtube.com/channel/UCoLXAcPPIGNRvKRSCFVULeQ\", \"Youtube\"),\n ).build(),\n create(\"hr\"),\n create(\"div\")\n .classes(\"flex\", \"center-items\", \"color-dim\")\n .children(\n Generics.paragraph(\"Made by \"),\n Generics.link(\"https://targoninc.com\", \"Targon Industries\"),\n Generics.paragraph(\"in Berlin, Germany\"),\n ).build(),\n ).build()\n );\n }\n}", "import {AnyElement, AnyNode, create, ifjs, nullElement, signalMap, StringOrSignal} from \"../../fjsc/src/f2.ts\";\nimport {NotificationType} from \"../enums/NotificationType.ts\";\nimport {compute, signal, Signal} from \"../../fjsc/src/signals.ts\";\nimport {Nav} from \"./nav.ts\";\nimport {Route} from \"../routing/Route.ts\";\nimport type {NavItem} from \"../models/NavItem.ts\";\nimport {Albums} from \"./albums.ts\";\nimport {Tracks} from \"./tracks.ts\";\nimport {Tab} from \"../models/Tab.ts\";\nimport {FJSC} from \"../../fjsc\";\nimport {navigate} from \"../routing/Router.ts\";\nimport {Home} from \"./home.ts\";\nimport {Submission} from \"./submission.ts\";\nimport {dayFrom} from \"../functions/dates.ts\";\nimport {Time} from \"../functions/Time.ts\";\nimport {currency} from \"../functions/formatters.ts\";\nimport {Artists} from \"./artists.ts\";\nimport {About} from \"./about.ts\";\n\nexport class Generics {\n static notFound() {\n return Generics.pageFrame(\n create(\"h1\")\n .text(\"404\")\n .build()\n );\n }\n\n static nav() {\n return create(\"nav\")\n .classes(\"flex\", \"center-items\")\n .children(\n ...routes.filter(r => r.showInNav === true)\n .map(r => {\n return Nav.navItem({\n text: r.title,\n path: r.path,\n icon: r.icon,\n });\n })\n ).build();\n }\n\n static pageFrame(...content: (AnyElement | Signal)[]) {\n return create(\"div\")\n .classes(\"container\", \"flex-v\")\n .children(\n Generics.nav(),\n ...content\n ).build();\n }\n\n static container(layer: number, content: (AnyElement | Signal)[], extraClasses: string[] = []) {\n return create(\"div\")\n .classes(\"container\", \"border\", \"layer-\" + layer, ...extraClasses)\n .children(...content)\n .build();\n }\n\n static message(message: StringOrSignal) {\n return ifjs(message, create(\"span\")\n .text(message)\n .build());\n }\n\n static image(src: StringOrSignal, extraClasses: StringOrSignal[] = [], size = \"50\") {\n return create(\"img\")\n .classes(...extraClasses)\n .height(size)\n .src(src)\n .build();\n }\n\n static icon(icon: StringOrSignal, classes: StringOrSignal[] = [], onclick: Function = () => {\n }) {\n return create(\"i\")\n .classes(\"material-symbols-outlined\", ...classes)\n .text(icon)\n .onclick(onclick)\n .build();\n }\n\n static iconButton(icon: StringOrSignal, classes: StringOrSignal[] = [], onclick: Function = () => {\n }) {\n return create(\"div\")\n .classes(\"icon-button\", ...classes)\n .children(\n Generics.icon(icon, [], onclick)\n ).build();\n }\n\n static notification(type: NotificationType = NotificationType.success, text = \"Success!\") {\n return create(\"div\")\n .classes(\"notification\", \"container\", \"border\", type)\n .text(text)\n .build();\n }\n\n static list(entries: Signal | T[], template: (entry: T) => AnyElement) {\n if (entries instanceof Signal) {\n return create(\"div\")\n .classes(\"container\", \"layer-2\")\n .children(\n signalMap(entries, create(\"div\").classes(\"flex-v\"), template)\n ).build();\n }\n\n return create(\"div\")\n .classes(\"container\", \"layer-2\", \"flex-v\")\n .children(\n ...entries.map(template)\n ).build();\n }\n\n static loading() {\n return create(\"div\")\n .classes(\"loading\")\n .build();\n }\n\n static heading(level: number, text: StringOrSignal, classes: StringOrSignal[] = []) {\n return create(`h${level}`)\n .classes(...classes)\n .text(text)\n .build();\n }\n\n static table(headers: StringOrSignal[], entries: Signal | T[], rowTemplate: (entry: T) => AnyElement) {\n if (entries instanceof Signal) {\n return create(\"table\")\n .classes(\"container\", \"layer-2\")\n .children(\n create(\"thead\")\n .children(\n create(\"tr\")\n .children(\n ...headers.map(c => create(\"th\").text(c).build())\n ).build()\n ).build(),\n signalMap(entries, create(\"tbody\"), rowTemplate)\n ).build();\n }\n\n return create(\"table\")\n .classes(\"container\", \"layer-2\")\n .children(\n create(\"thead\")\n .children(\n create(\"tr\")\n .children(\n ...headers.map(c => create(\"th\").text(c).build())\n ).build()\n ).build(),\n create(\"tbody\")\n .children(\n ...entries.map(rowTemplate)\n ).build()\n ).build();\n }\n\n static tableRow(...data: any[]) {\n return create(\"tr\")\n .children(\n ...data.map(d => create(\"td\").text(d).build())\n ).build();\n }\n\n static tabSelector(tab$: Signal, tabs: Tab[]) {\n return create(\"div\")\n .classes(\"flex\", \"center-items\")\n .children(\n ...tabs.map(tab => {\n const activeClass = compute((t): string => t === tab.key ? \"active\" : \"_\", tab$);\n\n return FJSC.button({\n text: tab.text,\n icon: {icon: tab.icon},\n classes: [activeClass],\n onclick: () => {\n tab$.value = tab.key;\n }\n })\n })\n ).build();\n }\n\n static tabContents(tab$: Signal, templateMap: Record) {\n const template = compute(t => {\n if (templateMap[t]) {\n return templateMap[t]();\n }\n return nullElement();\n }, tab$);\n\n return create(\"div\")\n .children(template)\n .build();\n }\n\n static link(url: StringOrSignal, title: StringOrSignal) {\n let isRemote = false;\n if (typeof url === \"string\") {\n isRemote = url.includes(\"http\");\n } else {\n isRemote = url.value.includes(\"http\");\n }\n\n return create(\"div\")\n .classes(\"link-container\")\n .children(\n create(\"a\")\n .classes(\"underline\")\n .href(url)\n .target(isRemote ? \"_blank\" : \"_self\")\n .title(url)\n .text(title)\n .onclick(e => {\n if (!isRemote && e.button === 0) {\n e.preventDefault();\n if (typeof url === \"string\") {\n navigate(url);\n } else {\n navigate(url.value);\n }\n }\n }).build()\n ).build();\n }\n\n static divider() {\n return create(\"hr\")\n .build();\n }\n\n static date(date: Signal) {\n const dateAsDay = compute(d => dayFrom(d), date);\n const ago = compute(d => Time.ago(new Date(d)), date);\n\n return Generics.partedContainer([dateAsDay, ago]);\n }\n\n static partedContainer(strings: StringOrSignal[]) {\n return create(\"div\")\n .classes(\"parted-container\")\n .children(\n ...strings.map(s => create(\"span\")\n .text(s)\n .build())\n ).build();\n }\n\n static currency(amount: Signal) {\n const formatted = compute(a => currency(a), amount);\n\n return create(\"span\")\n .classes(\"currency\")\n .text(formatted)\n .build();\n }\n\n static paragraph(text: string) {\n return create(\"p\")\n .text(text)\n .build();\n }\n}\n\nexport const routes: Route[] = [\n {\n path: \"/\",\n title: \"Home\",\n aliases: [\"home\"],\n template: Home.page,\n icon: \"home\",\n showInNav: true,\n },\n {\n path: \"404\",\n title: \"404\",\n aliases: [\"error\", \"not-found\"],\n template: Generics.notFound,\n },\n {\n path: \"releases\",\n title: \"Releases\",\n template: Albums.page,\n icon: \"album\",\n showInNav: true,\n },\n {\n path: \"artists\",\n title: \"Artists\",\n template: Artists.page,\n icon: \"group\",\n showInNav: true,\n },\n {\n path: \"submit\",\n title: \"Submit\",\n template: Submission.page,\n icon: \"move_to_inbox\",\n showInNav: true,\n },\n {\n path: \"album\",\n aliases: [\"release\"],\n pathParams: [\"id\"],\n title: \"Album\",\n template: Albums.albumPage,\n icon: \"album\",\n },\n {\n path: \"artist\",\n pathParams: [\"name\"],\n title: \"Artist\",\n template: Artists.artistPage,\n icon: \"artist\",\n },\n {\n path: \"about\",\n title: \"About\",\n template: About.page,\n icon: \"info\",\n showInNav: true,\n },\n {\n path: \"track\",\n pathParams: [\"id\"],\n title: \"Track\",\n template: Tracks.trackPage,\n icon: \"album\",\n },\n {\n path: \"submission-success\",\n title: \"Submission success\",\n template: Submission.successPage,\n icon: \"check\",\n }\n];", "import {currentUser, router, userLoading} from \"./code/state.ts\";\nimport {Api} from \"./code/api/api.ts\";\nimport {startRouter} from \"./code/routing/Router.ts\";\nimport {routes} from \"./code/components/generics.ts\";\n\nrouter.value!.setRoutes(routes);\nstartRouter();\n" ], "mappings": "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", "debugId": "42886F840589090A64756E2164756E21", "names": [] }