[
  {
    "path": ".gitignore",
    "content": "node_modules\n.DS_Store\ndist\ndist-ssr\n*.local\ncount.txt\n.env\n.nitro\n.tanstack\n.wrangler\n.output\n.vinxi\ntodos.json\n.vscode\n.vercel"
  },
  {
    "path": "README.md",
    "content": "Welcome to your new TanStack app! \n\n# Getting Started\n\nTo run this application:\n\n```bash\npnpm install\npnpm start\n```\n\n# Building For Production\n\nTo build this application for production:\n\n```bash\npnpm build\n```\n\n## Testing\n\nThis project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with:\n\n```bash\npnpm test\n```\n\n## Styling\n\nThis project uses [Tailwind CSS](https://tailwindcss.com/) for styling.\n\n\n## Linting & Formatting\n\nThis project uses [Biome](https://biomejs.dev/) for linting and formatting. The following scripts are available:\n\n\n```bash\npnpm lint\npnpm format\npnpm check\n```\n\n\n\n## Routing\nThis project uses [TanStack Router](https://tanstack.com/router). The initial setup is a file based router. Which means that the routes are managed as files in `src/routes`.\n\n### Adding A Route\n\nTo add a new route to your application just add another a new file in the `./src/routes` directory.\n\nTanStack will automatically generate the content of the route file for you.\n\nNow that you have two routes you can use a `Link` component to navigate between them.\n\n### Adding Links\n\nTo use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`.\n\n```tsx\nimport { Link } from \"@tanstack/react-router\";\n```\n\nThen anywhere in your JSX you can use it like so:\n\n```tsx\n<Link to=\"/about\">About</Link>\n```\n\nThis will create a link that will navigate to the `/about` route.\n\nMore information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent).\n\n### Using A Layout\n\nIn the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you use the `<Outlet />` component.\n\nHere is an example layout that includes a header:\n\n```tsx\nimport { Outlet, createRootRoute } from '@tanstack/react-router'\nimport { TanStackRouterDevtools } from '@tanstack/react-router-devtools'\n\nimport { Link } from \"@tanstack/react-router\";\n\nexport const Route = createRootRoute({\n  component: () => (\n    <>\n      <header>\n        <nav>\n          <Link to=\"/\">Home</Link>\n          <Link to=\"/about\">About</Link>\n        </nav>\n      </header>\n      <Outlet />\n      <TanStackRouterDevtools />\n    </>\n  ),\n})\n```\n\nThe `<TanStackRouterDevtools />` component is not required so you can remove it if you don't want it in your layout.\n\nMore information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts).\n\n\n## Data Fetching\n\nThere are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered.\n\nFor example:\n\n```tsx\nconst peopleRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/people\",\n  loader: async () => {\n    const response = await fetch(\"https://swapi.dev/api/people\");\n    return response.json() as Promise<{\n      results: {\n        name: string;\n      }[];\n    }>;\n  },\n  component: () => {\n    const data = peopleRoute.useLoaderData();\n    return (\n      <ul>\n        {data.results.map((person) => (\n          <li key={person.name}>{person.name}</li>\n        ))}\n      </ul>\n    );\n  },\n});\n```\n\nLoaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters).\n\n### React-Query\n\nReact-Query is an excellent addition or alternative to route loading and integrating it into you application is a breeze.\n\nFirst add your dependencies:\n\n```bash\npnpm add @tanstack/react-query @tanstack/react-query-devtools\n```\n\nNext we'll need to create a query client and provider. We recommend putting those in `main.tsx`.\n\n```tsx\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\n// ...\n\nconst queryClient = new QueryClient();\n\n// ...\n\nif (!rootElement.innerHTML) {\n  const root = ReactDOM.createRoot(rootElement);\n\n  root.render(\n    <QueryClientProvider client={queryClient}>\n      <RouterProvider router={router} />\n    </QueryClientProvider>\n  );\n}\n```\n\nYou can also add TanStack Query Devtools to the root route (optional).\n\n```tsx\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\n\nconst rootRoute = createRootRoute({\n  component: () => (\n    <>\n      <Outlet />\n      <ReactQueryDevtools buttonPosition=\"top-right\" />\n      <TanStackRouterDevtools />\n    </>\n  ),\n});\n```\n\nNow you can use `useQuery` to fetch your data.\n\n```tsx\nimport { useQuery } from \"@tanstack/react-query\";\n\nimport \"./App.css\";\n\nfunction App() {\n  const { data } = useQuery({\n    queryKey: [\"people\"],\n    queryFn: () =>\n      fetch(\"https://swapi.dev/api/people\")\n        .then((res) => res.json())\n        .then((data) => data.results as { name: string }[]),\n    initialData: [],\n  });\n\n  return (\n    <div>\n      <ul>\n        {data.map((person) => (\n          <li key={person.name}>{person.name}</li>\n        ))}\n      </ul>\n    </div>\n  );\n}\n\nexport default App;\n```\n\nYou can find out everything you need to know on how to use React-Query in the [React-Query documentation](https://tanstack.com/query/latest/docs/framework/react/overview).\n\n## State Management\n\nAnother common requirement for React applications is state management. There are many options for state management in React. TanStack Store provides a great starting point for your project.\n\nFirst you need to add TanStack Store as a dependency:\n\n```bash\npnpm add @tanstack/store\n```\n\nNow let's create a simple counter in the `src/App.tsx` file as a demonstration.\n\n```tsx\nimport { useStore } from \"@tanstack/react-store\";\nimport { Store } from \"@tanstack/store\";\nimport \"./App.css\";\n\nconst countStore = new Store(0);\n\nfunction App() {\n  const count = useStore(countStore);\n  return (\n    <div>\n      <button onClick={() => countStore.setState((n) => n + 1)}>\n        Increment - {count}\n      </button>\n    </div>\n  );\n}\n\nexport default App;\n```\n\nOne of the many nice features of TanStack Store is the ability to derive state from other state. That derived state will update when the base state updates.\n\nLet's check this out by doubling the count using derived state.\n\n```tsx\nimport { useStore } from \"@tanstack/react-store\";\nimport { Store, Derived } from \"@tanstack/store\";\nimport \"./App.css\";\n\nconst countStore = new Store(0);\n\nconst doubledStore = new Derived({\n  fn: () => countStore.state * 2,\n  deps: [countStore],\n});\ndoubledStore.mount();\n\nfunction App() {\n  const count = useStore(countStore);\n  const doubledCount = useStore(doubledStore);\n\n  return (\n    <div>\n      <button onClick={() => countStore.setState((n) => n + 1)}>\n        Increment - {count}\n      </button>\n      <div>Doubled - {doubledCount}</div>\n    </div>\n  );\n}\n\nexport default App;\n```\n\nWe use the `Derived` class to create a new store that is derived from another store. The `Derived` class has a `mount` method that will start the derived store updating.\n\nOnce we've created the derived store we can use it in the `App` component just like we would any other store using the `useStore` hook.\n\nYou can find out everything you need to know on how to use TanStack Store in the [TanStack Store documentation](https://tanstack.com/store/latest).\n\n# Demo files\n\nFiles prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed.\n\n# Learn More\n\nYou can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com).\n"
  },
  {
    "path": "auth-schema.ts",
    "content": "import { boolean, pgTable, text, timestamp } from \"drizzle-orm/pg-core\"\n\nexport const users = pgTable(\"users\", {\n    id: text(\"id\").primaryKey(),\n    name: text(\"name\").notNull(),\n    email: text(\"email\").notNull().unique(),\n    emailVerified: boolean(\"email_verified\").notNull(),\n    image: text(\"image\"),\n    createdAt: timestamp(\"created_at\").notNull(),\n    updatedAt: timestamp(\"updated_at\").notNull()\n})\n\nexport const sessions = pgTable(\"sessions\", {\n    id: text(\"id\").primaryKey(),\n    expiresAt: timestamp(\"expires_at\").notNull(),\n    token: text(\"token\").notNull().unique(),\n    createdAt: timestamp(\"created_at\").notNull(),\n    updatedAt: timestamp(\"updated_at\").notNull(),\n    ipAddress: text(\"ip_address\"),\n    userAgent: text(\"user_agent\"),\n    userId: text(\"user_id\")\n        .notNull()\n        .references(() => users.id, { onDelete: \"cascade\" })\n})\n\nexport const accounts = pgTable(\"accounts\", {\n    id: text(\"id\").primaryKey(),\n    accountId: text(\"account_id\").notNull(),\n    providerId: text(\"provider_id\").notNull(),\n    userId: text(\"user_id\")\n        .notNull()\n        .references(() => users.id, { onDelete: \"cascade\" }),\n    accessToken: text(\"access_token\"),\n    refreshToken: text(\"refresh_token\"),\n    idToken: text(\"id_token\"),\n    accessTokenExpiresAt: timestamp(\"access_token_expires_at\"),\n    refreshTokenExpiresAt: timestamp(\"refresh_token_expires_at\"),\n    scope: text(\"scope\"),\n    password: text(\"password\"),\n    createdAt: timestamp(\"created_at\").notNull(),\n    updatedAt: timestamp(\"updated_at\").notNull()\n})\n\nexport const verifications = pgTable(\"verifications\", {\n    id: text(\"id\").primaryKey(),\n    identifier: text(\"identifier\").notNull(),\n    value: text(\"value\").notNull(),\n    expiresAt: timestamp(\"expires_at\").notNull(),\n    createdAt: timestamp(\"created_at\"),\n    updatedAt: timestamp(\"updated_at\")\n})\n"
  },
  {
    "path": "biome.json",
    "content": "{\n    \"$schema\": \"https://biomejs.dev/schemas/2.2.7/schema.json\",\n    \"vcs\": {\n        \"enabled\": true,\n        \"clientKind\": \"git\",\n        \"useIgnoreFile\": true\n    },\n    \"files\": {\n        \"ignoreUnknown\": true,\n        \"includes\": [\"**\", \"!**/src/routeTree.gen.ts\", \"!**/*.css\"]\n    },\n    \"formatter\": {\n        \"enabled\": true,\n        \"indentStyle\": \"space\",\n        \"indentWidth\": 4\n    },\n    \"assist\": { \"actions\": { \"source\": { \"organizeImports\": \"on\" } } },\n    \"linter\": {\n        \"enabled\": true,\n        \"rules\": {\n            \"recommended\": true,\n            \"style\": {\n                \"noNonNullAssertion\": \"off\"\n            }\n        }\n    },\n    \"javascript\": {\n        \"formatter\": {\n            \"quoteStyle\": \"double\",\n            \"semicolons\": \"asNeeded\",\n            \"trailingCommas\": \"none\"\n        }\n    }\n}\n"
  },
  {
    "path": "components.json",
    "content": "{\n    \"$schema\": \"https://ui.shadcn.com/schema.json\",\n    \"style\": \"new-york\",\n    \"rsc\": false,\n    \"tsx\": true,\n    \"tailwind\": {\n        \"config\": \"\",\n        \"css\": \"src/styles.css\",\n        \"baseColor\": \"neutral\",\n        \"cssVariables\": true,\n        \"prefix\": \"\"\n    },\n    \"aliases\": {\n        \"components\": \"@/components\",\n        \"utils\": \"@/lib/utils\",\n        \"ui\": \"@/components/ui\",\n        \"lib\": \"@/lib\",\n        \"hooks\": \"@/hooks\"\n    },\n    \"iconLibrary\": \"lucide\"\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"tanstack-start-hybrid\",\n    \"private\": true,\n    \"type\": \"module\",\n    \"scripts\": {\n        \"dev\": \"vite dev --port 3000\",\n        \"build\": \"vite build\",\n        \"serve\": \"vite preview\",\n        \"test\": \"vitest run\",\n        \"format\": \"biome format\",\n        \"lint\": \"biome lint\",\n        \"check\": \"biome check\"\n    },\n    \"dependencies\": {\n        \"@daveyplate/better-auth-ui\": \"^3.3.0\",\n        \"@radix-ui/react-dropdown-menu\": \"^2.1.16\",\n        \"@radix-ui/react-slot\": \"^1.2.4\",\n        \"@tailwindcss/vite\": \"^4.1.18\",\n        \"@tanstack/nitro-v2-vite-plugin\": \"^1.141.0\",\n        \"@tanstack/react-devtools\": \"^0.8.4\",\n        \"@tanstack/react-router\": \"^1.141.2\",\n        \"@tanstack/react-router-devtools\": \"^1.141.2\",\n        \"@tanstack/react-router-ssr-query\": \"^1.141.2\",\n        \"@tanstack/react-start\": \"^1.141.3\",\n        \"@tanstack/router-plugin\": \"^1.141.2\",\n        \"better-auth\": \"^1.4.7\",\n        \"class-variance-authority\": \"^0.7.1\",\n        \"clsx\": \"^2.1.1\",\n        \"dotenv\": \"^17.2.3\",\n        \"drizzle-orm\": \"^0.45.1\",\n        \"lucide-react\": \"^0.561.0\",\n        \"next-themes\": \"^0.4.6\",\n        \"pg\": \"^8.16.3\",\n        \"react\": \"^19.2.3\",\n        \"react-dom\": \"^19.2.3\",\n        \"tailwind-merge\": \"^3.4.0\",\n        \"tailwindcss\": \"^4.1.18\",\n        \"tailwindcss-safe-area\": \"^1.2.0\",\n        \"vite-tsconfig-paths\": \"^6.0.1\"\n    },\n    \"devDependencies\": {\n        \"@biomejs/biome\": \"2.3.8\",\n        \"@testing-library/dom\": \"^10.4.1\",\n        \"@testing-library/react\": \"^16.3.0\",\n        \"@types/node\": \"^25.0.2\",\n        \"@types/pg\": \"^8.16.0\",\n        \"@types/react\": \"^19.2.7\",\n        \"@types/react-dom\": \"^19.2.3\",\n        \"@vitejs/plugin-react\": \"^5.1.2\",\n        \"drizzle-kit\": \"^0.31.8\",\n        \"jsdom\": \"^27.3.0\",\n        \"tsx\": \"^4.21.0\",\n        \"tw-animate-css\": \"^1.4.0\",\n        \"typescript\": \"^5.9.3\",\n        \"vite\": \"^7.2.7\",\n        \"vite-plugin-devtools-json\": \"^1.0.0\",\n        \"vitest\": \"^4.0.15\",\n        \"web-vitals\": \"^5.1.0\"\n    }\n}\n"
  },
  {
    "path": "public/manifest.json",
    "content": "{\n    \"short_name\": \"TanStack App\",\n    \"name\": \"Create TanStack App Sample\",\n    \"icons\": [\n        {\n            \"src\": \"favicon.ico\",\n            \"sizes\": \"64x64 32x32 24x24 16x16\",\n            \"type\": \"image/x-icon\"\n        },\n        {\n            \"src\": \"logo192.png\",\n            \"type\": \"image/png\",\n            \"sizes\": \"192x192\"\n        },\n        {\n            \"src\": \"logo512.png\",\n            \"type\": \"image/png\",\n            \"sizes\": \"512x512\"\n        }\n    ],\n    \"start_url\": \".\",\n    \"display\": \"standalone\",\n    \"theme_color\": \"#000000\",\n    \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "src/components/header.tsx",
    "content": "import { GitHubIcon, UserButton } from \"@daveyplate/better-auth-ui\"\nimport { Link } from \"@tanstack/react-router\"\nimport { ModeToggle } from \"./mode-toggle\"\nimport { Button } from \"./ui/button\"\n\nexport function Header() {\n    return (\n        <header className=\"sticky top-0 z-50 flex h-12 justify-between border-b bg-background/60 px-safe-or-4 backdrop-blur md:h-14 md:px-safe-or-6\">\n            <Link to=\"/\" className=\"flex items-center gap-2\">\n                <svg\n                    aria-label=\"Better-Auth Logo\"\n                    className=\"size-5\"\n                    fill=\"none\"\n                    height=\"45\"\n                    viewBox=\"0 0 60 45\"\n                    width=\"60\"\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                >\n                    <title>Better Auth UI Logo</title>\n                    <path\n                        className=\"fill-black dark:fill-white\"\n                        clipRule=\"evenodd\"\n                        d=\"M0 0H15V45H0V0ZM45 0H60V45H45V0ZM20 0H40V15H20V0ZM20 30H40V45H20V30Z\"\n                        fillRule=\"evenodd\"\n                    />\n                </svg>\n                BETTER-AUTH. STARTER\n            </Link>\n\n            <div className=\"flex items-center gap-2\">\n                <a\n                    href=\"https://github.com/daveyplate/better-auth-nextjs-starter\"\n                    target=\"_blank\"\n                    rel=\"noopener\"\n                >\n                    <Button\n                        variant=\"outline\"\n                        size=\"icon\"\n                        className=\"size-8 rounded-full\"\n                    >\n                        <GitHubIcon />\n                    </Button>\n                </a>\n\n                <ModeToggle />\n\n                <UserButton size=\"icon\" />\n            </div>\n        </header>\n    )\n}\n"
  },
  {
    "path": "src/components/meta-theme.ts",
    "content": "import { useEffect } from \"react\"\n\nexport function MetaTheme() {\n    useEffect(() => {\n        const updateThemeColor = () => {\n            const bgColor = window.getComputedStyle(\n                document.body\n            ).backgroundColor\n\n            const metaThemeColor = document.querySelector(\n                \"meta[name=theme-color]\"\n            )\n\n            metaThemeColor?.setAttribute(\"content\", bgColor)\n        }\n\n        const observer = new MutationObserver(updateThemeColor)\n\n        observer.observe(document.documentElement, {\n            attributes: true,\n            attributeFilter: [\"class\"]\n        })\n\n        return () => observer.disconnect()\n    }, [])\n\n    return null\n}\n"
  },
  {
    "path": "src/components/mode-toggle.tsx",
    "content": "\"use client\"\n\nimport { MonitorIcon, MoonIcon, SunIcon } from \"lucide-react\"\nimport { useTheme } from \"next-themes\"\n\nimport { Button } from \"./ui/button\"\nimport {\n    DropdownMenu,\n    DropdownMenuContent,\n    DropdownMenuItem,\n    DropdownMenuTrigger\n} from \"./ui/dropdown-menu\"\n\nexport function ModeToggle() {\n    const { setTheme } = useTheme()\n\n    return (\n        <DropdownMenu>\n            <DropdownMenuTrigger asChild>\n                <Button\n                    variant=\"outline\"\n                    size=\"icon\"\n                    className=\"size-8 rounded-full\"\n                >\n                    <SunIcon className=\"dark:-rotate-90 h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:scale-0\" />\n                    <MoonIcon className=\"absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100\" />\n                    <span className=\"sr-only\">Toggle theme</span>\n                </Button>\n            </DropdownMenuTrigger>\n            <DropdownMenuContent\n                align=\"end\"\n                onCloseAutoFocus={(e) => e.preventDefault()}\n            >\n                <DropdownMenuItem onClick={() => setTheme(\"light\")}>\n                    <SunIcon />\n                    Light\n                </DropdownMenuItem>\n                <DropdownMenuItem onClick={() => setTheme(\"dark\")}>\n                    <MoonIcon />\n                    Dark\n                </DropdownMenuItem>\n                <DropdownMenuItem onClick={() => setTheme(\"system\")}>\n                    <MonitorIcon />\n                    System\n                </DropdownMenuItem>\n            </DropdownMenuContent>\n        </DropdownMenu>\n    )\n}\n"
  },
  {
    "path": "src/components/providers.tsx",
    "content": "import { AuthUIProvider } from \"@daveyplate/better-auth-ui\"\nimport { Link, useRouter } from \"@tanstack/react-router\"\nimport { ThemeProvider } from \"next-themes\"\n\nimport { authClient } from \"@/lib/auth-client\"\nimport { MetaTheme } from \"./meta-theme\"\n\nexport function Providers({ children }: { children: React.ReactNode }) {\n    const { navigate } = useRouter()\n\n    return (\n        <ThemeProvider\n            attribute=\"class\"\n            defaultTheme=\"system\"\n            enableSystem\n            disableTransitionOnChange\n        >\n            <AuthUIProvider\n                authClient={authClient}\n                navigate={(href) => navigate({ href })}\n                replace={(href) => navigate({ href, replace: true })}\n                Link={({ href, ...props }) => <Link to={href} {...props} />}\n            >\n                {children}\n\n                <MetaTheme />\n            </AuthUIProvider>\n        </ThemeProvider>\n    )\n}\n"
  },
  {
    "path": "src/components/ui/button.tsx",
    "content": "import { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport type * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n    \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n    {\n        variants: {\n            variant: {\n                default:\n                    \"bg-primary text-primary-foreground hover:bg-primary/90\",\n                destructive:\n                    \"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n                outline:\n                    \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n                secondary:\n                    \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n                ghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n                link: \"text-primary underline-offset-4 hover:underline\"\n            },\n            size: {\n                default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n                sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n                lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n                icon: \"size-9\",\n                \"icon-sm\": \"size-8\",\n                \"icon-lg\": \"size-10\"\n            }\n        },\n        defaultVariants: {\n            variant: \"default\",\n            size: \"default\"\n        }\n    }\n)\n\nfunction Button({\n    className,\n    variant,\n    size,\n    asChild = false,\n    ...props\n}: React.ComponentProps<\"button\"> &\n    VariantProps<typeof buttonVariants> & {\n        asChild?: boolean\n    }) {\n    const Comp = asChild ? Slot : \"button\"\n\n    return (\n        <Comp\n            data-slot=\"button\"\n            className={cn(buttonVariants({ variant, size, className }))}\n            {...props}\n        />\n    )\n}\n\nexport { Button, buttonVariants }\n"
  },
  {
    "path": "src/components/ui/dropdown-menu.tsx",
    "content": "import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport type * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction DropdownMenu({\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n    return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n    return (\n        <DropdownMenuPrimitive.Portal\n            data-slot=\"dropdown-menu-portal\"\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuTrigger({\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n    return (\n        <DropdownMenuPrimitive.Trigger\n            data-slot=\"dropdown-menu-trigger\"\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuContent({\n    className,\n    sideOffset = 4,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n    return (\n        <DropdownMenuPrimitive.Portal>\n            <DropdownMenuPrimitive.Content\n                data-slot=\"dropdown-menu-content\"\n                sideOffset={sideOffset}\n                className={cn(\n                    \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md\",\n                    className\n                )}\n                {...props}\n            />\n        </DropdownMenuPrimitive.Portal>\n    )\n}\n\nfunction DropdownMenuGroup({\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n    return (\n        <DropdownMenuPrimitive.Group\n            data-slot=\"dropdown-menu-group\"\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuItem({\n    className,\n    inset,\n    variant = \"default\",\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n    inset?: boolean\n    variant?: \"default\" | \"destructive\"\n}) {\n    return (\n        <DropdownMenuPrimitive.Item\n            data-slot=\"dropdown-menu-item\"\n            data-inset={inset}\n            data-variant={variant}\n            className={cn(\n                \"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n                className\n            )}\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuCheckboxItem({\n    className,\n    children,\n    checked,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n    return (\n        <DropdownMenuPrimitive.CheckboxItem\n            data-slot=\"dropdown-menu-checkbox-item\"\n            className={cn(\n                \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n                className\n            )}\n            checked={checked}\n            {...props}\n        >\n            <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n                <DropdownMenuPrimitive.ItemIndicator>\n                    <CheckIcon className=\"size-4\" />\n                </DropdownMenuPrimitive.ItemIndicator>\n            </span>\n            {children}\n        </DropdownMenuPrimitive.CheckboxItem>\n    )\n}\n\nfunction DropdownMenuRadioGroup({\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n    return (\n        <DropdownMenuPrimitive.RadioGroup\n            data-slot=\"dropdown-menu-radio-group\"\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuRadioItem({\n    className,\n    children,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n    return (\n        <DropdownMenuPrimitive.RadioItem\n            data-slot=\"dropdown-menu-radio-item\"\n            className={cn(\n                \"focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n                className\n            )}\n            {...props}\n        >\n            <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n                <DropdownMenuPrimitive.ItemIndicator>\n                    <CircleIcon className=\"size-2 fill-current\" />\n                </DropdownMenuPrimitive.ItemIndicator>\n            </span>\n            {children}\n        </DropdownMenuPrimitive.RadioItem>\n    )\n}\n\nfunction DropdownMenuLabel({\n    className,\n    inset,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n    inset?: boolean\n}) {\n    return (\n        <DropdownMenuPrimitive.Label\n            data-slot=\"dropdown-menu-label\"\n            data-inset={inset}\n            className={cn(\n                \"px-2 py-1.5 text-sm font-medium data-[inset]:pl-8\",\n                className\n            )}\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuSeparator({\n    className,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n    return (\n        <DropdownMenuPrimitive.Separator\n            data-slot=\"dropdown-menu-separator\"\n            className={cn(\"bg-border -mx-1 my-1 h-px\", className)}\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuShortcut({\n    className,\n    ...props\n}: React.ComponentProps<\"span\">) {\n    return (\n        <span\n            data-slot=\"dropdown-menu-shortcut\"\n            className={cn(\n                \"text-muted-foreground ml-auto text-xs tracking-widest\",\n                className\n            )}\n            {...props}\n        />\n    )\n}\n\nfunction DropdownMenuSub({\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n    return (\n        <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n    )\n}\n\nfunction DropdownMenuSubTrigger({\n    className,\n    inset,\n    children,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n    inset?: boolean\n}) {\n    return (\n        <DropdownMenuPrimitive.SubTrigger\n            data-slot=\"dropdown-menu-sub-trigger\"\n            data-inset={inset}\n            className={cn(\n                \"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n                className\n            )}\n            {...props}\n        >\n            {children}\n            <ChevronRightIcon className=\"ml-auto size-4\" />\n        </DropdownMenuPrimitive.SubTrigger>\n    )\n}\n\nfunction DropdownMenuSubContent({\n    className,\n    ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n    return (\n        <DropdownMenuPrimitive.SubContent\n            data-slot=\"dropdown-menu-sub-content\"\n            className={cn(\n                \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg\",\n                className\n            )}\n            {...props}\n        />\n    )\n}\n\nexport {\n    DropdownMenu,\n    DropdownMenuPortal,\n    DropdownMenuTrigger,\n    DropdownMenuContent,\n    DropdownMenuGroup,\n    DropdownMenuLabel,\n    DropdownMenuItem,\n    DropdownMenuCheckboxItem,\n    DropdownMenuRadioGroup,\n    DropdownMenuRadioItem,\n    DropdownMenuSeparator,\n    DropdownMenuShortcut,\n    DropdownMenuSub,\n    DropdownMenuSubTrigger,\n    DropdownMenuSubContent\n}\n"
  },
  {
    "path": "src/database/db.ts",
    "content": "import { drizzle } from \"drizzle-orm/node-postgres\"\nexport const db = drizzle(process.env.DATABASE_URL!)\n"
  },
  {
    "path": "src/database/schema.ts",
    "content": "export * from \"@/../auth-schema\"\n"
  },
  {
    "path": "src/lib/auth-client.ts",
    "content": "import { createAuthClient } from \"better-auth/react\"\n\nexport const authClient = createAuthClient({})\n"
  },
  {
    "path": "src/lib/auth.ts",
    "content": "import { betterAuth } from \"better-auth\"\nimport { drizzleAdapter } from \"better-auth/adapters/drizzle\"\n\nimport { db } from \"@/database/db\"\nimport * as schema from \"@/database/schema\"\n\nexport const auth = betterAuth({\n    database: drizzleAdapter(db, {\n        provider: \"pg\",\n        usePlural: true,\n        schema\n    }),\n    emailAndPassword: {\n        enabled: true\n    }\n})\n"
  },
  {
    "path": "src/lib/utils.ts",
    "content": "import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n    return twMerge(clsx(inputs))\n}\n"
  },
  {
    "path": "src/routeTree.gen.ts",
    "content": "/* eslint-disable */\n\n// @ts-nocheck\n\n// noinspection JSUnusedGlobalSymbols\n\n// This file was automatically generated by TanStack Router.\n// You should NOT make any changes in this file as it will be overwritten.\n// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.\n\nimport { Route as rootRouteImport } from './routes/__root'\nimport { Route as IndexRouteImport } from './routes/index'\nimport { Route as AuthPathRouteImport } from './routes/auth/$path'\nimport { Route as AccountPathRouteImport } from './routes/account/$path'\nimport { Route as ApiAuthSplatRouteImport } from './routes/api/auth/$'\n\nconst IndexRoute = IndexRouteImport.update({\n  id: '/',\n  path: '/',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst AuthPathRoute = AuthPathRouteImport.update({\n  id: '/auth/$path',\n  path: '/auth/$path',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst AccountPathRoute = AccountPathRouteImport.update({\n  id: '/account/$path',\n  path: '/account/$path',\n  getParentRoute: () => rootRouteImport,\n} as any)\nconst ApiAuthSplatRoute = ApiAuthSplatRouteImport.update({\n  id: '/api/auth/$',\n  path: '/api/auth/$',\n  getParentRoute: () => rootRouteImport,\n} as any)\n\nexport interface FileRoutesByFullPath {\n  '/': typeof IndexRoute\n  '/account/$path': typeof AccountPathRoute\n  '/auth/$path': typeof AuthPathRoute\n  '/api/auth/$': typeof ApiAuthSplatRoute\n}\nexport interface FileRoutesByTo {\n  '/': typeof IndexRoute\n  '/account/$path': typeof AccountPathRoute\n  '/auth/$path': typeof AuthPathRoute\n  '/api/auth/$': typeof ApiAuthSplatRoute\n}\nexport interface FileRoutesById {\n  __root__: typeof rootRouteImport\n  '/': typeof IndexRoute\n  '/account/$path': typeof AccountPathRoute\n  '/auth/$path': typeof AuthPathRoute\n  '/api/auth/$': typeof ApiAuthSplatRoute\n}\nexport interface FileRouteTypes {\n  fileRoutesByFullPath: FileRoutesByFullPath\n  fullPaths: '/' | '/account/$path' | '/auth/$path' | '/api/auth/$'\n  fileRoutesByTo: FileRoutesByTo\n  to: '/' | '/account/$path' | '/auth/$path' | '/api/auth/$'\n  id: '__root__' | '/' | '/account/$path' | '/auth/$path' | '/api/auth/$'\n  fileRoutesById: FileRoutesById\n}\nexport interface RootRouteChildren {\n  IndexRoute: typeof IndexRoute\n  AccountPathRoute: typeof AccountPathRoute\n  AuthPathRoute: typeof AuthPathRoute\n  ApiAuthSplatRoute: typeof ApiAuthSplatRoute\n}\n\ndeclare module '@tanstack/react-router' {\n  interface FileRoutesByPath {\n    '/': {\n      id: '/'\n      path: '/'\n      fullPath: '/'\n      preLoaderRoute: typeof IndexRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/auth/$path': {\n      id: '/auth/$path'\n      path: '/auth/$path'\n      fullPath: '/auth/$path'\n      preLoaderRoute: typeof AuthPathRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/account/$path': {\n      id: '/account/$path'\n      path: '/account/$path'\n      fullPath: '/account/$path'\n      preLoaderRoute: typeof AccountPathRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n    '/api/auth/$': {\n      id: '/api/auth/$'\n      path: '/api/auth/$'\n      fullPath: '/api/auth/$'\n      preLoaderRoute: typeof ApiAuthSplatRouteImport\n      parentRoute: typeof rootRouteImport\n    }\n  }\n}\n\nconst rootRouteChildren: RootRouteChildren = {\n  IndexRoute: IndexRoute,\n  AccountPathRoute: AccountPathRoute,\n  AuthPathRoute: AuthPathRoute,\n  ApiAuthSplatRoute: ApiAuthSplatRoute,\n}\nexport const routeTree = rootRouteImport\n  ._addFileChildren(rootRouteChildren)\n  ._addFileTypes<FileRouteTypes>()\n\nimport type { getRouter } from './router.tsx'\nimport type { createStart } from '@tanstack/react-start'\ndeclare module '@tanstack/react-start' {\n  interface Register {\n    ssr: true\n    router: Awaited<ReturnType<typeof getRouter>>\n  }\n}\n"
  },
  {
    "path": "src/router.tsx",
    "content": "import { createRouter } from \"@tanstack/react-router\"\n\n// Import the generated route tree\nimport { routeTree } from \"./routeTree.gen\"\n\n// Create a new router instance\nexport const getRouter = () => {\n    return createRouter({\n        routeTree,\n        scrollRestoration: true,\n        defaultPreloadStaleTime: 0\n    })\n}\n"
  },
  {
    "path": "src/routes/__root.tsx",
    "content": "import { TanStackDevtools } from \"@tanstack/react-devtools\"\nimport { createRootRoute, HeadContent, Scripts } from \"@tanstack/react-router\"\nimport { TanStackRouterDevtoolsPanel } from \"@tanstack/react-router-devtools\"\nimport { Header } from \"@/components/header\"\nimport { Providers } from \"@/components/providers\"\nimport appCss from \"../styles/styles.css?url\"\n\nexport const Route = createRootRoute({\n    head: () => ({\n        meta: [\n            { title: \"Better Auth Starter\" },\n            { charSet: \"utf-8\" },\n            {\n                name: \"viewport\",\n                content: \"width=device-width, initial-scale=1\"\n            },\n            {\n                name: \"theme-color\",\n                content: \"var(--bg-background)\"\n            }\n        ],\n        links: [\n            {\n                rel: \"stylesheet\",\n                href: appCss\n            }\n        ]\n    }),\n\n    shellComponent: RootDocument\n})\n\nfunction RootDocument({ children }: { children: React.ReactNode }) {\n    return (\n        <html lang=\"en\" suppressHydrationWarning>\n            <head>\n                <HeadContent />\n            </head>\n\n            <body className=\"min-h-screen flex flex-col\">\n                <Providers>\n                    <Header />\n\n                    {children}\n                </Providers>\n\n                <TanStackDevtools\n                    config={{\n                        position: \"bottom-right\"\n                    }}\n                    plugins={[\n                        {\n                            name: \"Tanstack Router\",\n                            render: <TanStackRouterDevtoolsPanel />\n                        }\n                    ]}\n                />\n\n                <Scripts />\n            </body>\n        </html>\n    )\n}\n"
  },
  {
    "path": "src/routes/account/$path.tsx",
    "content": "import { AccountView } from \"@daveyplate/better-auth-ui\"\nimport { createFileRoute } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/account/$path\")({\n    component: RouteComponent\n})\n\nfunction RouteComponent() {\n    const { path } = Route.useParams()\n\n    return (\n        <main className=\"container mx-auto p-4 md:p-6\">\n            <AccountView\n                classNames={{\n                    sidebar: {\n                        base: \"sticky top-20\"\n                    }\n                }}\n                path={path}\n            />\n        </main>\n    )\n}\n"
  },
  {
    "path": "src/routes/api/auth/$.ts",
    "content": "import { createFileRoute } from \"@tanstack/react-router\"\nimport { auth } from \"@/lib/auth\"\n\nexport const Route = createFileRoute(\"/api/auth/$\")({\n    server: {\n        handlers: {\n            GET: ({ request }) => {\n                return auth.handler(request)\n            },\n            POST: ({ request }) => {\n                return auth.handler(request)\n            }\n        }\n    }\n})\n"
  },
  {
    "path": "src/routes/auth/$path.tsx",
    "content": "import { AuthView } from \"@daveyplate/better-auth-ui\"\nimport { createFileRoute } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/auth/$path\")({\n    component: RouteComponent\n})\n\nfunction RouteComponent() {\n    const { path } = Route.useParams()\n\n    return (\n        <main className=\"container items-center flex flex-col mx-auto my-auto p-4 md:p-6\">\n            <AuthView path={path} />\n        </main>\n    )\n}\n"
  },
  {
    "path": "src/routes/index.tsx",
    "content": "import { createFileRoute } from \"@tanstack/react-router\"\n\nexport const Route = createFileRoute(\"/\")({ component: IndexPage })\n\nfunction IndexPage() {\n    return (\n        <main className=\"container mx-auto flex flex-col gap-4 p-6\">\n            <h1 className=\"text-2xl font-bold\">Hello, world.</h1>\n        </main>\n    )\n}\n"
  },
  {
    "path": "src/styles/custom.css",
    "content": "@import \"tailwindcss-safe-area\";\n\n@import \"@daveyplate/better-auth-ui/css\";\n\n@layer base {\n    button:not(:disabled),\n    [role=\"button\"]:not(:disabled) {\n        cursor: pointer;\n    }\n}\n\n[role=\"menuitem\"]:not(:disabled) {\n    cursor: pointer;\n}\n\n:root {\n    --warning: hsl(38 92% 50%);\n    --warning-foreground: hsl(48 96% 89%);\n}\n\n.dark {\n    --warning: hsl(48 96% 89%);\n    --warning-foreground: hsl(38 92% 50%);\n}\n\n@theme inline {\n    --color-warning: var(--warning);\n    --color-warning-foreground: var(--warning-foreground);\n}\n\n/** iOS Dynamic System Font Scaling */\n/* @supports (-webkit-touch-callout:none) {\n\thtml {\n\t\tfont: -apple-system-body;\n\t}\n} */\n"
  },
  {
    "path": "src/styles/styles.css",
    "content": "@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@import \"./custom.css\";\n\n@custom-variant dark (&:is(.dark *));\n\n@theme inline {\n    --radius-sm: calc(var(--radius) - 4px);\n    --radius-md: calc(var(--radius) - 2px);\n    --radius-lg: var(--radius);\n    --radius-xl: calc(var(--radius) + 4px);\n    --color-background: var(--background);\n    --color-foreground: var(--foreground);\n    --color-card: var(--card);\n    --color-card-foreground: var(--card-foreground);\n    --color-popover: var(--popover);\n    --color-popover-foreground: var(--popover-foreground);\n    --color-primary: var(--primary);\n    --color-primary-foreground: var(--primary-foreground);\n    --color-secondary: var(--secondary);\n    --color-secondary-foreground: var(--secondary-foreground);\n    --color-muted: var(--muted);\n    --color-muted-foreground: var(--muted-foreground);\n    --color-accent: var(--accent);\n    --color-accent-foreground: var(--accent-foreground);\n    --color-destructive: var(--destructive);\n    --color-border: var(--border);\n    --color-input: var(--input);\n    --color-ring: var(--ring);\n    --color-chart-1: var(--chart-1);\n    --color-chart-2: var(--chart-2);\n    --color-chart-3: var(--chart-3);\n    --color-chart-4: var(--chart-4);\n    --color-chart-5: var(--chart-5);\n    --color-sidebar: var(--sidebar);\n    --color-sidebar-foreground: var(--sidebar-foreground);\n    --color-sidebar-primary: var(--sidebar-primary);\n    --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n    --color-sidebar-accent: var(--sidebar-accent);\n    --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n    --color-sidebar-border: var(--sidebar-border);\n    --color-sidebar-ring: var(--sidebar-ring);\n}\n\n:root {\n    --radius: 0.625rem;\n    --background: oklch(1 0 0);\n    --foreground: oklch(0.145 0 0);\n    --card: oklch(1 0 0);\n    --card-foreground: oklch(0.145 0 0);\n    --popover: oklch(1 0 0);\n    --popover-foreground: oklch(0.145 0 0);\n    --primary: oklch(0.205 0 0);\n    --primary-foreground: oklch(0.985 0 0);\n    --secondary: oklch(0.97 0 0);\n    --secondary-foreground: oklch(0.205 0 0);\n    --muted: oklch(0.97 0 0);\n    --muted-foreground: oklch(0.556 0 0);\n    --accent: oklch(0.97 0 0);\n    --accent-foreground: oklch(0.205 0 0);\n    --destructive: oklch(0.577 0.245 27.325);\n    --border: oklch(0.922 0 0);\n    --input: oklch(0.922 0 0);\n    --ring: oklch(0.708 0 0);\n    --chart-1: oklch(0.646 0.222 41.116);\n    --chart-2: oklch(0.6 0.118 184.704);\n    --chart-3: oklch(0.398 0.07 227.392);\n    --chart-4: oklch(0.828 0.189 84.429);\n    --chart-5: oklch(0.769 0.188 70.08);\n    --sidebar: oklch(0.985 0 0);\n    --sidebar-foreground: oklch(0.145 0 0);\n    --sidebar-primary: oklch(0.205 0 0);\n    --sidebar-primary-foreground: oklch(0.985 0 0);\n    --sidebar-accent: oklch(0.97 0 0);\n    --sidebar-accent-foreground: oklch(0.205 0 0);\n    --sidebar-border: oklch(0.922 0 0);\n    --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n    --background: oklch(0.145 0 0);\n    --foreground: oklch(0.985 0 0);\n    --card: oklch(0.205 0 0);\n    --card-foreground: oklch(0.985 0 0);\n    --popover: oklch(0.205 0 0);\n    --popover-foreground: oklch(0.985 0 0);\n    --primary: oklch(0.922 0 0);\n    --primary-foreground: oklch(0.205 0 0);\n    --secondary: oklch(0.269 0 0);\n    --secondary-foreground: oklch(0.985 0 0);\n    --muted: oklch(0.269 0 0);\n    --muted-foreground: oklch(0.708 0 0);\n    --accent: oklch(0.269 0 0);\n    --accent-foreground: oklch(0.985 0 0);\n    --destructive: oklch(0.704 0.191 22.216);\n    --border: oklch(1 0 0 / 10%);\n    --input: oklch(1 0 0 / 15%);\n    --ring: oklch(0.556 0 0);\n    --chart-1: oklch(0.488 0.243 264.376);\n    --chart-2: oklch(0.696 0.17 162.48);\n    --chart-3: oklch(0.769 0.188 70.08);\n    --chart-4: oklch(0.627 0.265 303.9);\n    --chart-5: oklch(0.645 0.246 16.439);\n    --sidebar: oklch(0.205 0 0);\n    --sidebar-foreground: oklch(0.985 0 0);\n    --sidebar-primary: oklch(0.488 0.243 264.376);\n    --sidebar-primary-foreground: oklch(0.985 0 0);\n    --sidebar-accent: oklch(0.269 0 0);\n    --sidebar-accent-foreground: oklch(0.985 0 0);\n    --sidebar-border: oklch(1 0 0 / 10%);\n    --sidebar-ring: oklch(0.556 0 0);\n}\n\n@layer base {\n    * {\n        @apply border-border outline-ring/50;\n    }\n    body {\n        @apply bg-background text-foreground;\n    }\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n    \"include\": [\"**/*.ts\", \"**/*.tsx\"],\n    \"compilerOptions\": {\n        \"target\": \"ES2022\",\n        \"jsx\": \"react-jsx\",\n        \"module\": \"ESNext\",\n        \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n        \"types\": [\"vite/client\"],\n\n        /* Bundler mode */\n        \"moduleResolution\": \"bundler\",\n        \"allowImportingTsExtensions\": true,\n        \"verbatimModuleSyntax\": false,\n        \"noEmit\": true,\n\n        /* Linting */\n        \"skipLibCheck\": true,\n        \"strict\": true,\n        \"noUnusedLocals\": true,\n        \"noUnusedParameters\": true,\n        \"noFallthroughCasesInSwitch\": true,\n        \"noUncheckedSideEffectImports\": true,\n        \"baseUrl\": \".\",\n        \"paths\": {\n            \"@/*\": [\"./src/*\"]\n        }\n    }\n}\n"
  },
  {
    "path": "vite.config.ts",
    "content": "// import { cloudflare } from \"@cloudflare/vite-plugin\"\nimport tailwindcss from \"@tailwindcss/vite\"\nimport { nitroV2Plugin } from \"@tanstack/nitro-v2-vite-plugin\"\nimport { tanstackStart } from \"@tanstack/react-start/plugin/vite\"\nimport viteReact from \"@vitejs/plugin-react\"\nimport { defineConfig } from \"vite\"\nimport devtoolsJson from \"vite-plugin-devtools-json\"\nimport viteTsConfigPaths from \"vite-tsconfig-paths\"\n\nconst config = defineConfig({\n    plugins: [\n        viteTsConfigPaths({\n            projects: [\"./tsconfig.json\"]\n        }),\n        tailwindcss(),\n        tanstackStart(),\n        nitroV2Plugin({ preset: \"vercel\" }),\n        viteReact(),\n        devtoolsJson()\n    ]\n})\n\nexport default config\n"
  }
]