Unverified 提交 de734457 authored 作者: Will Chen's avatar Will Chen 提交者: GitHub

Update codebase.ts so that all files are read (#684)

上级 de21c6ff
......@@ -335,7 +335,15 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="index.html">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="file1.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
<!doctype html>
<html lang="en">
<head>
......@@ -417,6 +425,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -148,7 +148,15 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="index.html">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="file1.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
<!doctype html>
<html lang="en">
<head>
......@@ -185,6 +193,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -335,7 +335,15 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="index.html">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="file1.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
<!doctype html>
<html lang="en">
<head>
......@@ -372,6 +380,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -320,7 +320,7 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="src/components/ui/helper.ts">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/foo.ts">
......
......@@ -21,6 +21,11 @@
},
"dyad_options": {
"files": [
{
"path": ".env.foobar",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "a.ts",
"content": "// a.ts\n",
......@@ -41,6 +46,11 @@
"content": "// exclude.tsx: this file is not in any of the globs\n",
"force": false
},
{
"path": "manual/baz.json",
"content": "// File contents excluded from context",
"force": true
},
{
"path": "manual/file.ts",
"content": "",
......@@ -53,12 +63,12 @@
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/helper.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......
......@@ -15,6 +15,6 @@
- text: /a\.ts 1 files, ~\d+ tokens/
- button:
- img
- text: /manual\/\*\* 2 files, ~\d+ tokens/
- text: /manual\/\*\* 3 files, ~\d+ tokens/
- button:
- img
\ No newline at end of file
......@@ -26,6 +26,11 @@
"content": "// a.ts\n",
"force": true
},
{
"path": "manual/baz.json",
"content": "// File contents excluded from context",
"force": true
},
{
"path": "manual/file.ts",
"content": "",
......@@ -38,7 +43,7 @@
},
{
"path": "src/components/ui/helper.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......
......@@ -20,6 +20,6 @@
- text: /a\.ts 1 files, ~\d+ tokens/
- button:
- img
- text: /manual\/\*\* 2 files, ~\d+ tokens/
- text: /manual\/\*\* 3 files, ~\d+ tokens/
- button:
- img
\ No newline at end of file
......@@ -31,7 +31,7 @@
"files": [
{
"path": "src/components/ui/helper.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......
......@@ -37,6 +37,11 @@
},
"dyad_options": {
"files": [
{
"path": ".env.foobar",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "a.ts",
"content": "// a.ts\n",
......@@ -57,6 +62,11 @@
"content": "// exclude.tsx: this file is not in any of the globs\n",
"force": false
},
{
"path": "manual/baz.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "manual/file.ts",
"content": "",
......@@ -69,12 +79,12 @@
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/helper.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......
......@@ -337,7 +337,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
# Tech Stack
- You are building a React application.
......@@ -360,8 +364,12 @@ Available packages and libraries:
</dyad-file>
<dyad-file path="components.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="eslint.config.js">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
......@@ -391,6 +399,18 @@ export default {
</dyad-file>
<dyad-file path="public/favicon.ico">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/placeholder.svg">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/robots.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="README.md">
# Welcome to your Dyad app
......@@ -492,199 +512,199 @@ export const MadeWithDyad = () => {
</dyad-file>
<dyad-file path="src/components/ui/accordion.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert-dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/aspect-ratio.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/avatar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/badge.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/breadcrumb.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/button.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/calendar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/carousel.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/chart.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/checkbox.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/collapsible.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/command.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/context-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/drawer.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dropdown-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/form.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/hover-card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input-otp.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/label.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/menubar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/navigation-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/pagination.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/popover.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/progress.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/radio-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/resizable.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/scroll-area.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/select.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/separator.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sheet.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sidebar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/skeleton.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/slider.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sonner.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/switch.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/table.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tabs.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/textarea.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toast.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toaster.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tooltip.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/use-toast.ts">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/globals.css">
......@@ -1208,6 +1228,18 @@ export default {
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import dyadComponentTagger from "@dyad-sh/react-vite-component-tagger";
......
......@@ -337,7 +337,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
# Tech Stack
- You are building a React application.
......@@ -360,8 +364,12 @@ Available packages and libraries:
</dyad-file>
<dyad-file path="components.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="eslint.config.js">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
......@@ -391,6 +399,18 @@ export default {
</dyad-file>
<dyad-file path="public/favicon.ico">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/placeholder.svg">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/robots.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="README.md">
# Welcome to your Dyad app
......@@ -492,199 +512,199 @@ export const MadeWithDyad = () => {
</dyad-file>
<dyad-file path="src/components/ui/accordion.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert-dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/aspect-ratio.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/avatar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/badge.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/breadcrumb.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/button.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/calendar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/carousel.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/chart.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/checkbox.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/collapsible.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/command.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/context-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/drawer.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dropdown-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/form.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/hover-card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input-otp.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/label.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/menubar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/navigation-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/pagination.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/popover.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/progress.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/radio-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/resizable.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/scroll-area.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/select.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/separator.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sheet.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sidebar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/skeleton.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/slider.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sonner.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/switch.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/table.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tabs.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/textarea.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toast.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toaster.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tooltip.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/use-toast.ts">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/globals.css">
......@@ -1208,6 +1228,18 @@ export default {
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import dyadComponentTagger from "@dyad-sh/react-vite-component-tagger";
......
......@@ -337,7 +337,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
# Tech Stack
- You are building a React application.
......@@ -360,8 +364,12 @@ Available packages and libraries:
</dyad-file>
<dyad-file path="components.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="eslint.config.js">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
......@@ -391,6 +399,18 @@ export default {
</dyad-file>
<dyad-file path="public/favicon.ico">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/placeholder.svg">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/robots.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="README.md">
# Welcome to your Dyad app
......@@ -492,199 +512,199 @@ export const MadeWithDyad = () => {
</dyad-file>
<dyad-file path="src/components/ui/accordion.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert-dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/aspect-ratio.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/avatar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/badge.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/breadcrumb.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/button.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/calendar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/carousel.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/chart.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/checkbox.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/collapsible.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/command.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/context-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/drawer.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dropdown-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/form.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/hover-card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input-otp.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/label.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/menubar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/navigation-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/pagination.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/popover.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/progress.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/radio-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/resizable.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/scroll-area.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/select.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/separator.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sheet.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sidebar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/skeleton.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/slider.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sonner.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/switch.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/table.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tabs.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/textarea.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toast.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toaster.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tooltip.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/use-toast.ts">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/globals.css">
......@@ -1208,6 +1228,18 @@ export default {
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import dyadComponentTagger from "@dyad-sh/react-vite-component-tagger";
......
......@@ -337,7 +337,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
# Tech Stack
- You are building a React application.
......@@ -360,8 +364,12 @@ Available packages and libraries:
</dyad-file>
<dyad-file path="components.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="eslint.config.js">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
......@@ -391,6 +399,18 @@ export default {
</dyad-file>
<dyad-file path="public/favicon.ico">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/placeholder.svg">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/robots.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="README.md">
# Welcome to your Dyad app
......@@ -492,199 +512,199 @@ export const MadeWithDyad = () => {
</dyad-file>
<dyad-file path="src/components/ui/accordion.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert-dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/aspect-ratio.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/avatar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/badge.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/breadcrumb.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/button.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/calendar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/carousel.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/chart.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/checkbox.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/collapsible.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/command.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/context-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/drawer.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dropdown-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/form.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/hover-card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input-otp.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/label.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/menubar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/navigation-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/pagination.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/popover.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/progress.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/radio-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/resizable.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/scroll-area.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/select.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/separator.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sheet.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sidebar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/skeleton.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/slider.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sonner.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/switch.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/table.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tabs.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/textarea.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toast.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toaster.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tooltip.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/use-toast.ts">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/globals.css">
......@@ -1208,6 +1228,18 @@ export default {
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import dyadComponentTagger from "@dyad-sh/react-vite-component-tagger";
......
......@@ -337,7 +337,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
# Tech Stack
- You are building a React application.
......@@ -360,8 +364,12 @@ Available packages and libraries:
</dyad-file>
<dyad-file path="components.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="eslint.config.js">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
......@@ -391,6 +399,18 @@ export default {
</dyad-file>
<dyad-file path="public/favicon.ico">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/placeholder.svg">
// File contents excluded from context
</dyad-file>
<dyad-file path="public/robots.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="README.md">
# Welcome to your Dyad app
......@@ -492,199 +512,199 @@ export const MadeWithDyad = () => {
</dyad-file>
<dyad-file path="src/components/ui/accordion.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert-dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/alert.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/aspect-ratio.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/avatar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/badge.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/breadcrumb.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/button.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/calendar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/carousel.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/chart.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/checkbox.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/collapsible.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/command.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/context-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dialog.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/drawer.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/dropdown-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/form.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/hover-card.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input-otp.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/input.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/label.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/menubar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/navigation-menu.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/pagination.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/popover.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/progress.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/radio-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/resizable.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/scroll-area.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/select.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/separator.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sheet.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sidebar.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/skeleton.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/slider.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/sonner.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/switch.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/table.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tabs.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/textarea.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toast.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toaster.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle-group.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/toggle.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/tooltip.tsx">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/components/ui/use-toast.ts">
// Contents omitted for brevity
// File contents excluded from context
</dyad-file>
<dyad-file path="src/globals.css">
......@@ -1208,6 +1228,18 @@ export default {
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import dyadComponentTagger from "@dyad-sh/react-vite-component-tagger";
......
......@@ -21,14 +21,24 @@
},
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -46,6 +56,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -68,247 +93,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -361,6 +386,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -16,14 +16,24 @@
"stream": true,
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -41,6 +51,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -63,247 +88,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -356,6 +381,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -16,14 +16,24 @@
"stream": true,
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -41,6 +51,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -63,247 +88,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -356,6 +381,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -21,14 +21,24 @@
},
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -46,6 +56,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -68,247 +93,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -361,6 +386,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -21,14 +21,24 @@
},
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -46,6 +56,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -68,247 +93,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -361,6 +386,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -10,7 +10,7 @@
},
{
"role": "user",
"content": "This is my codebase. <dyad-file path=\"AI_RULES.md\">\n# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n\n</dyad-file>\n\n<dyad-file path=\"eslint.config.js\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"index.html\">\n<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>dyad-generated-app</title>\n </head>\n\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n\n</dyad-file>\n\n<dyad-file path=\"package.json\">\n{\n \"dependencies\": {\n \"@hookform/resolvers\": \"^3.9.0\",\n \"@radix-ui/react-accordion\": \"^1.2.0\",\n \"@radix-ui/react-alert-dialog\": \"^1.1.1\",\n \"@radix-ui/react-aspect-ratio\": \"^1.1.0\",\n \"@radix-ui/react-avatar\": \"^1.1.0\",\n \"@radix-ui/react-checkbox\": \"^1.1.1\",\n \"@radix-ui/react-collapsible\": \"^1.1.0\",\n \"@radix-ui/react-context-menu\": \"^2.2.1\",\n \"@radix-ui/react-dialog\": \"^1.1.2\",\n \"@radix-ui/react-dropdown-menu\": \"^2.1.1\",\n \"@radix-ui/react-hover-card\": \"^1.1.1\",\n \"@radix-ui/react-label\": \"^2.1.0\",\n \"@radix-ui/react-menubar\": \"^1.1.1\",\n \"@radix-ui/react-navigation-menu\": \"^1.2.0\",\n \"@radix-ui/react-popover\": \"^1.1.1\",\n \"@radix-ui/react-progress\": \"^1.1.0\",\n \"@radix-ui/react-radio-group\": \"^1.2.0\",\n \"@radix-ui/react-scroll-area\": \"^1.1.0\",\n \"@radix-ui/react-select\": \"^2.1.1\",\n \"@radix-ui/react-separator\": \"^1.1.0\",\n \"@radix-ui/react-slider\": \"^1.2.0\",\n \"@radix-ui/react-slot\": \"^1.1.0\",\n \"@radix-ui/react-switch\": \"^1.1.0\",\n \"@radix-ui/react-tabs\": \"^1.1.0\",\n \"@radix-ui/react-toast\": \"^1.2.1\",\n \"@radix-ui/react-toggle\": \"^1.1.0\",\n \"@radix-ui/react-toggle-group\": \"^1.1.0\",\n \"@radix-ui/react-tooltip\": \"^1.1.4\",\n \"@tanstack/react-query\": \"^5.56.2\",\n \"class-variance-authority\": \"^0.7.1\",\n \"clsx\": \"^2.1.1\",\n \"cmdk\": \"^1.0.0\",\n \"date-fns\": \"^3.6.0\",\n \"embla-carousel-react\": \"^8.3.0\",\n \"input-otp\": \"^1.2.4\",\n \"lucide-react\": \"^0.462.0\",\n \"next-themes\": \"^0.3.0\",\n \"react\": \"^18.3.1\",\n \"react-day-picker\": \"^8.10.1\",\n \"react-dom\": \"^18.3.1\",\n \"react-hook-form\": \"^7.53.0\",\n \"react-resizable-panels\": \"^2.1.3\",\n \"react-router-dom\": \"^6.26.2\",\n \"recharts\": \"^2.12.7\",\n \"sonner\": \"^1.5.0\",\n \"tailwind-merge\": \"^2.5.2\",\n \"tailwindcss-animate\": \"^1.0.7\",\n \"vaul\": \"^0.9.3\",\n \"zod\": \"^3.23.8\"\n },\n \"devDependencies\": {\n \"@dyad-sh/react-vite-component-tagger\": \"^0.8.0\",\n \"@eslint/js\": \"^9.9.0\",\n \"@tailwindcss/typography\": \"^0.5.15\",\n \"@types/node\": \"^22.5.5\",\n \"@types/react\": \"^18.3.3\",\n \"@types/react-dom\": \"^18.3.0\",\n \"@vitejs/plugin-react-swc\": \"^3.9.0\",\n \"autoprefixer\": \"^10.4.20\",\n \"eslint\": \"^9.9.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0-rc.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.9\",\n \"globals\": \"^15.9.0\",\n \"postcss\": \"^8.4.47\",\n \"tailwindcss\": \"^3.4.11\",\n \"typescript\": \"^5.5.3\",\n \"typescript-eslint\": \"^8.0.1\",\n \"vite\": \"^6.3.4\"\n }\n}\n</dyad-file>\n\n<dyad-file path=\"postcss.config.js\">\nexport default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n\n</dyad-file>\n\n<dyad-file path=\"README.md\">\n# Welcome to your Dyad app\n\n</dyad-file>\n\n<dyad-file path=\"src/App.css\">\n#root {\n max-width: 1280px;\n margin: 0 auto;\n padding: 2rem;\n text-align: center;\n}\n\n.logo {\n height: 6em;\n padding: 1.5em;\n will-change: filter;\n transition: filter 300ms;\n}\n.logo:hover {\n filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n a:nth-of-type(2) .logo {\n animation: logo-spin infinite 20s linear;\n }\n}\n\n.card {\n padding: 2em;\n}\n\n.read-the-docs {\n color: #888;\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/App.tsx\">\nimport { Toaster } from \"@/components/ui/toaster\";\nimport { Toaster as Sonner } from \"@/components/ui/sonner\";\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { BrowserRouter, Routes, Route } from \"react-router-dom\";\nimport Index from \"./pages/Index\";\nimport NotFound from \"./pages/NotFound\";\n\nconst queryClient = new QueryClient();\n\nconst App = () => (\n <QueryClientProvider client={queryClient}>\n <TooltipProvider>\n <Toaster />\n <Sonner />\n <BrowserRouter>\n <Routes>\n <Route path=\"/\" element={<Index />} />\n {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL \"*\" ROUTE */}\n <Route path=\"*\" element={<NotFound />} />\n </Routes>\n </BrowserRouter>\n </TooltipProvider>\n </QueryClientProvider>\n);\n\nexport default App;\n\n</dyad-file>\n\n<dyad-file path=\"src/components/made-with-dyad.tsx\">\nexport const MadeWithDyad = () => {\n return (\n <div className=\"p-4 text-center\">\n <a\n href=\"https://www.dyad.sh/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n Made with Dyad\n </a>\n </div>\n );\n};\n\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/accordion.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/alert-dialog.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/alert.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/aspect-ratio.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/avatar.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/badge.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/breadcrumb.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/button.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/calendar.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/card.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/carousel.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/chart.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/checkbox.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/collapsible.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/command.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/context-menu.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/dialog.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/drawer.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/dropdown-menu.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/form.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/hover-card.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/input-otp.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/input.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/label.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/menubar.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/navigation-menu.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/pagination.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/popover.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/progress.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/radio-group.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/resizable.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/scroll-area.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/select.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/separator.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/sheet.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/sidebar.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/skeleton.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/slider.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/sonner.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/switch.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/table.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/tabs.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/textarea.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toast.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toaster.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toggle-group.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toggle.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/tooltip.tsx\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/use-toast.ts\">\n// Contents omitted for brevity\n</dyad-file>\n\n<dyad-file path=\"src/globals.css\">\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 210 40% 96.1%;\n --accent-foreground: 222.2 47.4% 11.2%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n\n --sidebar-background: 0 0% 98%;\n\n --sidebar-foreground: 240 5.3% 26.1%;\n\n --sidebar-primary: 240 5.9% 10%;\n\n --sidebar-primary-foreground: 0 0% 98%;\n\n --sidebar-accent: 240 4.8% 95.9%;\n\n --sidebar-accent-foreground: 240 5.9% 10%;\n\n --sidebar-border: 220 13% 91%;\n\n --sidebar-ring: 217.2 91.2% 59.8%;\n }\n\n .dark {\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 217.2 32.6% 17.5%;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n --sidebar-background: 240 5.9% 10%;\n --sidebar-foreground: 240 4.8% 95.9%;\n --sidebar-primary: 224.3 76.3% 48%;\n --sidebar-primary-foreground: 0 0% 100%;\n --sidebar-accent: 240 3.7% 15.9%;\n --sidebar-accent-foreground: 240 4.8% 95.9%;\n --sidebar-border: 240 3.7% 15.9%;\n --sidebar-ring: 217.2 91.2% 59.8%;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n\n body {\n @apply bg-background text-foreground;\n }\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/hooks/use-mobile.tsx\">\nimport * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/hooks/use-toast.ts\">\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"@/components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst _actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof _actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n\n</dyad-file>\n\n<dyad-file path=\"src/lib/utils.ts\">\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/main.tsx\">\nimport { createRoot } from \"react-dom/client\";\nimport App from \"./App.tsx\";\nimport \"./globals.css\";\n\ncreateRoot(document.getElementById(\"root\")!).render(<App />);\n\n</dyad-file>\n\n<dyad-file path=\"src/pages/Index.tsx\">\n// Update this page (the content is just a fallback if you fail to update the page)\n\nimport { MadeWithDyad } from \"@/components/made-with-dyad\";\n\nconst Index = () => {\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-gray-100\">\n <div className=\"text-center\">\n <h1 className=\"text-4xl font-bold mb-4\">Welcome to Your Blank App</h1>\n <p className=\"text-xl text-gray-600\">\n Start building your amazing project here!\n </p>\n </div>\n <MadeWithDyad />\n </div>\n );\n};\n\nexport default Index;\n\n</dyad-file>\n\n<dyad-file path=\"src/pages/NotFound.tsx\">\nimport { useLocation } from \"react-router-dom\";\nimport { useEffect } from \"react\";\n\nconst NotFound = () => {\n const location = useLocation();\n\n useEffect(() => {\n console.error(\n \"404 Error: User attempted to access non-existent route:\",\n location.pathname,\n );\n }, [location.pathname]);\n\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-gray-100\">\n <div className=\"text-center\">\n <h1 className=\"text-4xl font-bold mb-4\">404</h1>\n <p className=\"text-xl text-gray-600 mb-4\">Oops! Page not found</p>\n <a href=\"/\" className=\"text-blue-500 hover:text-blue-700 underline\">\n Return to Home\n </a>\n </div>\n </div>\n );\n};\n\nexport default NotFound;\n\n</dyad-file>\n\n<dyad-file path=\"src/utils/toast.ts\">\nimport { toast } from \"sonner\";\n\nexport const showSuccess = (message: string) => {\n toast.success(message);\n};\n\nexport const showError = (message: string) => {\n toast.error(message);\n};\n\nexport const showLoading = (message: string) => {\n return toast.loading(message);\n};\n\nexport const dismissToast = (toastId: string) => {\n toast.dismiss(toastId);\n};\n\n</dyad-file>\n\n<dyad-file path=\"src/vite-env.d.ts\">\n/// <reference types=\"vite/client\" />\n\n</dyad-file>\n\n<dyad-file path=\"tailwind.config.ts\">\nimport type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n\n</dyad-file>\n\n<dyad-file path=\"vite.config.ts\">\nimport { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n\n</dyad-file>\n\n"
"content": "This is my codebase. <dyad-file path=\".gitignore\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"AI_RULES.md\">\n# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n\n</dyad-file>\n\n<dyad-file path=\"components.json\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"eslint.config.js\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"index.html\">\n<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>dyad-generated-app</title>\n </head>\n\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n\n</dyad-file>\n\n<dyad-file path=\"package.json\">\n{\n \"dependencies\": {\n \"@hookform/resolvers\": \"^3.9.0\",\n \"@radix-ui/react-accordion\": \"^1.2.0\",\n \"@radix-ui/react-alert-dialog\": \"^1.1.1\",\n \"@radix-ui/react-aspect-ratio\": \"^1.1.0\",\n \"@radix-ui/react-avatar\": \"^1.1.0\",\n \"@radix-ui/react-checkbox\": \"^1.1.1\",\n \"@radix-ui/react-collapsible\": \"^1.1.0\",\n \"@radix-ui/react-context-menu\": \"^2.2.1\",\n \"@radix-ui/react-dialog\": \"^1.1.2\",\n \"@radix-ui/react-dropdown-menu\": \"^2.1.1\",\n \"@radix-ui/react-hover-card\": \"^1.1.1\",\n \"@radix-ui/react-label\": \"^2.1.0\",\n \"@radix-ui/react-menubar\": \"^1.1.1\",\n \"@radix-ui/react-navigation-menu\": \"^1.2.0\",\n \"@radix-ui/react-popover\": \"^1.1.1\",\n \"@radix-ui/react-progress\": \"^1.1.0\",\n \"@radix-ui/react-radio-group\": \"^1.2.0\",\n \"@radix-ui/react-scroll-area\": \"^1.1.0\",\n \"@radix-ui/react-select\": \"^2.1.1\",\n \"@radix-ui/react-separator\": \"^1.1.0\",\n \"@radix-ui/react-slider\": \"^1.2.0\",\n \"@radix-ui/react-slot\": \"^1.1.0\",\n \"@radix-ui/react-switch\": \"^1.1.0\",\n \"@radix-ui/react-tabs\": \"^1.1.0\",\n \"@radix-ui/react-toast\": \"^1.2.1\",\n \"@radix-ui/react-toggle\": \"^1.1.0\",\n \"@radix-ui/react-toggle-group\": \"^1.1.0\",\n \"@radix-ui/react-tooltip\": \"^1.1.4\",\n \"@tanstack/react-query\": \"^5.56.2\",\n \"class-variance-authority\": \"^0.7.1\",\n \"clsx\": \"^2.1.1\",\n \"cmdk\": \"^1.0.0\",\n \"date-fns\": \"^3.6.0\",\n \"embla-carousel-react\": \"^8.3.0\",\n \"input-otp\": \"^1.2.4\",\n \"lucide-react\": \"^0.462.0\",\n \"next-themes\": \"^0.3.0\",\n \"react\": \"^18.3.1\",\n \"react-day-picker\": \"^8.10.1\",\n \"react-dom\": \"^18.3.1\",\n \"react-hook-form\": \"^7.53.0\",\n \"react-resizable-panels\": \"^2.1.3\",\n \"react-router-dom\": \"^6.26.2\",\n \"recharts\": \"^2.12.7\",\n \"sonner\": \"^1.5.0\",\n \"tailwind-merge\": \"^2.5.2\",\n \"tailwindcss-animate\": \"^1.0.7\",\n \"vaul\": \"^0.9.3\",\n \"zod\": \"^3.23.8\"\n },\n \"devDependencies\": {\n \"@dyad-sh/react-vite-component-tagger\": \"^0.8.0\",\n \"@eslint/js\": \"^9.9.0\",\n \"@tailwindcss/typography\": \"^0.5.15\",\n \"@types/node\": \"^22.5.5\",\n \"@types/react\": \"^18.3.3\",\n \"@types/react-dom\": \"^18.3.0\",\n \"@vitejs/plugin-react-swc\": \"^3.9.0\",\n \"autoprefixer\": \"^10.4.20\",\n \"eslint\": \"^9.9.0\",\n \"eslint-plugin-react-hooks\": \"^5.1.0-rc.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.9\",\n \"globals\": \"^15.9.0\",\n \"postcss\": \"^8.4.47\",\n \"tailwindcss\": \"^3.4.11\",\n \"typescript\": \"^5.5.3\",\n \"typescript-eslint\": \"^8.0.1\",\n \"vite\": \"^6.3.4\"\n }\n}\n</dyad-file>\n\n<dyad-file path=\"postcss.config.js\">\nexport default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n\n</dyad-file>\n\n<dyad-file path=\"public/favicon.ico\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"public/placeholder.svg\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"public/robots.txt\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"README.md\">\n# Welcome to your Dyad app\n\n</dyad-file>\n\n<dyad-file path=\"src/App.css\">\n#root {\n max-width: 1280px;\n margin: 0 auto;\n padding: 2rem;\n text-align: center;\n}\n\n.logo {\n height: 6em;\n padding: 1.5em;\n will-change: filter;\n transition: filter 300ms;\n}\n.logo:hover {\n filter: drop-shadow(0 0 2em #646cffaa);\n}\n.logo.react:hover {\n filter: drop-shadow(0 0 2em #61dafbaa);\n}\n\n@keyframes logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n@media (prefers-reduced-motion: no-preference) {\n a:nth-of-type(2) .logo {\n animation: logo-spin infinite 20s linear;\n }\n}\n\n.card {\n padding: 2em;\n}\n\n.read-the-docs {\n color: #888;\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/App.tsx\">\nimport { Toaster } from \"@/components/ui/toaster\";\nimport { Toaster as Sonner } from \"@/components/ui/sonner\";\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { BrowserRouter, Routes, Route } from \"react-router-dom\";\nimport Index from \"./pages/Index\";\nimport NotFound from \"./pages/NotFound\";\n\nconst queryClient = new QueryClient();\n\nconst App = () => (\n <QueryClientProvider client={queryClient}>\n <TooltipProvider>\n <Toaster />\n <Sonner />\n <BrowserRouter>\n <Routes>\n <Route path=\"/\" element={<Index />} />\n {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL \"*\" ROUTE */}\n <Route path=\"*\" element={<NotFound />} />\n </Routes>\n </BrowserRouter>\n </TooltipProvider>\n </QueryClientProvider>\n);\n\nexport default App;\n\n</dyad-file>\n\n<dyad-file path=\"src/components/made-with-dyad.tsx\">\nexport const MadeWithDyad = () => {\n return (\n <div className=\"p-4 text-center\">\n <a\n href=\"https://www.dyad.sh/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-sm text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200\"\n >\n Made with Dyad\n </a>\n </div>\n );\n};\n\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/accordion.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/alert-dialog.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/alert.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/aspect-ratio.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/avatar.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/badge.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/breadcrumb.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/button.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/calendar.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/card.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/carousel.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/chart.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/checkbox.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/collapsible.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/command.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/context-menu.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/dialog.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/drawer.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/dropdown-menu.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/form.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/hover-card.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/input-otp.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/input.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/label.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/menubar.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/navigation-menu.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/pagination.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/popover.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/progress.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/radio-group.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/resizable.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/scroll-area.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/select.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/separator.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/sheet.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/sidebar.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/skeleton.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/slider.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/sonner.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/switch.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/table.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/tabs.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/textarea.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toast.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toaster.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toggle-group.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/toggle.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/tooltip.tsx\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/components/ui/use-toast.ts\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"src/globals.css\">\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n :root {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 210 40% 96.1%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 210 40% 96.1%;\n --accent-foreground: 222.2 47.4% 11.2%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n\n --sidebar-background: 0 0% 98%;\n\n --sidebar-foreground: 240 5.3% 26.1%;\n\n --sidebar-primary: 240 5.9% 10%;\n\n --sidebar-primary-foreground: 0 0% 98%;\n\n --sidebar-accent: 240 4.8% 95.9%;\n\n --sidebar-accent-foreground: 240 5.9% 10%;\n\n --sidebar-border: 220 13% 91%;\n\n --sidebar-ring: 217.2 91.2% 59.8%;\n }\n\n .dark {\n --background: 222.2 84% 4.9%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 217.2 32.6% 17.5%;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 217.2 32.6% 17.5%;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n --sidebar-background: 240 5.9% 10%;\n --sidebar-foreground: 240 4.8% 95.9%;\n --sidebar-primary: 224.3 76.3% 48%;\n --sidebar-primary-foreground: 0 0% 100%;\n --sidebar-accent: 240 3.7% 15.9%;\n --sidebar-accent-foreground: 240 4.8% 95.9%;\n --sidebar-border: 240 3.7% 15.9%;\n --sidebar-ring: 217.2 91.2% 59.8%;\n }\n}\n\n@layer base {\n * {\n @apply border-border;\n }\n\n body {\n @apply bg-background text-foreground;\n }\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/hooks/use-mobile.tsx\">\nimport * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/hooks/use-toast.ts\">\nimport * as React from \"react\";\n\nimport type { ToastActionElement, ToastProps } from \"@/components/ui/toast\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: React.ReactNode;\n description?: React.ReactNode;\n action?: ToastActionElement;\n};\n\nconst _actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const;\n\nlet count = 0;\n\nfunction genId() {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n}\n\ntype ActionType = typeof _actionTypes;\n\ntype Action =\n | {\n type: ActionType[\"ADD_TOAST\"];\n toast: ToasterToast;\n }\n | {\n type: ActionType[\"UPDATE_TOAST\"];\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionType[\"DISMISS_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n }\n | {\n type: ActionType[\"REMOVE_TOAST\"];\n toastId?: ToasterToast[\"id\"];\n };\n\ninterface State {\n toasts: ToasterToast[];\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: \"REMOVE_TOAST\",\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case \"ADD_TOAST\":\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case \"UPDATE_TOAST\":\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t,\n ),\n };\n\n case \"DISMISS_TOAST\": {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t,\n ),\n };\n }\n case \"REMOVE_TOAST\":\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: Array<(state: State) => void> = [];\n\nlet memoryState: State = { toasts: [] };\n\nfunction dispatch(action: Action) {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n}\n\ntype Toast = Omit<ToasterToast, \"id\">;\n\nfunction toast({ ...props }: Toast) {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: \"UPDATE_TOAST\",\n toast: { ...props, id },\n });\n const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id });\n\n dispatch({\n type: \"ADD_TOAST\",\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n}\n\nfunction useToast() {\n const [state, setState] = React.useState<State>(memoryState);\n\n React.useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n };\n}\n\nexport { useToast, toast };\n\n</dyad-file>\n\n<dyad-file path=\"src/lib/utils.ts\">\nimport { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n</dyad-file>\n\n<dyad-file path=\"src/main.tsx\">\nimport { createRoot } from \"react-dom/client\";\nimport App from \"./App.tsx\";\nimport \"./globals.css\";\n\ncreateRoot(document.getElementById(\"root\")!).render(<App />);\n\n</dyad-file>\n\n<dyad-file path=\"src/pages/Index.tsx\">\n// Update this page (the content is just a fallback if you fail to update the page)\n\nimport { MadeWithDyad } from \"@/components/made-with-dyad\";\n\nconst Index = () => {\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-gray-100\">\n <div className=\"text-center\">\n <h1 className=\"text-4xl font-bold mb-4\">Welcome to Your Blank App</h1>\n <p className=\"text-xl text-gray-600\">\n Start building your amazing project here!\n </p>\n </div>\n <MadeWithDyad />\n </div>\n );\n};\n\nexport default Index;\n\n</dyad-file>\n\n<dyad-file path=\"src/pages/NotFound.tsx\">\nimport { useLocation } from \"react-router-dom\";\nimport { useEffect } from \"react\";\n\nconst NotFound = () => {\n const location = useLocation();\n\n useEffect(() => {\n console.error(\n \"404 Error: User attempted to access non-existent route:\",\n location.pathname,\n );\n }, [location.pathname]);\n\n return (\n <div className=\"min-h-screen flex items-center justify-center bg-gray-100\">\n <div className=\"text-center\">\n <h1 className=\"text-4xl font-bold mb-4\">404</h1>\n <p className=\"text-xl text-gray-600 mb-4\">Oops! Page not found</p>\n <a href=\"/\" className=\"text-blue-500 hover:text-blue-700 underline\">\n Return to Home\n </a>\n </div>\n </div>\n );\n};\n\nexport default NotFound;\n\n</dyad-file>\n\n<dyad-file path=\"src/utils/toast.ts\">\nimport { toast } from \"sonner\";\n\nexport const showSuccess = (message: string) => {\n toast.success(message);\n};\n\nexport const showError = (message: string) => {\n toast.error(message);\n};\n\nexport const showLoading = (message: string) => {\n return toast.loading(message);\n};\n\nexport const dismissToast = (toastId: string) => {\n toast.dismiss(toastId);\n};\n\n</dyad-file>\n\n<dyad-file path=\"src/vite-env.d.ts\">\n/// <reference types=\"vite/client\" />\n\n</dyad-file>\n\n<dyad-file path=\"tailwind.config.ts\">\nimport type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n\n</dyad-file>\n\n<dyad-file path=\"tsconfig.app.json\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"tsconfig.json\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"tsconfig.node.json\">\n// File contents excluded from context\n</dyad-file>\n\n<dyad-file path=\"vite.config.ts\">\nimport { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n\n</dyad-file>\n\n"
},
{
"role": "assistant",
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -365,6 +369,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -335,7 +335,15 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="index.html">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="file1.txt">
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
<!doctype html>
<html lang="en">
<head>
......@@ -372,6 +380,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -354,6 +358,18 @@ finalMainTsxFileWithError();
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -363,6 +367,18 @@ finalMainTsxFileWithError();
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -372,6 +376,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -374,6 +378,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -373,6 +377,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -321,7 +321,11 @@ You need to first add Supabase to your app and then we can add auth.
===
role: user
message: This is my codebase. <dyad-file path="AI_RULES.md">
message: This is my codebase. <dyad-file path=".gitignore">
// File contents excluded from context
</dyad-file>
<dyad-file path="AI_RULES.md">
[[beginning of AI_RULES.md]]
There's already AI rules...
[[end of AI_RULES.md]]
......@@ -329,7 +333,7 @@ There's already AI rules...
</dyad-file>
<dyad-file path="file1.txt">
A file (2)
// File contents excluded from context
</dyad-file>
<dyad-file path="index.html">
......@@ -377,6 +381,18 @@ createRoot(document.getElementById("root")!).render(<App />);
</dyad-file>
<dyad-file path="tsconfig.app.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="tsconfig.node.json">
// File contents excluded from context
</dyad-file>
<dyad-file path="vite.config.ts">
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
......
......@@ -29,14 +29,24 @@
},
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -54,6 +64,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -76,247 +101,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -369,6 +394,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -37,14 +37,24 @@
},
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -62,6 +72,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -84,247 +109,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -377,6 +402,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -45,14 +45,24 @@
},
"dyad_options": {
"files": [
{
"path": ".gitignore",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "AI_RULES.md",
"content": "# Tech Stack\n\n- You are building a React application.\n- Use TypeScript.\n- Use React Router. KEEP the routes in src/App.tsx\n- Always put source code in the src folder.\n- Put pages into src/pages/\n- Put components into src/components/\n- The main page (default page) is src/pages/Index.tsx\n- UPDATE the main page to include the new components. OTHERWISE, the user can NOT see any components!\n- ALWAYS try to use the shadcn/ui library.\n- Tailwind CSS: always use Tailwind CSS for styling components. Utilize Tailwind classes extensively for layout, spacing, colors, and other design aspects.\n\nAvailable packages and libraries:\n\n- The lucide-react package is installed for icons.\n- You ALREADY have ALL the shadcn/ui components and their dependencies installed. So you don't need to install them again.\n- You have ALL the necessary Radix UI components installed.\n- Use prebuilt components from the shadcn/ui library after importing them. Note that these files shouldn't be edited, so make new components if you need to change them.\n",
"force": false
},
{
"path": "components.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "eslint.config.js",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -70,6 +80,21 @@
"content": "export default {\n plugins: {\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n",
"force": false
},
{
"path": "public/favicon.ico",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/placeholder.svg",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "public/robots.txt",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "README.md",
"content": "# Welcome to your Dyad app\n",
......@@ -92,247 +117,247 @@
},
{
"path": "src/components/ui/accordion.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert-dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/alert.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/aspect-ratio.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/avatar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/badge.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/breadcrumb.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/button.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/calendar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/carousel.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/chart.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/checkbox.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/collapsible.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/command.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/context-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dialog.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/drawer.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/dropdown-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/form.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/hover-card.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input-otp.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/input.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/label.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/menubar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/navigation-menu.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/pagination.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/popover.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/progress.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/radio-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/resizable.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/scroll-area.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/select.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/separator.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sheet.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sidebar.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/skeleton.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/slider.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/sonner.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/switch.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/table.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tabs.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/textarea.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toast.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toaster.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle-group.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/toggle.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/tooltip.tsx",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "src/components/ui/use-toast.ts",
"content": "// Contents omitted for brevity",
"content": "// File contents excluded from context",
"force": false
},
{
......@@ -385,6 +410,21 @@
"content": "import type { Config } from \"tailwindcss\";\n\nexport default {\n darkMode: [\"class\"],\n content: [\n \"./pages/**/*.{ts,tsx}\",\n \"./components/**/*.{ts,tsx}\",\n \"./app/**/*.{ts,tsx}\",\n \"./src/**/*.{ts,tsx}\",\n ],\n prefix: \"\",\n theme: {\n container: {\n center: true,\n padding: \"2rem\",\n screens: {\n \"2xl\": \"1400px\",\n },\n },\n extend: {\n colors: {\n border: \"hsl(var(--border))\",\n input: \"hsl(var(--input))\",\n ring: \"hsl(var(--ring))\",\n background: \"hsl(var(--background))\",\n foreground: \"hsl(var(--foreground))\",\n primary: {\n DEFAULT: \"hsl(var(--primary))\",\n foreground: \"hsl(var(--primary-foreground))\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--secondary))\",\n foreground: \"hsl(var(--secondary-foreground))\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--destructive))\",\n foreground: \"hsl(var(--destructive-foreground))\",\n },\n muted: {\n DEFAULT: \"hsl(var(--muted))\",\n foreground: \"hsl(var(--muted-foreground))\",\n },\n accent: {\n DEFAULT: \"hsl(var(--accent))\",\n foreground: \"hsl(var(--accent-foreground))\",\n },\n popover: {\n DEFAULT: \"hsl(var(--popover))\",\n foreground: \"hsl(var(--popover-foreground))\",\n },\n card: {\n DEFAULT: \"hsl(var(--card))\",\n foreground: \"hsl(var(--card-foreground))\",\n },\n sidebar: {\n DEFAULT: \"hsl(var(--sidebar-background))\",\n foreground: \"hsl(var(--sidebar-foreground))\",\n primary: \"hsl(var(--sidebar-primary))\",\n \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n accent: \"hsl(var(--sidebar-accent))\",\n \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n border: \"hsl(var(--sidebar-border))\",\n ring: \"hsl(var(--sidebar-ring))\",\n },\n },\n borderRadius: {\n lg: \"var(--radius)\",\n md: \"calc(var(--radius) - 2px)\",\n sm: \"calc(var(--radius) - 4px)\",\n },\n keyframes: {\n \"accordion-down\": {\n from: {\n height: \"0\",\n },\n to: {\n height: \"var(--radix-accordion-content-height)\",\n },\n },\n \"accordion-up\": {\n from: {\n height: \"var(--radix-accordion-content-height)\",\n },\n to: {\n height: \"0\",\n },\n },\n },\n animation: {\n \"accordion-down\": \"accordion-down 0.2s ease-out\",\n \"accordion-up\": \"accordion-up 0.2s ease-out\",\n },\n },\n },\n plugins: [require(\"tailwindcss-animate\")],\n} satisfies Config;\n",
"force": false
},
{
"path": "tsconfig.app.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "tsconfig.node.json",
"content": "// File contents excluded from context",
"force": false
},
{
"path": "vite.config.ts",
"content": "import { defineConfig } from \"vite\";\nimport dyadComponentTagger from \"@dyad-sh/react-vite-component-tagger\";\nimport react from \"@vitejs/plugin-react-swc\";\nimport path from \"path\";\n\nexport default defineConfig(() => ({\n server: {\n host: \"::\",\n port: 8080,\n },\n plugins: [dyadComponentTagger(), react()],\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n}));\n",
......
......@@ -277,10 +277,6 @@ async function collectFiles(dir: string, baseDir: string): Promise<string[]> {
return;
}
// Check file extension and filename
const ext = path.extname(entry.name).toLowerCase();
const shouldAlwaysInclude = ALWAYS_INCLUDE_FILES.includes(entry.name);
// Skip files that are too large
try {
const stats = await fsAsync.stat(fullPath);
......@@ -292,10 +288,9 @@ async function collectFiles(dir: string, baseDir: string): Promise<string[]> {
return;
}
if (ALLOWED_EXTENSIONS.includes(ext) || shouldAlwaysInclude) {
// Include all files in the list
files.push(fullPath);
}
}
});
await Promise.all(promises);
......@@ -311,25 +306,48 @@ function isOmittedFile(relativePath: string): boolean {
return OMITTED_FILES.some((pattern) => relativePath.includes(pattern));
}
const OMITTED_FILE_CONTENT = "// Contents omitted for brevity";
const OMITTED_FILE_CONTENT = "// File contents excluded from context";
/**
* Check if file contents should be read based on extension and inclusion rules
*/
function shouldReadFileContents({
filePath,
normalizedRelativePath,
}: {
filePath: string;
normalizedRelativePath: string;
}): boolean {
const ext = path.extname(filePath).toLowerCase();
const fileName = path.basename(filePath);
// OMITTED_FILES takes precedence - never read if omitted
if (isOmittedFile(normalizedRelativePath)) {
return false;
}
// Check if file should be included based on extension or filename
return (
ALLOWED_EXTENSIONS.includes(ext) || ALWAYS_INCLUDE_FILES.includes(fileName)
);
}
/**
* Format a file for inclusion in the codebase extract
*/
async function formatFile(
filePath: string,
baseDir: string,
virtualFileSystem?: AsyncVirtualFileSystem,
): Promise<string> {
async function formatFile({
filePath,
normalizedRelativePath,
virtualFileSystem,
}: {
filePath: string;
normalizedRelativePath: string;
virtualFileSystem?: AsyncVirtualFileSystem;
}): Promise<string> {
try {
const relativePath = path
.relative(baseDir, filePath)
// Why? Normalize Windows-style paths which causes lots of weird issues (e.g. Git commit)
.split(path.sep)
.join("/");
if (isOmittedFile(relativePath)) {
return `<dyad-file path="${relativePath}">
// Check if we should read file contents
if (!shouldReadFileContents({ filePath, normalizedRelativePath })) {
return `<dyad-file path="${normalizedRelativePath}">
${OMITTED_FILE_CONTENT}
</dyad-file>
......@@ -339,21 +357,21 @@ ${OMITTED_FILE_CONTENT}
const content = await readFileWithCache(filePath, virtualFileSystem);
if (content == null) {
return `<dyad-file path="${relativePath}">
return `<dyad-file path="${normalizedRelativePath}">
// Error reading file
</dyad-file>
`;
}
return `<dyad-file path="${relativePath}">
return `<dyad-file path="${normalizedRelativePath}">
${content}
</dyad-file>
`;
} catch (error) {
logger.error(`Error reading file: ${filePath}`, error);
return `<dyad-file path="${path.relative(baseDir, filePath)}">
return `<dyad-file path="${normalizedRelativePath}">
// Error reading file: ${error}
</dyad-file>
......@@ -482,27 +500,34 @@ export async function extractCodebase({
// Format files and collect individual file contents
const filesArray: CodebaseFile[] = [];
const formatPromises = sortedFiles.map(async (file) => {
const formattedContent = await formatFile(file, appPath, virtualFileSystem);
// Get raw content for the files array
const relativePath = path
const normalizedRelativePath = path
.relative(appPath, file)
// Why? Normalize Windows-style paths which causes lots of weird issues (e.g. Git commit)
.split(path.sep)
.join("/");
const formattedContent = await formatFile({
filePath: file,
normalizedRelativePath,
virtualFileSystem,
});
const isForced = autoIncludedFiles.has(path.normalize(file));
const fileContent = isOmittedFile(relativePath)
? OMITTED_FILE_CONTENT
: await readFileWithCache(file, virtualFileSystem);
if (fileContent != null) {
// Determine file content based on whether we should read it
let fileContent: string;
if (!shouldReadFileContents({ filePath: file, normalizedRelativePath })) {
fileContent = OMITTED_FILE_CONTENT;
} else {
const readContent = await readFileWithCache(file, virtualFileSystem);
fileContent = readContent ?? "// Error reading file";
}
filesArray.push({
path: relativePath,
path: normalizedRelativePath,
content: fileContent,
force: isForced,
});
}
return formattedContent;
});
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论