Enhance SvelteKit project by adding new API routes for dark mode toggling, updating existing route parameters, and improving type definitions. Refactor component imports and optimize asset handling for better performance and maintainability.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
const load = async ({ locals }) => {
|
||||
const user = locals.user;
|
||||
return {
|
||||
user: user ? {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
name: user.name,
|
||||
avatar: user.avatar,
|
||||
darkmode: !!user.darkmode
|
||||
} : null
|
||||
};
|
||||
};
|
||||
export {
|
||||
load
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,6 +4,22 @@ const load = async ({ locals }) => {
|
||||
const itemsForParent = list.map((i) => ({ id: i.id, Item: i.Item, SKU: i.SKU }));
|
||||
return { items: list, itemsForParent };
|
||||
};
|
||||
const actions = {
|
||||
setDarkmode: async ({ request, locals }) => {
|
||||
const user = locals.user;
|
||||
if (!user) return { success: false };
|
||||
const formData = await request.formData();
|
||||
const darkmode = formData.get("darkmode") === "true";
|
||||
try {
|
||||
const record = await locals.pb.collection("users").update(user.id, { darkmode });
|
||||
locals.pb.authStore.save(locals.pb.authStore.token, record);
|
||||
return { success: true, darkmode };
|
||||
} catch {
|
||||
return { success: false };
|
||||
}
|
||||
}
|
||||
};
|
||||
export {
|
||||
actions,
|
||||
load
|
||||
};
|
||||
|
||||
@@ -57,15 +57,6 @@ function _page($$renderer, $$props) {
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer.push(`<!----></a> <a href="/logout" class="block">`);
|
||||
Button($$renderer, {
|
||||
class: "h-12 min-h-12 w-full",
|
||||
variant: "outline",
|
||||
children: ($$renderer2) => {
|
||||
$$renderer2.push(`<!---->Log out`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer.push(`<!----></a></div></main>`);
|
||||
}
|
||||
$$renderer.push(`<!--]-->`);
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import { h as head, e as escape_html } from "../../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
function _page($$renderer, $$props) {
|
||||
$$renderer.component(($$renderer2) => {
|
||||
let { params } = $$props;
|
||||
head("xw1yjl", $$renderer2, ($$renderer3) => {
|
||||
$$renderer3.title(($$renderer4) => {
|
||||
$$renderer4.push(`<title>Account – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer2.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex items-center gap-3"><a href="/accounts" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to accounts">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">Account</h1></div> `);
|
||||
Card($$renderer2, {
|
||||
children: ($$renderer3) => {
|
||||
Card_content($$renderer3, {
|
||||
class: "flex flex-col gap-4 py-8",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<p class="text-muted-foreground text-sm">Account ${escape_html(params.id)}</p> <a href="/accounts">`);
|
||||
Button($$renderer4, {
|
||||
variant: "outline",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<!---->Back to accounts`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer4.push(`<!----></a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer2.push(`<!----></main>`);
|
||||
});
|
||||
}
|
||||
export {
|
||||
_page as default
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
const load = async () => {
|
||||
return { accounts: [] };
|
||||
};
|
||||
export {
|
||||
load
|
||||
};
|
||||
@@ -1,35 +1,108 @@
|
||||
import { h as head } from "../../../chunks/index2.js";
|
||||
import { h as head, e as escape_html, a as ensure_array_like, b as attr, c as stringify } from "../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
function _page($$renderer) {
|
||||
head("11yx1mx", $$renderer, ($$renderer2) => {
|
||||
$$renderer2.title(($$renderer3) => {
|
||||
$$renderer3.push(`<title>Accounts – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex items-center gap-3"><a href="/" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to main">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">Accounts</h1></div> `);
|
||||
Card($$renderer, {
|
||||
children: ($$renderer2) => {
|
||||
Card_content($$renderer2, {
|
||||
class: "flex flex-col items-center justify-center gap-4 py-12",
|
||||
children: ($$renderer3) => {
|
||||
$$renderer3.push(`<p class="text-muted-foreground text-center text-sm">No accounts yet.</p> <p class="text-muted-foreground text-center text-xs">Accounts will appear here once this feature is available.</p> <a href="/">`);
|
||||
Button($$renderer3, {
|
||||
variant: "outline",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->Back to home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<!----></a>`);
|
||||
import { I as Input } from "../../../chunks/input.js";
|
||||
function _page($$renderer, $$props) {
|
||||
$$renderer.component(($$renderer2) => {
|
||||
let { data } = $$props;
|
||||
let searchQuery = "";
|
||||
const accounts = data?.accounts ?? [];
|
||||
const filteredAccounts = (() => {
|
||||
const q = searchQuery.trim().toLowerCase();
|
||||
if (!q) return accounts;
|
||||
return accounts.filter((a) => a.id.toLowerCase().includes(q));
|
||||
})();
|
||||
let $$settled = true;
|
||||
let $$inner_renderer;
|
||||
function $$render_inner($$renderer3) {
|
||||
head("11yx1mx", $$renderer3, ($$renderer4) => {
|
||||
$$renderer4.title(($$renderer5) => {
|
||||
$$renderer5.push(`<title>Accounts – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer3.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"><div class="flex items-center gap-3 min-w-0"><a href="/" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to main">Back</a> <h1 class="text-xl font-semibold truncate sm:text-2xl">Accounts</h1></div> <div class="flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-2"><div class="w-full sm:w-64 sm:min-w-0">`);
|
||||
Input($$renderer3, {
|
||||
type: "search",
|
||||
placeholder: "Search accounts…",
|
||||
class: "h-11 w-full sm:h-9",
|
||||
get value() {
|
||||
return searchQuery;
|
||||
},
|
||||
set value($$value) {
|
||||
searchQuery = $$value;
|
||||
$$settled = false;
|
||||
}
|
||||
});
|
||||
$$renderer3.push(`<!----></div> <span class="text-muted-foreground text-sm shrink-0">${escape_html(filteredAccounts.length)}${escape_html(filteredAccounts.length !== accounts.length ? ` of ${accounts.length}` : "")} accounts</span> <a href="/accounts/new" class="block shrink-0">`);
|
||||
Button($$renderer3, {
|
||||
class: "w-full sm:w-auto min-h-11",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->New account`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
$$renderer3.push(`<!----></a></div></div> `);
|
||||
if (filteredAccounts.length === 0) {
|
||||
$$renderer3.push("<!--[-->");
|
||||
Card($$renderer3, {
|
||||
children: ($$renderer4) => {
|
||||
Card_content($$renderer4, {
|
||||
class: "flex flex-col items-center justify-center gap-4 py-12",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<p class="text-muted-foreground text-center text-sm">${escape_html(accounts.length === 0 ? "No accounts yet." : "No accounts match your search.")}</p> <p class="text-muted-foreground text-center text-xs">${escape_html(accounts.length === 0 ? "Create an account to get started." : "Try a different search.")}</p> <a href="/accounts/new">`);
|
||||
Button($$renderer5, {
|
||||
variant: "outline",
|
||||
children: ($$renderer6) => {
|
||||
$$renderer6.push(`<!---->New account`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer5.push(`<!----></a> <a href="/">`);
|
||||
Button($$renderer5, {
|
||||
variant: "ghost",
|
||||
children: ($$renderer6) => {
|
||||
$$renderer6.push(`<!---->Back to home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer5.push(`<!----></a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
} else {
|
||||
$$renderer3.push("<!--[!-->");
|
||||
$$renderer3.push(`<div class="flex flex-col gap-2"><!--[-->`);
|
||||
const each_array = ensure_array_like(filteredAccounts);
|
||||
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
||||
let account = each_array[$$index];
|
||||
Card($$renderer3, {
|
||||
children: ($$renderer4) => {
|
||||
Card_content($$renderer4, {
|
||||
class: "p-4",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<a${attr("href", `/accounts/${stringify(account.id)}`)} class="font-medium hover:underline">Account ${escape_html(account.id)}</a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
}
|
||||
$$renderer3.push(`<!--]--></div>`);
|
||||
}
|
||||
$$renderer3.push(`<!--]--></main>`);
|
||||
}
|
||||
do {
|
||||
$$settled = true;
|
||||
$$inner_renderer = $$renderer2.copy();
|
||||
$$render_inner($$inner_renderer);
|
||||
} while (!$$settled);
|
||||
$$renderer2.subsume($$inner_renderer);
|
||||
});
|
||||
$$renderer.push(`<!----></main>`);
|
||||
}
|
||||
export {
|
||||
_page as default
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
import { h as head } from "../../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
function _page($$renderer) {
|
||||
head("phafx2", $$renderer, ($$renderer2) => {
|
||||
$$renderer2.title(($$renderer3) => {
|
||||
$$renderer3.push(`<title>New account – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex items-center gap-3"><a href="/accounts" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to accounts">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">New account</h1></div> `);
|
||||
Card($$renderer, {
|
||||
children: ($$renderer2) => {
|
||||
Card_content($$renderer2, {
|
||||
class: "flex flex-col gap-4 py-8",
|
||||
children: ($$renderer3) => {
|
||||
$$renderer3.push(`<p class="text-muted-foreground text-center text-sm">Account creation will be available here.</p> <div class="flex justify-center gap-2"><a href="/accounts">`);
|
||||
Button($$renderer3, {
|
||||
variant: "outline",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->Back to accounts`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<!----></a> <a href="/">`);
|
||||
Button($$renderer3, {
|
||||
variant: "ghost",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->Home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<!----></a></div>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer.push(`<!----></main>`);
|
||||
}
|
||||
export {
|
||||
_page as default
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
import { d as attributes, f as clsx, g as bind_props, h as head, c as escape_html, a as attr, e as ensure_array_like, b as stringify } from "../../../../chunks/index2.js";
|
||||
import { d as attributes, f as clsx, g as bind_props, h as head, e as escape_html, b as attr, a as ensure_array_like, c as stringify } from "../../../../chunks/index2.js";
|
||||
import "../../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { j as getContext, k as element, g as bind_props, d as attributes, f as clsx, l as store_get, h as head, c as escape_html, e as ensure_array_like, a as attr, b as stringify, u as unsubscribe_stores } from "../../../chunks/index2.js";
|
||||
import { i as getContext, j as element, g as bind_props, d as attributes, f as clsx, k as store_get, h as head, e as escape_html, a as ensure_array_like, b as attr, c as stringify, u as unsubscribe_stores } from "../../../chunks/index2.js";
|
||||
import "clsx";
|
||||
import "@sveltejs/kit/internal";
|
||||
import "../../../chunks/exports.js";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { h as head, c as escape_html } from "../../../../chunks/index2.js";
|
||||
import { h as head, e as escape_html } from "../../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
|
||||
@@ -1,77 +1,107 @@
|
||||
import { h as head, e as ensure_array_like, a as attr, b as stringify, c as escape_html } from "../../../chunks/index2.js";
|
||||
import { h as head, e as escape_html, a as ensure_array_like, b as attr, c as stringify } from "../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
import { I as Input } from "../../../chunks/input.js";
|
||||
function _page($$renderer, $$props) {
|
||||
$$renderer.component(($$renderer2) => {
|
||||
let { data } = $$props;
|
||||
let searchQuery = "";
|
||||
const receipts = data?.receipts ?? [];
|
||||
head("16kr07e", $$renderer2, ($$renderer3) => {
|
||||
$$renderer3.title(($$renderer4) => {
|
||||
$$renderer4.push(`<title>Receipts – Stackq</title>`);
|
||||
const filteredReceipts = (() => {
|
||||
const q = searchQuery.trim().toLowerCase();
|
||||
if (!q) return receipts;
|
||||
return receipts.filter((r) => r.id.toLowerCase().includes(q));
|
||||
})();
|
||||
let $$settled = true;
|
||||
let $$inner_renderer;
|
||||
function $$render_inner($$renderer3) {
|
||||
head("16kr07e", $$renderer3, ($$renderer4) => {
|
||||
$$renderer4.title(($$renderer5) => {
|
||||
$$renderer5.push(`<title>Receipts – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
});
|
||||
$$renderer2.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"><div class="flex items-center gap-3"><a href="/" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to main">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">Receipts</h1></div> <a href="/receipts/new" class="block shrink-0">`);
|
||||
Button($$renderer2, {
|
||||
class: "w-full sm:w-auto",
|
||||
children: ($$renderer3) => {
|
||||
$$renderer3.push(`<!---->New receipt`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer2.push(`<!----></a></div> `);
|
||||
if (receipts.length === 0) {
|
||||
$$renderer2.push("<!--[-->");
|
||||
Card($$renderer2, {
|
||||
children: ($$renderer3) => {
|
||||
Card_content($$renderer3, {
|
||||
class: "flex flex-col items-center justify-center gap-4 py-12",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<p class="text-muted-foreground text-center text-sm">No receipts yet.</p> <p class="text-muted-foreground text-center text-xs">Create a receipt to get started.</p> <a href="/receipts/new">`);
|
||||
Button($$renderer4, {
|
||||
variant: "outline",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<!---->New receipt`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer4.push(`<!----></a> <a href="/">`);
|
||||
Button($$renderer4, {
|
||||
variant: "ghost",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<!---->Back to home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer4.push(`<!----></a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"><div class="flex items-center gap-3 min-w-0"><a href="/" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to main">Back</a> <h1 class="text-xl font-semibold truncate sm:text-2xl">Receipts</h1></div> <div class="flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-2"><div class="w-full sm:w-64 sm:min-w-0">`);
|
||||
Input($$renderer3, {
|
||||
type: "search",
|
||||
placeholder: "Search receipts…",
|
||||
class: "h-11 w-full sm:h-9",
|
||||
get value() {
|
||||
return searchQuery;
|
||||
},
|
||||
set value($$value) {
|
||||
searchQuery = $$value;
|
||||
$$settled = false;
|
||||
}
|
||||
});
|
||||
$$renderer3.push(`<!----></div> <span class="text-muted-foreground text-sm shrink-0">${escape_html(filteredReceipts.length)}${escape_html(filteredReceipts.length !== receipts.length ? ` of ${receipts.length}` : "")} receipts</span> <a href="/receipts/new" class="block shrink-0">`);
|
||||
Button($$renderer3, {
|
||||
class: "w-full sm:w-auto min-h-11",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->New receipt`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
} else {
|
||||
$$renderer2.push("<!--[!-->");
|
||||
$$renderer2.push(`<div class="flex flex-col gap-2"><!--[-->`);
|
||||
const each_array = ensure_array_like(receipts);
|
||||
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
||||
let receipt = each_array[$$index];
|
||||
Card($$renderer2, {
|
||||
children: ($$renderer3) => {
|
||||
Card_content($$renderer3, {
|
||||
class: "p-4",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<a${attr("href", `/receipts/${stringify(receipt.id)}`)} class="font-medium hover:underline">Receipt ${escape_html(receipt.id)}</a>`);
|
||||
$$renderer3.push(`<!----></a></div></div> `);
|
||||
if (filteredReceipts.length === 0) {
|
||||
$$renderer3.push("<!--[-->");
|
||||
Card($$renderer3, {
|
||||
children: ($$renderer4) => {
|
||||
Card_content($$renderer4, {
|
||||
class: "flex flex-col items-center justify-center gap-4 py-12",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<p class="text-muted-foreground text-center text-sm">${escape_html(receipts.length === 0 ? "No receipts yet." : "No receipts match your search.")}</p> <p class="text-muted-foreground text-center text-xs">${escape_html(receipts.length === 0 ? "Create a receipt to get started." : "Try a different search.")}</p> <a href="/receipts/new">`);
|
||||
Button($$renderer5, {
|
||||
variant: "outline",
|
||||
children: ($$renderer6) => {
|
||||
$$renderer6.push(`<!---->New receipt`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer5.push(`<!----></a> <a href="/">`);
|
||||
Button($$renderer5, {
|
||||
variant: "ghost",
|
||||
children: ($$renderer6) => {
|
||||
$$renderer6.push(`<!---->Back to home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer5.push(`<!----></a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
} else {
|
||||
$$renderer3.push("<!--[!-->");
|
||||
$$renderer3.push(`<div class="flex flex-col gap-2"><!--[-->`);
|
||||
const each_array = ensure_array_like(filteredReceipts);
|
||||
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
||||
let receipt = each_array[$$index];
|
||||
Card($$renderer3, {
|
||||
children: ($$renderer4) => {
|
||||
Card_content($$renderer4, {
|
||||
class: "p-4",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<a${attr("href", `/receipts/${stringify(receipt.id)}`)} class="font-medium hover:underline">Receipt ${escape_html(receipt.id)}</a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
}
|
||||
$$renderer3.push(`<!--]--></div>`);
|
||||
}
|
||||
$$renderer2.push(`<!--]--></div>`);
|
||||
$$renderer3.push(`<!--]--></main>`);
|
||||
}
|
||||
$$renderer2.push(`<!--]--></main>`);
|
||||
do {
|
||||
$$settled = true;
|
||||
$$inner_renderer = $$renderer2.copy();
|
||||
$$render_inner($$inner_renderer);
|
||||
} while (!$$settled);
|
||||
$$renderer2.subsume($$inner_renderer);
|
||||
});
|
||||
}
|
||||
export {
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
import { h as head, e as escape_html } from "../../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
function _page($$renderer, $$props) {
|
||||
$$renderer.component(($$renderer2) => {
|
||||
let { params } = $$props;
|
||||
head("kuo18u", $$renderer2, ($$renderer3) => {
|
||||
$$renderer3.title(($$renderer4) => {
|
||||
$$renderer4.push(`<title>Transaction – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer2.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex items-center gap-3"><a href="/transactions" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to transactions">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">Transaction</h1></div> `);
|
||||
Card($$renderer2, {
|
||||
children: ($$renderer3) => {
|
||||
Card_content($$renderer3, {
|
||||
class: "flex flex-col gap-4 py-8",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<p class="text-muted-foreground text-sm">Transaction ${escape_html(params.id)}</p> <a href="/transactions">`);
|
||||
Button($$renderer4, {
|
||||
variant: "outline",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<!---->Back to transactions`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer4.push(`<!----></a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer2.push(`<!----></main>`);
|
||||
});
|
||||
}
|
||||
export {
|
||||
_page as default
|
||||
};
|
||||
@@ -0,0 +1,6 @@
|
||||
const load = async () => {
|
||||
return { transactions: [] };
|
||||
};
|
||||
export {
|
||||
load
|
||||
};
|
||||
@@ -1,35 +1,108 @@
|
||||
import { h as head } from "../../../chunks/index2.js";
|
||||
import { h as head, e as escape_html, a as ensure_array_like, b as attr, c as stringify } from "../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
function _page($$renderer) {
|
||||
head("1q0dtg6", $$renderer, ($$renderer2) => {
|
||||
$$renderer2.title(($$renderer3) => {
|
||||
$$renderer3.push(`<title>Transactions – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex items-center gap-3"><a href="/" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to main">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">Transactions</h1></div> `);
|
||||
Card($$renderer, {
|
||||
children: ($$renderer2) => {
|
||||
Card_content($$renderer2, {
|
||||
class: "flex flex-col items-center justify-center gap-4 py-12",
|
||||
children: ($$renderer3) => {
|
||||
$$renderer3.push(`<p class="text-muted-foreground text-center text-sm">No transactions yet.</p> <p class="text-muted-foreground text-center text-xs">Transactions will appear here once this feature is available.</p> <a href="/">`);
|
||||
Button($$renderer3, {
|
||||
variant: "outline",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->Back to home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<!----></a>`);
|
||||
import { I as Input } from "../../../chunks/input.js";
|
||||
function _page($$renderer, $$props) {
|
||||
$$renderer.component(($$renderer2) => {
|
||||
let { data } = $$props;
|
||||
let searchQuery = "";
|
||||
const transactions = data?.transactions ?? [];
|
||||
const filteredTransactions = (() => {
|
||||
const q = searchQuery.trim().toLowerCase();
|
||||
if (!q) return transactions;
|
||||
return transactions.filter((t) => t.id.toLowerCase().includes(q));
|
||||
})();
|
||||
let $$settled = true;
|
||||
let $$inner_renderer;
|
||||
function $$render_inner($$renderer3) {
|
||||
head("1q0dtg6", $$renderer3, ($$renderer4) => {
|
||||
$$renderer4.title(($$renderer5) => {
|
||||
$$renderer5.push(`<title>Transactions – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer3.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between"><div class="flex items-center gap-3 min-w-0"><a href="/" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to main">Back</a> <h1 class="text-xl font-semibold truncate sm:text-2xl">Transactions</h1></div> <div class="flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center sm:gap-2"><div class="w-full sm:w-64 sm:min-w-0">`);
|
||||
Input($$renderer3, {
|
||||
type: "search",
|
||||
placeholder: "Search transactions…",
|
||||
class: "h-11 w-full sm:h-9",
|
||||
get value() {
|
||||
return searchQuery;
|
||||
},
|
||||
set value($$value) {
|
||||
searchQuery = $$value;
|
||||
$$settled = false;
|
||||
}
|
||||
});
|
||||
$$renderer3.push(`<!----></div> <span class="text-muted-foreground text-sm shrink-0">${escape_html(filteredTransactions.length)}${escape_html(filteredTransactions.length !== transactions.length ? ` of ${transactions.length}` : "")} transactions</span> <a href="/transactions/new" class="block shrink-0">`);
|
||||
Button($$renderer3, {
|
||||
class: "w-full sm:w-auto min-h-11",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->New transaction`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
$$renderer3.push(`<!----></a></div></div> `);
|
||||
if (filteredTransactions.length === 0) {
|
||||
$$renderer3.push("<!--[-->");
|
||||
Card($$renderer3, {
|
||||
children: ($$renderer4) => {
|
||||
Card_content($$renderer4, {
|
||||
class: "flex flex-col items-center justify-center gap-4 py-12",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<p class="text-muted-foreground text-center text-sm">${escape_html(transactions.length === 0 ? "No transactions yet." : "No transactions match your search.")}</p> <p class="text-muted-foreground text-center text-xs">${escape_html(transactions.length === 0 ? "Create a transaction to get started." : "Try a different search.")}</p> <a href="/transactions/new">`);
|
||||
Button($$renderer5, {
|
||||
variant: "outline",
|
||||
children: ($$renderer6) => {
|
||||
$$renderer6.push(`<!---->New transaction`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer5.push(`<!----></a> <a href="/">`);
|
||||
Button($$renderer5, {
|
||||
variant: "ghost",
|
||||
children: ($$renderer6) => {
|
||||
$$renderer6.push(`<!---->Back to home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer5.push(`<!----></a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
} else {
|
||||
$$renderer3.push("<!--[!-->");
|
||||
$$renderer3.push(`<div class="flex flex-col gap-2"><!--[-->`);
|
||||
const each_array = ensure_array_like(filteredTransactions);
|
||||
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
|
||||
let tx = each_array[$$index];
|
||||
Card($$renderer3, {
|
||||
children: ($$renderer4) => {
|
||||
Card_content($$renderer4, {
|
||||
class: "p-4",
|
||||
children: ($$renderer5) => {
|
||||
$$renderer5.push(`<a${attr("href", `/transactions/${stringify(tx.id)}`)} class="font-medium hover:underline">Transaction ${escape_html(tx.id)}</a>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
}
|
||||
$$renderer3.push(`<!--]--></div>`);
|
||||
}
|
||||
$$renderer3.push(`<!--]--></main>`);
|
||||
}
|
||||
do {
|
||||
$$settled = true;
|
||||
$$inner_renderer = $$renderer2.copy();
|
||||
$$render_inner($$inner_renderer);
|
||||
} while (!$$settled);
|
||||
$$renderer2.subsume($$inner_renderer);
|
||||
});
|
||||
$$renderer.push(`<!----></main>`);
|
||||
}
|
||||
export {
|
||||
_page as default
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
import { h as head } from "../../../../chunks/index2.js";
|
||||
import { B as Button } from "../../../../chunks/button.js";
|
||||
import { C as Card, a as Card_content } from "../../../../chunks/card-content.js";
|
||||
import "clsx";
|
||||
function _page($$renderer) {
|
||||
head("a9qngp", $$renderer, ($$renderer2) => {
|
||||
$$renderer2.title(($$renderer3) => {
|
||||
$$renderer3.push(`<title>New transaction – Stackq</title>`);
|
||||
});
|
||||
});
|
||||
$$renderer.push(`<main class="container mx-auto flex flex-col gap-6 px-4 py-6 sm:px-6 sm:py-8"><div class="flex items-center gap-3"><a href="/transactions" class="text-muted-foreground hover:text-foreground shrink-0 text-sm" title="Back to transactions">Back</a> <h1 class="text-xl font-semibold sm:text-2xl">New transaction</h1></div> `);
|
||||
Card($$renderer, {
|
||||
children: ($$renderer2) => {
|
||||
Card_content($$renderer2, {
|
||||
class: "flex flex-col gap-4 py-8",
|
||||
children: ($$renderer3) => {
|
||||
$$renderer3.push(`<p class="text-muted-foreground text-center text-sm">Transaction creation will be available here.</p> <div class="flex justify-center gap-2"><a href="/transactions">`);
|
||||
Button($$renderer3, {
|
||||
variant: "outline",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->Back to transactions`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<!----></a> <a href="/">`);
|
||||
Button($$renderer3, {
|
||||
variant: "ghost",
|
||||
children: ($$renderer4) => {
|
||||
$$renderer4.push(`<!---->Home`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer3.push(`<!----></a></div>`);
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
},
|
||||
$$slots: { default: true }
|
||||
});
|
||||
$$renderer.push(`<!----></main>`);
|
||||
}
|
||||
export {
|
||||
_page as default
|
||||
};
|
||||
Reference in New Issue
Block a user