mongoku
Version:
[](https://github.com/huggingface/Mongoku/actions/workflows/ci.yml)
182 lines (179 loc) • 10.9 kB
JavaScript
import './async-DUoD1OpG.js';
import { h as head, a as attr, e as escape_html, b as ensure_array_like, c as attr_class, s as stringify, d as derived, f as clsx } from './root-otUAnOAR.js';
import { r as resolve } from './server2-D_y4YbpC.js';
import { p as page } from './index2-B0RgZaJY.js';
import { n as notificationStore } from './notifications.svelte-CIqkoPWX.js';
import './client-COtw9Xqw.js';
import './server-Crjo4w1q.js';
import './routing-EDfUNu8L.js';
import 'zod';
import './state.svelte-Bj5yxNNk.js';
import './client2-BIa3wTXU.js';
import './utils-BQzn9ikS.js';
import './index-CtYzvcG6.js';
import './exports-B5ORJhfK.js';
const breadcrumbs = {
get items() {
const list = page.data.breadcrumbs ?? [];
return list.reduce(
(prev, curr) => [
...prev,
{
label: curr.label,
href: `${prev.at(-1)?.href ?? ""}${curr.path}`
}
],
[]
);
}
};
function Breadcrumbs($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
if (breadcrumbs.items.length > 0) {
$$renderer2.push("<!--[0-->");
$$renderer2.push(`<nav aria-label="Breadcrumb" class="hidden md:flex items-center gap-1 text-sm"><!--[-->`);
const each_array = ensure_array_like(breadcrumbs.items);
for (let index = 0, $$length = each_array.length; index < $$length; index++) {
let crumb = each_array[index];
if (crumb.href && index < breadcrumbs.items.length - 1) {
$$renderer2.push("<!--[0-->");
$$renderer2.push(`<a${attr("href", resolve(crumb.href))} class="px-2 py-1 rounded-md hover:bg-[var(--color-3)] transition no-underline" style="color: var(--text);">${escape_html(crumb.label)}</a>`);
} else {
$$renderer2.push("<!--[-1-->");
$$renderer2.push(`<span aria-current="page" class="px-2 py-1 rounded-md font-medium" style="color: var(--text);">${escape_html(crumb.label)}</span>`);
}
$$renderer2.push(`<!--]--> `);
if (index < breadcrumbs.items.length - 1) {
$$renderer2.push("<!--[0-->");
$$renderer2.push(`<span style="color: var(--text-secondary);">/</span>`);
} else {
$$renderer2.push("<!--[-1-->");
}
$$renderer2.push(`<!--]-->`);
}
$$renderer2.push(`<!--]--></nav>`);
} else {
$$renderer2.push("<!--[-1-->");
}
$$renderer2.push(`<!--]-->`);
});
}
function IconClose($$renderer, $$props) {
let { class: className = "w-4 h-4" } = $$props;
$$renderer.push(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"${attr_class(clsx(className))}><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>`);
}
function Notifications($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
$$renderer2.push(`<div class="notifications svelte-2qov3s"><!--[-->`);
const each_array = ensure_array_like(notificationStore.items);
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
let notification = each_array[$$index];
$$renderer2.push(`<div${attr_class(`notification notification-${stringify(notification.type)}`, "svelte-2qov3s")}><span>${escape_html(notification.message)}</span> <button aria-label="Dismiss notification" class="svelte-2qov3s">`);
IconClose($$renderer2, { class: "w-[18px] h-[18px]" });
$$renderer2.push(`<!----></button></div>`);
}
$$renderer2.push(`<!--]--></div>`);
});
}
function OriginWarning($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
{
$$renderer2.push("<!--[-1-->");
}
$$renderer2.push(`<!--]-->`);
});
}
function PageSwitcher($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
const { class: className } = $$props;
const categories = derived(() => (page.data.categories ?? []).map((x) => ({
...x,
href: page.url.pathname.split("/").slice(0, -1).join("/") + "/" + x.key
})));
const currentPath = derived(() => page.url.pathname.split("/").pop());
if (categories().length) {
$$renderer2.push("<!--[0-->");
$$renderer2.push(`<div${attr_class(`hidden sm:flex rounded-lg border border-[var(--border-color)] overflow-hidden bg-[var(--light-background)] shadow-sm ${stringify(className)}`)}><!--[-->`);
const each_array = ensure_array_like(categories());
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
let category = each_array[$$index];
const isActive = currentPath() === category.key;
if (isActive) {
$$renderer2.push("<!--[0-->");
$$renderer2.push(`<span class="px-3 py-1.5 text-[13px] font-medium bg-[var(--color-1)] shadow-[inset_0_-1px_0_rgba(0,0,0,0.06)] cursor-default" style="color: var(--text);">${escape_html(category.label)}</span>`);
} else {
$$renderer2.push("<!--[-1-->");
$$renderer2.push(`<a data-sveltekit-reload=""${attr("href", resolve(category.href))} class="px-3 py-1.5 text-[13px] hover:bg-[var(--color-3)] transition no-underline" style="color: var(--text-secondary);">${escape_html(category.label)}</a>`);
}
$$renderer2.push(`<!--]-->`);
}
$$renderer2.push(`<!--]--></div>`);
} else {
$$renderer2.push("<!--[-1-->");
}
$$renderer2.push(`<!--]-->`);
});
}
function sunIcon($$renderer) {
$$renderer.push(`<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2m0 16v2m10-10h-2M4 12H2m15.364-7.364-1.414 1.414M8.05 16.95l-1.414 1.414m0-12.728L8.05 6.364m10.607 10.607 1.414 1.414"></path></svg>`);
}
function moonIcon($$renderer) {
$$renderer.push(`<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>`);
}
function systemIcon($$renderer) {
$$renderer.push(`<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line></svg>`);
}
function ThemeSwitcher($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
$$renderer2.push(`<div class="theme-switcher inline-flex rounded-lg border border-[var(--border-color)] bg-[var(--light-background)] overflow-hidden text-sm font-medium svelte-u8uo5a" style="color: var(--text);"><button class="inline-flex items-center gap-2 px-2.5 py-1.5 hover:bg-[var(--color-3)] transition cursor-pointer svelte-u8uo5a" aria-label="Toggle theme"><span class="theme-content theme-light inline-flex items-center gap-2 svelte-u8uo5a">`);
sunIcon($$renderer2);
$$renderer2.push(`<!----> <span class="hidden sm:inline text-[13px]" style="color: var(--text-secondary);">Light</span></span> <span class="theme-content theme-dark inline-flex items-center gap-2 svelte-u8uo5a">`);
moonIcon($$renderer2);
$$renderer2.push(`<!----> <span class="hidden sm:inline text-[13px]" style="color: var(--text-secondary);">Dark</span></span> <span class="theme-content theme-system-light inline-flex items-center gap-2 svelte-u8uo5a">`);
sunIcon($$renderer2);
$$renderer2.push(`<!----></span> <span class="theme-content theme-system-dark inline-flex items-center gap-2 svelte-u8uo5a">`);
moonIcon($$renderer2);
$$renderer2.push(`<!----></span></button> <div class="w-px bg-[var(--border-color)]"></div> <button class="inline-flex items-center gap-2 px-2.5 py-1.5 hover:bg-[var(--color-3)] transition cursor-pointer svelte-u8uo5a" aria-label="Switch to system theme">`);
systemIcon($$renderer2);
$$renderer2.push(`<!----> <span class="theme-text-system hidden sm:inline text-[13px] svelte-u8uo5a" style="color: var(--text-secondary);">System</span></button></div>`);
});
}
function _layout($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let { children, data } = $$props;
const pageTitle = derived(() => {
const items = breadcrumbs.items.slice(-2).reverse();
if (items.length === 0) {
return "Mongoku";
}
return items.map((b) => b.label).join(" - ");
});
head("12qhfyh", $$renderer2, ($$renderer3) => {
$$renderer3.title(($$renderer4) => {
$$renderer4.push(`<title>${escape_html(pageTitle())}</title>`);
});
});
$$renderer2.push(`<div style="min-height: 100vh"><header class="sticky top-0 z-50 border-b border-[var(--border-color)] bg-[var(--background-color)]/80"><div class="max-w-[96rem] mx-auto px-4 sm:px-6 lg:px-8"><div class="h-14 flex items-center gap-3"><a${attr("href", resolve("/"))} class="inline-flex items-center gap-2 group no-underline hover:no-underline"><span class="inline-flex items-center justify-center w-7 h-7 rounded-md bg-black dark:bg-white text-white dark:text-black text-sm font-semibold select-none">M</span> <span class="text-lg font-semibold tracking-tight" style="color: var(--text);">Mongoku</span></a> <div class="hidden md:block w-px h-5 bg-[var(--border-color)]"></div> `);
Breadcrumbs($$renderer2);
$$renderer2.push(`<!----> <div class="ml-auto flex items-center gap-2">`);
PageSwitcher($$renderer2, { class: "" });
$$renderer2.push(`<!----> `);
ThemeSwitcher($$renderer2);
$$renderer2.push(`<!----> `);
if (data.oauthEnabled && data.user) {
$$renderer2.push("<!--[0-->");
$$renderer2.push(`<div class="hidden md:block w-px h-5 bg-[var(--border-color)]"></div> <div class="flex items-center gap-1.5"><span class="text-xs text-[var(--text-muted)] max-w-32 truncate"${attr("title", data.user.email)}>${escape_html(data.user.name || data.user.email || "User")}</span> <form method="POST"${attr("action", resolve("/auth/logout"))}><button type="submit" class="inline-flex items-center justify-center rounded-md px-2 py-1 text-xs text-[var(--text-muted)] hover:text-[var(--text)] hover:bg-[var(--hover-background)] transition-colors cursor-pointer">Log out</button></form></div>`);
} else {
$$renderer2.push("<!--[-1-->");
}
$$renderer2.push(`<!--]--></div></div></div></header> `);
OriginWarning($$renderer2, { serverOrigin: data.serverOrigin, readOnly: data.readOnly });
$$renderer2.push(`<!----> <main class="max-w-[96rem] mx-auto px-4 sm:px-6 lg:px-8 py-6 md:py-10">`);
Notifications($$renderer2);
$$renderer2.push(`<!----> <div class="flex flex-col gap-6">`);
children($$renderer2);
$$renderer2.push(`<!----></div></main> <div></div></div>`);
});
}
export { _layout as default };
//# sourceMappingURL=_layout.svelte-CLPxHDiP.js.map