diff --git a/src/app/dashboard/expenses/page.tsx b/src/app/dashboard/expenses/page.tsx index 8d29be7..a35d7c7 100644 --- a/src/app/dashboard/expenses/page.tsx +++ b/src/app/dashboard/expenses/page.tsx @@ -29,7 +29,7 @@ import { NumberInput } from "~/components/ui/number-input"; import { toast } from "sonner"; import { Plus, Pencil, Trash2, Receipt } from "lucide-react"; import { formatCurrency, SUPPORTED_CURRENCIES } from "~/lib/currency"; -import { EXPENSE_CATEGORIES } from "~/server/api/routers/expenses"; +import { EXPENSE_CATEGORIES } from "~/lib/expense-categories"; interface ExpenseFormData { date: Date; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index f548e29..ef7e223 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,6 @@ import "~/styles/globals.css"; import { type Metadata } from "next"; -import { Inter, Playfair_Display, Geist_Mono } from "next/font/google"; import { TRPCReactProvider } from "~/trpc/react"; import { Toaster } from "~/components/ui/sonner"; @@ -17,24 +16,6 @@ export const metadata: Metadata = { icons: [{ rel: "icon", url: "/favicon.ico" }], }; -const inter = Inter({ - subsets: ["latin"], - variable: "--font-sans", - display: "swap", -}); - -const playfair = Playfair_Display({ - subsets: ["latin"], - variable: "--font-heading", - display: "swap", -}); - -const geistMono = Geist_Mono({ - subsets: ["latin"], - variable: "--font-geist-mono", - display: "swap", -}); - export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode }>) { @@ -42,7 +23,6 @@ export default function RootLayout({
diff --git a/src/lib/expense-categories.ts b/src/lib/expense-categories.ts new file mode 100644 index 0000000..85c1833 --- /dev/null +++ b/src/lib/expense-categories.ts @@ -0,0 +1,11 @@ +export const EXPENSE_CATEGORIES = [ + "Travel", + "Meals & Entertainment", + "Software & Subscriptions", + "Hardware & Equipment", + "Office Supplies", + "Marketing", + "Professional Services", + "Utilities", + "Other", +] as const; diff --git a/src/server/api/routers/expenses.ts b/src/server/api/routers/expenses.ts index d9e12e6..c544080 100644 --- a/src/server/api/routers/expenses.ts +++ b/src/server/api/routers/expenses.ts @@ -3,18 +3,9 @@ import { eq, and, desc } from "drizzle-orm"; import { createTRPCRouter, protectedProcedure } from "../trpc"; import { expenses, clients, businesses, invoices } from "~/server/db/schema"; import { TRPCError } from "@trpc/server"; +import { EXPENSE_CATEGORIES } from "~/lib/expense-categories"; -export const EXPENSE_CATEGORIES = [ - "Travel", - "Meals & Entertainment", - "Software & Subscriptions", - "Hardware & Equipment", - "Office Supplies", - "Marketing", - "Professional Services", - "Utilities", - "Other", -] as const; +export { EXPENSE_CATEGORIES }; const createExpenseSchema = z.object({ date: z.date(), diff --git a/src/styles/globals.css b/src/styles/globals.css index 964d096..3a7e6fc 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -84,9 +84,9 @@ --color-input: hsl(var(--input)); --color-ring: hsl(var(--ring)); - --font-sans: var(--font-sans), sans-serif; - --font-heading: var(--font-heading), serif; - --font-mono: var(--font-geist-mono), monospace; + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --font-heading: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace; --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); diff --git a/src/trpc/react.tsx b/src/trpc/react.tsx index 798886e..229b167 100644 --- a/src/trpc/react.tsx +++ b/src/trpc/react.tsx @@ -7,7 +7,6 @@ import { type inferRouterInputs, type inferRouterOutputs } from "@trpc/server"; import { useState } from "react"; import SuperJSON from "superjson"; -import { type AppRouter } from "~/server/api/root"; import { createQueryClient } from "./query-client"; let clientQueryClientSingleton: QueryClient | undefined = undefined; @@ -22,21 +21,22 @@ const getQueryClient = () => { return clientQueryClientSingleton; }; -export const api = createTRPCReact(); +// Use inline import() type to avoid pulling server modules into the client bundle +export const api = createTRPCReact(); /** * Inference helper for inputs. * * @example type HelloInput = RouterInputs['example']['hello'] */ -export type RouterInputs = inferRouterInputs; +export type RouterInputs = inferRouterInputs; /** * Inference helper for outputs. * * @example type HelloOutput = RouterOutputs['example']['hello'] */ -export type RouterOutputs = inferRouterOutputs; +export type RouterOutputs = inferRouterOutputs; export function TRPCReactProvider(props: { children: React.ReactNode }) { const queryClient = getQueryClient();