diff --git a/.svelte-kit/generated/client/app.js b/.svelte-kit/generated/client/app.js index 2c8c82d8..f9137f5f 100644 --- a/.svelte-kit/generated/client/app.js +++ b/.svelte-kit/generated/client/app.js @@ -9,19 +9,25 @@ export const nodes = [ () => import('./nodes/5'), () => import('./nodes/6'), () => import('./nodes/7'), - () => import('./nodes/8') + () => import('./nodes/8'), + () => import('./nodes/9'), + () => import('./nodes/10'), + () => import('./nodes/11') ]; export const server_loads = []; export const dictionary = { "/": [~2], - "/accounts": [5], - "/items": [~6], - "/items/[id]": [~7], - "/login": [~8], - "/logout": [~3], - "/transactions": [4] + "/accounts": [8], + "/items": [~9], + "/items/[id]": [~10], + "/login": [~11], + "/logout": [~6], + "/receipts": [~3], + "/receipts/new": [4], + "/receipts/[id]": [5], + "/transactions": [7] }; export const hooks = { diff --git a/.svelte-kit/generated/client/nodes/10.js b/.svelte-kit/generated/client/nodes/10.js new file mode 100644 index 00000000..389ba1f3 --- /dev/null +++ b/.svelte-kit/generated/client/nodes/10.js @@ -0,0 +1 @@ +export { default as component } from "../../../../src/routes/items/[id]/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/11.js b/.svelte-kit/generated/client/nodes/11.js new file mode 100644 index 00000000..f2b26cd1 --- /dev/null +++ b/.svelte-kit/generated/client/nodes/11.js @@ -0,0 +1 @@ +export { default as component } from "../../../../src/routes/login/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/3.js b/.svelte-kit/generated/client/nodes/3.js index e69de29b..a967b192 100644 --- a/.svelte-kit/generated/client/nodes/3.js +++ b/.svelte-kit/generated/client/nodes/3.js @@ -0,0 +1 @@ +export { default as component } from "../../../../src/routes/receipts/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/4.js b/.svelte-kit/generated/client/nodes/4.js index 37a1a420..33513bc0 100644 --- a/.svelte-kit/generated/client/nodes/4.js +++ b/.svelte-kit/generated/client/nodes/4.js @@ -1 +1 @@ -export { default as component } from "../../../../src/routes/transactions/+page.svelte"; \ No newline at end of file +export { default as component } from "../../../../src/routes/receipts/new/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/5.js b/.svelte-kit/generated/client/nodes/5.js index e442b828..385bde2e 100644 --- a/.svelte-kit/generated/client/nodes/5.js +++ b/.svelte-kit/generated/client/nodes/5.js @@ -1 +1 @@ -export { default as component } from "../../../../src/routes/accounts/+page.svelte"; \ No newline at end of file +export { default as component } from "../../../../src/routes/receipts/[id]/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/6.js b/.svelte-kit/generated/client/nodes/6.js index 3e8c3e68..e69de29b 100644 --- a/.svelte-kit/generated/client/nodes/6.js +++ b/.svelte-kit/generated/client/nodes/6.js @@ -1 +0,0 @@ -export { default as component } from "../../../../src/routes/items/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/7.js b/.svelte-kit/generated/client/nodes/7.js index 389ba1f3..37a1a420 100644 --- a/.svelte-kit/generated/client/nodes/7.js +++ b/.svelte-kit/generated/client/nodes/7.js @@ -1 +1 @@ -export { default as component } from "../../../../src/routes/items/[id]/+page.svelte"; \ No newline at end of file +export { default as component } from "../../../../src/routes/transactions/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/8.js b/.svelte-kit/generated/client/nodes/8.js index f2b26cd1..e442b828 100644 --- a/.svelte-kit/generated/client/nodes/8.js +++ b/.svelte-kit/generated/client/nodes/8.js @@ -1 +1 @@ -export { default as component } from "../../../../src/routes/login/+page.svelte"; \ No newline at end of file +export { default as component } from "../../../../src/routes/accounts/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/client/nodes/9.js b/.svelte-kit/generated/client/nodes/9.js new file mode 100644 index 00000000..3e8c3e68 --- /dev/null +++ b/.svelte-kit/generated/client/nodes/9.js @@ -0,0 +1 @@ +export { default as component } from "../../../../src/routes/items/+page.svelte"; \ No newline at end of file diff --git a/.svelte-kit/generated/server/internal.js b/.svelte-kit/generated/server/internal.js index 56ebe112..1add4ed1 100644 --- a/.svelte-kit/generated/server/internal.js +++ b/.svelte-kit/generated/server/internal.js @@ -21,7 +21,7 @@ export const options = { service_worker: false, service_worker_options: undefined, templates: { - app: ({ head, body, assets, nonce, env }) => "\n\n \n \n S\" />\n \n \n \n \n " + head + "\n \n \n
" + body + "
\n \n\n", + app: ({ head, body, assets, nonce, env }) => "\n\n \n \n S\" />\n \n \n \n \n " + head + "\n \n \n
" + body + "
\n \n\n", error: ({ status, message }) => "\n\n\t\n\t\t\n\t\t" + message + "\n\n\t\t\n\t\n\t\n\t\t
\n\t\t\t" + status + "\n\t\t\t
\n\t\t\t\t

" + message + "

\n\t\t\t
\n\t\t
\n\t\n\n" }, version_hash: "ekcm0i" diff --git a/.svelte-kit/non-ambient.d.ts b/.svelte-kit/non-ambient.d.ts index 70cfd294..83260b0c 100644 --- a/.svelte-kit/non-ambient.d.ts +++ b/.svelte-kit/non-ambient.d.ts @@ -27,9 +27,10 @@ export {}; declare module "$app/types" { export interface AppTypes { - RouteId(): "/" | "/access-denied" | "/accounts" | "/items" | "/items/[id]" | "/login" | "/logout" | "/transactions"; + RouteId(): "/" | "/access-denied" | "/accounts" | "/items" | "/items/[id]" | "/login" | "/logout" | "/receipts" | "/receipts/new" | "/receipts/[id]" | "/transactions"; RouteParams(): { - "/items/[id]": { id: string } + "/items/[id]": { id: string }; + "/receipts/[id]": { id: string } }; LayoutParams(): { "/": { id?: string }; @@ -39,9 +40,12 @@ declare module "$app/types" { "/items/[id]": { id: string }; "/login": Record; "/logout": Record; + "/receipts": { id?: string }; + "/receipts/new": Record; + "/receipts/[id]": { id: string }; "/transactions": Record }; - Pathname(): "/" | "/accounts" | "/items" | `/items/${string}` & {} | "/login" | "/logout" | "/transactions"; + Pathname(): "/" | "/accounts" | "/items" | `/items/${string}` & {} | "/login" | "/logout" | "/receipts" | "/receipts/new" | `/receipts/${string}` & {} | "/transactions"; ResolvedPathname(): `${"" | `/${string}`}${ReturnType}`; Asset(): string & {}; } diff --git a/.svelte-kit/types/route_meta_data.json b/.svelte-kit/types/route_meta_data.json index 84272ceb..ba210b30 100644 --- a/.svelte-kit/types/route_meta_data.json +++ b/.svelte-kit/types/route_meta_data.json @@ -23,6 +23,16 @@ "src/routes/logout/+page.server.ts", "src/routes/+layout.ts" ], + "/receipts": [ + "src/routes/receipts/+page.server.ts", + "src/routes/+layout.ts" + ], + "/receipts/new": [ + "src/routes/+layout.ts" + ], + "/receipts/[id]": [ + "src/routes/+layout.ts" + ], "/transactions": [ "src/routes/+layout.ts" ] diff --git a/.svelte-kit/types/src/routes/$types.d.ts b/.svelte-kit/types/src/routes/$types.d.ts index 4985b1c0..5ace764a 100644 --- a/.svelte-kit/types/src/routes/$types.d.ts +++ b/.svelte-kit/types/src/routes/$types.d.ts @@ -13,7 +13,7 @@ type OptionalUnion, A extends keyof U = U extends export type Snapshot = Kit.Snapshot; type PageServerParentData = EnsureDefined; type PageParentData = EnsureDefined; -type LayoutRouteId = RouteId | "/" | "/logout" | "/transactions" | "/accounts" | "/items" | "/items/[id]" | "/login" | null +type LayoutRouteId = RouteId | "/" | "/receipts" | "/receipts/new" | "/receipts/[id]" | "/logout" | "/transactions" | "/accounts" | "/items" | "/items/[id]" | "/login" | null type LayoutParams = RouteParams & { id?: string } type LayoutParentData = EnsureDefined<{}>; diff --git a/.svelte-kit/types/src/routes/receipts/$types.d.ts b/.svelte-kit/types/src/routes/receipts/$types.d.ts new file mode 100644 index 00000000..968b5fac --- /dev/null +++ b/.svelte-kit/types/src/routes/receipts/$types.d.ts @@ -0,0 +1,25 @@ +import type * as Kit from '@sveltejs/kit'; + +type Expand = T extends infer O ? { [K in keyof O]: O[K] } : never; +// @ts-ignore +type MatcherParam = M extends (param : string) => param is infer U ? U extends string ? U : string : string; +type RouteParams = { }; +type RouteId = '/receipts'; +type MaybeWithVoid = {} extends T ? T | void : T; +export type RequiredKeys = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; +type OutputDataShape = MaybeWithVoid> & Partial> & Record> +type EnsureDefined = T extends null | undefined ? {} : T; +type OptionalUnion, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude]?: never } & U : never; +export type Snapshot = Kit.Snapshot; +type PageServerParentData = EnsureDefined; +type PageParentData = EnsureDefined; + +export type PageServerLoad = OutputDataShape> = Kit.ServerLoad; +export type PageServerLoadEvent = Parameters[0]; +export type ActionData = unknown; +export type PageServerData = Expand>>>>>; +export type PageData = Expand & EnsureDefined>; +export type Action | void = Record | void> = Kit.Action +export type Actions | void = Record | void> = Kit.Actions +export type PageProps = { params: RouteParams; data: PageData; form: ActionData } +export type RequestEvent = Kit.RequestEvent; \ No newline at end of file diff --git a/.svelte-kit/types/src/routes/receipts/[id]/$types.d.ts b/.svelte-kit/types/src/routes/receipts/[id]/$types.d.ts new file mode 100644 index 00000000..9ed08e12 --- /dev/null +++ b/.svelte-kit/types/src/routes/receipts/[id]/$types.d.ts @@ -0,0 +1,19 @@ +import type * as Kit from '@sveltejs/kit'; + +type Expand = T extends infer O ? { [K in keyof O]: O[K] } : never; +// @ts-ignore +type MatcherParam = M extends (param : string) => param is infer U ? U extends string ? U : string : string; +type RouteParams = { id: string }; +type RouteId = '/receipts/[id]'; +type MaybeWithVoid = {} extends T ? T | void : T; +export type RequiredKeys = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; +type OutputDataShape = MaybeWithVoid> & Partial> & Record> +type EnsureDefined = T extends null | undefined ? {} : T; +type OptionalUnion, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude]?: never } & U : never; +export type Snapshot = Kit.Snapshot; +type PageParentData = EnsureDefined; + +export type EntryGenerator = () => Promise> | Array; +export type PageServerData = null; +export type PageData = Expand; +export type PageProps = { params: RouteParams; data: PageData } \ No newline at end of file diff --git a/.svelte-kit/types/src/routes/receipts/new/$types.d.ts b/.svelte-kit/types/src/routes/receipts/new/$types.d.ts new file mode 100644 index 00000000..2a723bcb --- /dev/null +++ b/.svelte-kit/types/src/routes/receipts/new/$types.d.ts @@ -0,0 +1,18 @@ +import type * as Kit from '@sveltejs/kit'; + +type Expand = T extends infer O ? { [K in keyof O]: O[K] } : never; +// @ts-ignore +type MatcherParam = M extends (param : string) => param is infer U ? U extends string ? U : string : string; +type RouteParams = { }; +type RouteId = '/receipts/new'; +type MaybeWithVoid = {} extends T ? T | void : T; +export type RequiredKeys = { [K in keyof T]-?: {} extends { [P in K]: T[K] } ? never : K; }[keyof T]; +type OutputDataShape = MaybeWithVoid> & Partial> & Record> +type EnsureDefined = T extends null | undefined ? {} : T; +type OptionalUnion, A extends keyof U = U extends U ? keyof U : never> = U extends unknown ? { [P in Exclude]?: never } & U : never; +export type Snapshot = Kit.Snapshot; +type PageParentData = EnsureDefined; + +export type PageServerData = null; +export type PageData = Expand; +export type PageProps = { params: RouteParams; data: PageData } \ No newline at end of file diff --git a/.svelte-kit/types/src/routes/receipts/proxy+page.server.ts b/.svelte-kit/types/src/routes/receipts/proxy+page.server.ts new file mode 100644 index 00000000..99c9386e --- /dev/null +++ b/.svelte-kit/types/src/routes/receipts/proxy+page.server.ts @@ -0,0 +1,8 @@ +// @ts-nocheck +import type { PageServerLoad } from "./$types"; + +export const load = async () => { + // Placeholder: no PocketBase receipts collection yet. Return empty list. + return { receipts: [] as { id: string }[] }; +}; +;null as any as PageServerLoad; \ No newline at end of file diff --git a/src/app.html b/src/app.html index 5794599d..a05fe993 100644 --- a/src/app.html +++ b/src/app.html @@ -3,7 +3,7 @@ - + diff --git a/src/lib/components/BarcodeScanDialog.svelte b/src/lib/components/BarcodeScanDialog.svelte index bd0c4f3b..4d35187a 100644 --- a/src/lib/components/BarcodeScanDialog.svelte +++ b/src/lib/components/BarcodeScanDialog.svelte @@ -2,7 +2,6 @@ import { Button } from "$lib/components/ui/button"; import { Input } from "$lib/components/ui/input"; import * as Dialog from "$lib/components/ui/dialog"; - import { Search, X } from "@lucide/svelte"; let { open = $bindable(false), @@ -152,7 +151,6 @@ class="min-h-11 flex-1" /> @@ -176,7 +174,6 @@ class="min-h-12 flex-1" onclick={() => { stopScan(); open = false; }} > - Cancel diff --git a/src/routes/HomeWithDialog.svelte b/src/routes/HomeWithDialog.svelte index 78ce00c3..e25ce7cb 100644 --- a/src/routes/HomeWithDialog.svelte +++ b/src/routes/HomeWithDialog.svelte @@ -4,8 +4,6 @@ import ItemForm from "./items/ItemForm.svelte"; import BarcodeScanDialog from "$lib/components/BarcodeScanDialog.svelte"; import { goto } from "$app/navigation"; - import { Camera, Package, Receipt, Wallet } from "@lucide/svelte"; - let { data, }: { @@ -37,58 +35,33 @@

Stackq

-

Quick actions

- + - + - + + + +
-
Go to
+
diff --git a/src/routes/accounts/+page.svelte b/src/routes/accounts/+page.svelte index e52bf9b5..4bc62d80 100644 --- a/src/routes/accounts/+page.svelte +++ b/src/routes/accounts/+page.svelte @@ -1,7 +1,6 @@ @@ -10,9 +9,7 @@
- - - + Back

Accounts

diff --git a/src/routes/items/ItemForm.svelte b/src/routes/items/ItemForm.svelte index 6be991e9..f9bc4dfe 100644 --- a/src/routes/items/ItemForm.svelte +++ b/src/routes/items/ItemForm.svelte @@ -3,7 +3,6 @@ import { Input } from "$lib/components/ui/input"; import { Label } from "$lib/components/ui/label"; import { enhance } from "$app/forms"; - import { Camera, X } from "@lucide/svelte"; import { POCKETBASE_BASE_URL } from "$lib/pocketbase"; import { UOM_OPTIONS, CATAGORY_OPTIONS, SUB_CATAGORY_OPTIONS } from "$lib/constants/items"; import type { StackqItem } from "$lib/types/items"; @@ -169,9 +168,7 @@
- +
@@ -195,7 +192,6 @@ {/if}
diff --git a/src/routes/items/ItemsCrud.svelte b/src/routes/items/ItemsCrud.svelte index a24d2a3e..6370f109 100644 --- a/src/routes/items/ItemsCrud.svelte +++ b/src/routes/items/ItemsCrud.svelte @@ -9,7 +9,6 @@ import { goto } from "$app/navigation"; import BarcodeScanDialog from "$lib/components/BarcodeScanDialog.svelte"; import ItemForm from "./ItemForm.svelte"; - import { Camera, Ellipsis, ExternalLink, Home, Pencil, Plus, Search, Trash2 } from "@lucide/svelte"; import type { StackqItem } from "$lib/types/items"; let { @@ -118,19 +117,16 @@
- - - + Back

Stackq Items

-
- +
@@ -138,11 +134,9 @@
@@ -197,20 +191,14 @@
- + Actions - goto("/items/" + item.id)}> - - View - - openEdit(item)}> - - Edit - + goto("/items/" + item.id)}>View + openEdit(item)}>Edit
- Delete diff --git a/src/routes/items/[id]/+page.svelte b/src/routes/items/[id]/+page.svelte index eb0433ca..e5eea4a3 100644 --- a/src/routes/items/[id]/+page.svelte +++ b/src/routes/items/[id]/+page.svelte @@ -6,7 +6,6 @@ import * as Dialog from "$lib/components/ui/dialog"; import { enhance } from "$app/forms"; import ItemForm from "../ItemForm.svelte"; - import { ArrowLeft, Home, Pencil, Trash2 } from "@lucide/svelte"; let { data, @@ -63,17 +62,12 @@ {#if item}
- - - - - - + Home + Back to items

{item.Item ?? "—"}

{#if browser}
- Delete diff --git a/src/routes/layout.css b/src/routes/layout.css index 2c3af2de..20dbda30 100644 --- a/src/routes/layout.css +++ b/src/routes/layout.css @@ -102,6 +102,13 @@ * { @apply border-border; } + html { + /* Match device text scaling (prevent iOS from inflating text) */ + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + /* Slightly smaller base so layout scales better on small screens */ + font-size: clamp(14px, 2.5vw + 12px, 16px); + } body { @apply bg-background text-foreground; /* Safe area for notched devices */ diff --git a/src/routes/receipts/+page.server.ts b/src/routes/receipts/+page.server.ts new file mode 100644 index 00000000..db8d6e07 --- /dev/null +++ b/src/routes/receipts/+page.server.ts @@ -0,0 +1,6 @@ +import type { PageServerLoad } from "./$types"; + +export const load: PageServerLoad = async () => { + // Placeholder: no PocketBase receipts collection yet. Return empty list. + return { receipts: [] as { id: string }[] }; +}; diff --git a/src/routes/receipts/+page.svelte b/src/routes/receipts/+page.svelte new file mode 100644 index 00000000..4626d1c6 --- /dev/null +++ b/src/routes/receipts/+page.svelte @@ -0,0 +1,48 @@ + + + + Receipts – Stackq + + +
+
+
+ Back +

Receipts

+
+ + + +
+ + {#if receipts.length === 0} + + +

No receipts yet.

+

Create a receipt to get started.

+ + + + + + +
+
+ {:else} +
+ {#each receipts as receipt (receipt.id)} + + + Receipt {receipt.id} + + + {/each} +
+ {/if} +
diff --git a/src/routes/receipts/[id]/+page.svelte b/src/routes/receipts/[id]/+page.svelte new file mode 100644 index 00000000..cba98000 --- /dev/null +++ b/src/routes/receipts/[id]/+page.svelte @@ -0,0 +1,26 @@ + + + + Receipt – Stackq + + +
+
+ Back +

Receipt

+
+ + + +

Receipt {params.id}

+ + + +
+
+
diff --git a/src/routes/receipts/new/+page.svelte b/src/routes/receipts/new/+page.svelte new file mode 100644 index 00000000..871165aa --- /dev/null +++ b/src/routes/receipts/new/+page.svelte @@ -0,0 +1,29 @@ + + + + New receipt – Stackq + + +
+
+ Back +

New receipt

+
+ + + +

Receipt creation will be available here.

+ +
+
+
diff --git a/src/routes/transactions/+page.svelte b/src/routes/transactions/+page.svelte index b10d877a..9cf9c0ce 100644 --- a/src/routes/transactions/+page.svelte +++ b/src/routes/transactions/+page.svelte @@ -1,7 +1,6 @@ @@ -10,9 +9,7 @@
- - - + Back

Transactions