Refactor environment variable declarations, update client entry points, and optimize asset handling in SvelteKit project for improved performance and maintainability.
CI / build (push) Has been skipped
CI / deploy (push) Successful in 1m57s

This commit is contained in:
eewing
2026-02-17 15:18:31 -06:00
parent 7ac169c1e4
commit ec7df92b21
257 changed files with 12058 additions and 483 deletions
@@ -0,0 +1,56 @@
import { n as noop, g as getContext, e as escape_html } from "../../chunks/index.js";
import "clsx";
import { w as writable } from "../../chunks/exports.js";
import "@sveltejs/kit/internal/server";
import "../../chunks/root.js";
import "@sveltejs/kit/internal";
import "../../chunks/utils.js";
function create_updated_store() {
const { set, subscribe } = writable(false);
{
return {
subscribe,
// eslint-disable-next-line @typescript-eslint/require-await
check: async () => false
};
}
}
const is_legacy = noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString());
if (is_legacy) {
({
data: {},
form: null,
error: null,
params: {},
route: { id: null },
state: {},
status: -1,
url: new URL("https://example.com")
});
}
const stores = {
updated: /* @__PURE__ */ create_updated_store()
};
({
check: stores.updated.check
});
function context() {
return getContext("__request__");
}
const page$1 = {
get error() {
return context().page.error;
},
get status() {
return context().page.status;
}
};
const page = page$1;
function Error$1($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
$$renderer2.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);
});
}
export {
Error$1 as default
};
@@ -0,0 +1,34 @@
import { redirect } from "@sveltejs/kit";
import PocketBase from "pocketbase";
const POCKETBASE_URL = "https://pocketbase.ccllc.pro";
const LOGIN_PATH = "/login";
const LOGOUT_PATH = "/logout";
function isPublicRoute(pathname) {
return pathname === LOGIN_PATH || pathname.startsWith(LOGIN_PATH + "/") || pathname === LOGOUT_PATH;
}
const handle = async ({ event, resolve }) => {
event.locals.pb = new PocketBase(POCKETBASE_URL);
event.locals.pb.authStore.loadFromCookie(event.request.headers.get("cookie") || "");
try {
if (event.locals.pb.authStore.isValid) {
await event.locals.pb.collection("users").authRefresh();
}
} catch {
event.locals.pb.authStore.clear();
}
event.locals.user = event.locals.pb.authStore.record ?? null;
if (!event.locals.user && !isPublicRoute(event.url.pathname)) {
const redirectTo = event.url.pathname + event.url.search;
const loginUrl = redirectTo && redirectTo !== "/" ? `${LOGIN_PATH}?redirectTo=${encodeURIComponent(redirectTo)}` : LOGIN_PATH;
throw redirect(303, loginUrl);
}
const response = await resolve(event);
response.headers.append(
"set-cookie",
event.locals.pb.authStore.exportToCookie({ httpOnly: false, sameSite: "Lax" })
);
return response;
};
export {
handle
};
@@ -0,0 +1,9 @@
import { s as slot } from "../../chunks/index.js";
function _layout($$renderer, $$props) {
$$renderer.push(`<!--[-->`);
slot($$renderer, $$props, "default", {});
$$renderer.push(`<!--]-->`);
}
export {
_layout as default
};
@@ -0,0 +1 @@
@@ -0,0 +1,9 @@
const COLLECTION = "Stackq_Items";
const load = async ({ locals }) => {
const list = await locals.pb.collection(COLLECTION).getFullList({ sort: "-created", expand: "Parent" }).catch(() => []);
const itemsForParent = list.map((i) => ({ id: i.id, Item: i.Item, SKU: i.SKU }));
return { itemsForParent };
};
export {
load
};
@@ -0,0 +1,106 @@
import "clsx";
import { a as attributes, c as clsx, b as bind_props } from "../../chunks/index.js";
import { c as cn } from "../../chunks/utils2.js";
import { tv } from "tailwind-variants";
const buttonVariants = tv({
base: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
variants: {
variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90 shadow-xs",
destructive: "bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white shadow-xs",
outline: "bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs",
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 shadow-xs",
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
link: "text-primary underline-offset-4 hover:underline"
},
size: {
default: "h-9 px-4 py-2 has-[>svg]:px-3",
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
icon: "size-9",
"icon-sm": "size-8",
"icon-lg": "size-10"
}
},
defaultVariants: { variant: "default", size: "default" }
});
function Button($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
class: className,
variant = "default",
size = "default",
ref = null,
href = void 0,
type = "button",
disabled,
children,
$$slots,
$$events,
...restProps
} = $$props;
if (href) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<a${attributes({
"data-slot": "button",
class: clsx(cn(buttonVariants({ variant, size }), className)),
href: disabled ? void 0 : href,
"aria-disabled": disabled,
role: disabled ? "link" : void 0,
tabindex: disabled ? -1 : void 0,
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></a>`);
} else {
$$renderer2.push("<!--[!-->");
$$renderer2.push(`<button${attributes({
"data-slot": "button",
class: clsx(cn(buttonVariants({ variant, size }), className)),
type,
disabled,
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></button>`);
}
$$renderer2.push(`<!--]-->`);
bind_props($$props, { ref });
});
}
function _page($$renderer) {
{
$$renderer.push("<!--[!-->");
$$renderer.push(`<main class="flex min-h-screen flex-col items-center justify-center gap-6 p-8"><h1 class="text-2xl font-semibold">Stackq</h1> <p class="text-muted-foreground">Svelte 5 + shadcn-svelte + PocketBase</p> <div class="flex w-full max-w-xs flex-col gap-2"><a href="/items" class="block">`);
Button($$renderer, {
class: "w-full",
children: ($$renderer2) => {
$$renderer2.push(`<!---->Items table`);
},
$$slots: { default: true }
});
$$renderer.push(`<!----></a> <a href="/items" class="block">`);
Button($$renderer, {
class: "w-full",
variant: "outline",
children: ($$renderer2) => {
$$renderer2.push(`<!---->New item`);
},
$$slots: { default: true }
});
$$renderer.push(`<!----></a> <a href="/logout" class="block">`);
Button($$renderer, {
class: "w-full",
variant: "outline",
children: ($$renderer2) => {
$$renderer2.push(`<!---->Log out`);
},
$$slots: { default: true }
});
$$renderer.push(`<!----></a></div></main>`);
}
$$renderer.push(`<!--]-->`);
}
export {
_page as default
};
@@ -0,0 +1,117 @@
import { fail } from "@sveltejs/kit";
const COLLECTION = "Stackq_Items";
function parseNum(val) {
if (val === "" || val === null || val === void 0) return void 0;
const n = Number(val);
return Number.isFinite(n) ? n : void 0;
}
function parseBool(val) {
return val === "on" || val === "true" || val === true;
}
const load = async ({ locals }) => {
const list = await locals.pb.collection(COLLECTION).getFullList({
sort: "-created",
expand: "Parent"
}).catch((err) => {
console.error(COLLECTION, err);
return [];
});
const itemsForParent = list.map((i) => ({ id: i.id, Item: i.Item, SKU: i.SKU }));
return { items: list, itemsForParent };
};
const actions = {
create: async ({ request, locals }) => {
const form = await request.formData();
const Item = form.get("Item")?.trim() ?? "";
const SKU = form.get("SKU")?.trim() ?? "";
const Description = form.get("Description")?.trim() ?? "";
const UOM = form.get("UOM")?.trim() ?? "";
const Cost = parseNum(form.get("Cost"));
const Vendor = form.get("Vendor")?.trim() ?? "";
const Catagory = form.get("Catagory")?.trim() ?? "";
const Sub_Catagory = form.get("Sub_Catagory")?.trim() ?? "";
const Has_Parent = parseBool(form.get("Has_Parent"));
const Parent = form.get("Parent")?.trim() ?? "";
const Stock = parseBool(form.get("Stock"));
const imageFileCreate = form.get("Image");
const hasImage = imageFileCreate && imageFileCreate.size > 0;
if (!Item) return fail(400, { error: "Item name is required", form: "create" });
try {
const body = {
Item,
SKU,
Description,
UOM: UOM || void 0,
Cost: Cost ?? 0,
Vendor,
Catagory: Catagory || void 0,
Sub_Catagory: Sub_Catagory || void 0,
Has_Parent: !!Has_Parent,
Parent: Parent || null,
Stock: !!Stock
};
if (hasImage) body.Image = imageFileCreate;
await locals.pb.collection(COLLECTION).create(body);
} catch (e) {
const message = e && typeof e === "object" && "message" in e ? String(e.message) : "Create failed";
return fail(500, { error: message, form: "create" });
}
return { success: true };
},
update: async ({ request, locals }) => {
const form = await request.formData();
const id = form.get("id")?.trim();
if (!id) return fail(400, { error: "Missing id", form: "update" });
const Item = form.get("Item")?.trim() ?? "";
const SKU = form.get("SKU")?.trim() ?? "";
const Description = form.get("Description")?.trim() ?? "";
const UOM = form.get("UOM")?.trim() ?? "";
const Cost = parseNum(form.get("Cost"));
const Vendor = form.get("Vendor")?.trim() ?? "";
const Catagory = form.get("Catagory")?.trim() ?? "";
const Sub_Catagory = form.get("Sub_Catagory")?.trim() ?? "";
const Has_Parent = parseBool(form.get("Has_Parent"));
const Parent = form.get("Parent")?.trim() ?? "";
const Stock = parseBool(form.get("Stock"));
const Image = form.get("Image");
const imageFile = Image && Image.size > 0 ? Image : void 0;
if (!Item) return fail(400, { error: "Item name is required", form: "update" });
try {
const body = {
Item,
SKU,
Description,
UOM: UOM || void 0,
Cost: Cost ?? 0,
Vendor,
Catagory: Catagory || void 0,
Sub_Catagory: Sub_Catagory || void 0,
Has_Parent: !!Has_Parent,
Parent: Parent || null,
Stock: !!Stock
};
if (imageFile) body.Image = imageFile;
await locals.pb.collection(COLLECTION).update(id, body);
} catch (e) {
const message = e && typeof e === "object" && "message" in e ? String(e.message) : "Update failed";
return fail(500, { error: message, form: "update" });
}
return { success: true };
},
delete: async ({ request, locals }) => {
const form = await request.formData();
const id = form.get("id")?.trim();
if (!id) return fail(400, { error: "Missing id", form: "delete" });
try {
await locals.pb.collection(COLLECTION).delete(id);
} catch (e) {
const message = e && typeof e === "object" && "message" in e ? String(e.message) : "Delete failed";
return fail(500, { error: message, form: "delete" });
}
return { success: true };
}
};
export {
actions,
load
};
@@ -0,0 +1,646 @@
import { a as attributes, c as clsx, b as bind_props, d as element, h as head, e as escape_html, f as ensure_array_like, i as attr } from "../../../chunks/index.js";
import { c as cn } from "../../../chunks/utils2.js";
import "clsx";
import { tv } from "tailwind-variants";
function Table($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<div data-slot="table-container" class="relative w-full overflow-x-auto"><table${attributes({
"data-slot": "table",
class: clsx(cn("w-full caption-bottom text-sm", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></table></div>`);
bind_props($$props, { ref });
});
}
function Table_body($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<tbody${attributes({
"data-slot": "table-body",
class: clsx(cn("[&_tr:last-child]:border-0", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></tbody>`);
bind_props($$props, { ref });
});
}
function Table_cell($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<td${attributes({
"data-slot": "table-cell",
class: clsx(cn("bg-clip-padding p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></td>`);
bind_props($$props, { ref });
});
}
function Table_head($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<th${attributes({
"data-slot": "table-head",
class: clsx(cn("text-foreground h-10 bg-clip-padding px-2 text-start align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pe-0", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></th>`);
bind_props($$props, { ref });
});
}
function Table_header($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<thead${attributes({
"data-slot": "table-header",
class: clsx(cn("[&_tr]:border-b", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></thead>`);
bind_props($$props, { ref });
});
}
function Table_row($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<tr${attributes({
"data-slot": "table-row",
class: clsx(cn("hover:[&,&>svelte-css-wrapper]:[&>th,td]:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></tr>`);
bind_props($$props, { ref });
});
}
const badgeVariants = tv({
base: "focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3",
variants: {
variant: {
default: "bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent",
secondary: "bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent",
destructive: "bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/70 border-transparent text-white",
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
}
},
defaultVariants: { variant: "default" }
});
function Badge($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
href,
class: className,
variant = "default",
children,
$$slots,
$$events,
...restProps
} = $$props;
element(
$$renderer2,
href ? "a" : "span",
() => {
$$renderer2.push(`${attributes({
"data-slot": "badge",
href,
class: clsx(cn(badgeVariants({ variant }), className)),
...restProps
})}`);
},
() => {
children?.($$renderer2);
$$renderer2.push(`<!---->`);
}
);
bind_props($$props, { ref });
});
}
function Card($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<div${attributes({
"data-slot": "card",
class: clsx(cn("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></div>`);
bind_props($$props, { ref });
});
}
function Card_content($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let {
ref = null,
class: className,
children,
$$slots,
$$events,
...restProps
} = $$props;
$$renderer2.push(`<div${attributes({
"data-slot": "card-content",
class: clsx(cn("px-6", className)),
...restProps
})}>`);
children?.($$renderer2);
$$renderer2.push(`<!----></div>`);
bind_props($$props, { ref });
});
}
function _page($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let { data } = $$props;
function asList(val) {
if (val == null) return [];
return Array.isArray(val) ? val : [val];
}
function formatDate(iso) {
if (!iso) return "—";
try {
return new Date(iso).toLocaleDateString(void 0, { dateStyle: "short", timeStyle: "short" });
} catch {
return iso;
}
}
const items = data?.items ?? [];
const PB_BASE = "https://pocketbase.ccllc.pro";
const COLLECTION = "Stackq_Items";
function imageUrl(item) {
if (!item.Image) return null;
return `${PB_BASE}/api/files/${COLLECTION}/${item.id}/${item.Image}`;
}
head("rk8na7", $$renderer2, ($$renderer3) => {
$$renderer3.title(($$renderer4) => {
$$renderer4.push(`<title>Items Stackq</title>`);
});
});
{
$$renderer2.push("<!--[!-->");
$$renderer2.push(`<main class="container mx-auto flex flex-col gap-6 py-8"><div class="flex items-center justify-between"><h1 class="text-2xl font-semibold">Stackq Items</h1> <span class="text-muted-foreground text-sm">${escape_html(items.length)} items</span></div> `);
Card($$renderer2, {
children: ($$renderer3) => {
Card_content($$renderer3, {
class: "p-0",
children: ($$renderer4) => {
$$renderer4.push("<!---->");
Table?.($$renderer4, {
children: ($$renderer5) => {
$$renderer5.push("<!---->");
Table_header?.($$renderer5, {
children: ($$renderer6) => {
$$renderer6.push("<!---->");
Table_row?.($$renderer6, {
children: ($$renderer7) => {
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Image`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Item`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->SKU`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
class: "max-w-[200px]",
children: ($$renderer8) => {
$$renderer8.push(`<!---->Description`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->UOM`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
class: "text-right",
children: ($$renderer8) => {
$$renderer8.push(`<!---->Cost`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Vendor`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Catagory`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Sub_Catagory`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Has Parent`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Parent`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!---->Stock`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
class: "text-muted-foreground",
children: ($$renderer8) => {
$$renderer8.push(`<!---->created`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_head?.($$renderer7, {
class: "text-muted-foreground",
children: ($$renderer8) => {
$$renderer8.push(`<!---->updated`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!---->`);
},
$$slots: { default: true }
});
$$renderer6.push(`<!---->`);
},
$$slots: { default: true }
});
$$renderer5.push(`<!----> `);
$$renderer5.push("<!---->");
Table_body?.($$renderer5, {
children: ($$renderer6) => {
if (items.length === 0) {
$$renderer6.push("<!--[-->");
$$renderer6.push("<!---->");
Table_row?.($$renderer6, {
children: ($$renderer7) => {
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
colspan: "14",
class: "h-24 text-center text-muted-foreground",
children: ($$renderer8) => {
$$renderer8.push(`<!---->No items.`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!---->`);
},
$$slots: { default: true }
});
$$renderer6.push(`<!---->`);
} else {
$$renderer6.push("<!--[!-->");
$$renderer6.push(`<!--[-->`);
const each_array = ensure_array_like(items);
for (let $$index_2 = 0, $$length = each_array.length; $$index_2 < $$length; $$index_2++) {
let item = each_array[$$index_2];
$$renderer6.push("<!---->");
Table_row?.($$renderer6, {
children: ($$renderer7) => {
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "w-16",
children: ($$renderer8) => {
if (imageUrl(item)) {
$$renderer8.push("<!--[-->");
$$renderer8.push(`<img${attr("src", imageUrl(item))} alt="" class="size-14 rounded border object-cover" loading="lazy"/>`);
} else {
$$renderer8.push("<!--[!-->");
$$renderer8.push(`<span class="text-muted-foreground text-xs">—</span>`);
}
$$renderer8.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "font-medium",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(item.Item ?? "—")}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "font-mono text-xs",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(item.SKU ?? "—")}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "max-w-[200px] truncate",
title: item.Description ?? "",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(item.Description ?? "—")}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
children: ($$renderer8) => {
Badge($$renderer8, {
variant: "outline",
children: ($$renderer9) => {
$$renderer9.push(`<!---->${escape_html(item.UOM ?? "—")}`);
},
$$slots: { default: true }
});
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "text-right tabular-nums",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(item.Cost != null ? Number(item.Cost).toLocaleString() : "—")}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "text-muted-foreground",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(item.Vendor ?? "—")}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!--[-->`);
const each_array_1 = ensure_array_like(asList(item.Catagory));
for (let $$index = 0, $$length2 = each_array_1.length; $$index < $$length2; $$index++) {
let cat = each_array_1[$$index];
Badge($$renderer8, {
variant: "secondary",
class: "mr-1 text-xs",
children: ($$renderer9) => {
$$renderer9.push(`<!---->${escape_html(cat)}`);
},
$$slots: { default: true }
});
}
$$renderer8.push(`<!--]--> `);
if (asList(item.Catagory).length === 0) {
$$renderer8.push("<!--[-->");
$$renderer8.push(`<span class="text-muted-foreground">—</span>`);
} else {
$$renderer8.push("<!--[!-->");
}
$$renderer8.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
children: ($$renderer8) => {
$$renderer8.push(`<!--[-->`);
const each_array_2 = ensure_array_like(asList(item.Sub_Catagory));
for (let $$index_1 = 0, $$length2 = each_array_2.length; $$index_1 < $$length2; $$index_1++) {
let sub = each_array_2[$$index_1];
Badge($$renderer8, {
variant: "outline",
class: "mr-1 text-xs",
children: ($$renderer9) => {
$$renderer9.push(`<!---->${escape_html(sub)}`);
},
$$slots: { default: true }
});
}
$$renderer8.push(`<!--]--> `);
if (asList(item.Sub_Catagory).length === 0) {
$$renderer8.push("<!--[-->");
$$renderer8.push(`<span class="text-muted-foreground">—</span>`);
} else {
$$renderer8.push("<!--[!-->");
}
$$renderer8.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
children: ($$renderer8) => {
if (item.Has_Parent) {
$$renderer8.push("<!--[-->");
Badge($$renderer8, {
children: ($$renderer9) => {
$$renderer9.push(`<!---->Yes`);
},
$$slots: { default: true }
});
} else {
$$renderer8.push("<!--[!-->");
$$renderer8.push(`<span class="text-muted-foreground">No</span>`);
}
$$renderer8.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "text-muted-foreground",
children: ($$renderer8) => {
if (item.expand?.Parent) {
$$renderer8.push("<!--[-->");
$$renderer8.push(`${escape_html(item.expand.Parent.Item ?? item.expand.Parent.SKU ?? item.Parent)}`);
} else if (item.Parent) {
$$renderer8.push("<!--[1-->");
$$renderer8.push(`<span class="font-mono text-xs">${escape_html(item.Parent)}</span>`);
} else {
$$renderer8.push("<!--[!-->");
$$renderer8.push(``);
}
$$renderer8.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
children: ($$renderer8) => {
if (item.Stock) {
$$renderer8.push("<!--[-->");
Badge($$renderer8, {
variant: "default",
children: ($$renderer9) => {
$$renderer9.push(`<!---->Stock`);
},
$$slots: { default: true }
});
} else {
$$renderer8.push("<!--[!-->");
$$renderer8.push(`<span class="text-muted-foreground">—</span>`);
}
$$renderer8.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "text-muted-foreground text-xs",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(formatDate(item.created))}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!----> `);
$$renderer7.push("<!---->");
Table_cell?.($$renderer7, {
class: "text-muted-foreground text-xs",
children: ($$renderer8) => {
$$renderer8.push(`<!---->${escape_html(formatDate(item.updated))}`);
},
$$slots: { default: true }
});
$$renderer7.push(`<!---->`);
},
$$slots: { default: true }
});
$$renderer6.push(`<!---->`);
}
$$renderer6.push(`<!--]-->`);
}
$$renderer6.push(`<!--]-->`);
},
$$slots: { default: true }
});
$$renderer5.push(`<!---->`);
},
$$slots: { default: true }
});
$$renderer4.push(`<!---->`);
},
$$slots: { default: true }
});
},
$$slots: { default: true }
});
$$renderer2.push(`<!----></main>`);
}
$$renderer2.push(`<!--]-->`);
});
}
export {
_page as default
};
@@ -0,0 +1,34 @@
import { fail, redirect } from "@sveltejs/kit";
function safeRedirectTo(searchParams) {
const to = searchParams.get("redirectTo");
if (!to || typeof to !== "string") return "/items";
if (!to.startsWith("/") || to.startsWith("//")) return "/items";
return to;
}
const load = ({ url, locals }) => {
if (locals.user) {
throw redirect(303, safeRedirectTo(url.searchParams));
}
};
const actions = {
login: async ({ request, locals, url }) => {
const data = await request.formData();
const email = data.get("email")?.trim() ?? "";
const password = data.get("password") ?? "";
if (!email || !password) {
return fail(400, { error: "Email and password are required.", email });
}
try {
await locals.pb.collection("users").authWithPassword(email, password);
} catch (err) {
const message = err && typeof err === "object" && "message" in err ? String(err.message) : "Invalid email or password.";
return fail(401, { error: message, email });
}
const redirectTo = safeRedirectTo(url.searchParams);
throw redirect(303, redirectTo);
}
};
export {
actions,
load
};
@@ -0,0 +1,13 @@
import "clsx";
function _page($$renderer, $$props) {
let { data } = $$props;
$$renderer.push(`<main class="flex min-h-screen flex-col items-center justify-center p-4">`);
{
$$renderer.push("<!--[!-->");
$$renderer.push(`<div class="w-full max-w-sm space-y-4 rounded-xl border bg-card p-6 shadow-sm"><div class="space-y-1"><h1 class="text-lg font-semibold">Login</h1> <p class="text-muted-foreground text-sm">Enter your email and password to sign in.</p></div> <p class="text-muted-foreground text-sm">Loading form…</p></div>`);
}
$$renderer.push(`<!--]--></main>`);
}
export {
_page as default
};
@@ -0,0 +1,8 @@
import { redirect } from "@sveltejs/kit";
const load = ({ locals }) => {
locals.pb.authStore.clear();
throw redirect(303, "/login");
};
export {
load
};