flyee 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/bin/install.js +357 -0
  4. package/bridge/bridge.py +1780 -0
  5. package/bridge/local_tracker.py +722 -0
  6. package/core/agents/backend-specialist.md +266 -0
  7. package/core/agents/code-archaeologist.md +106 -0
  8. package/core/agents/database-architect.md +226 -0
  9. package/core/agents/debugger.md +225 -0
  10. package/core/agents/devops-engineer.md +323 -0
  11. package/core/agents/documentation-writer.md +104 -0
  12. package/core/agents/explorer-agent.md +73 -0
  13. package/core/agents/frontend-specialist.md +743 -0
  14. package/core/agents/game-developer.md +162 -0
  15. package/core/agents/mobile-developer.md +377 -0
  16. package/core/agents/orchestrator.md +416 -0
  17. package/core/agents/penetration-tester.md +188 -0
  18. package/core/agents/performance-optimizer.md +187 -0
  19. package/core/agents/product-manager.md +112 -0
  20. package/core/agents/product-owner.md +95 -0
  21. package/core/agents/project-planner.md +470 -0
  22. package/core/agents/qa-automation-engineer.md +103 -0
  23. package/core/agents/security-auditor.md +170 -0
  24. package/core/agents/seo-specialist.md +111 -0
  25. package/core/agents/stitch-designer.md +190 -0
  26. package/core/agents/tdd-reviewer.md +282 -0
  27. package/core/agents/test-engineer.md +158 -0
  28. package/core/scripts/auto_preview.py +148 -0
  29. package/core/scripts/checklist.py +243 -0
  30. package/core/scripts/cost_report.py +149 -0
  31. package/core/scripts/doc-sync-check.py +461 -0
  32. package/core/scripts/parse_user_stories.py +79 -0
  33. package/core/scripts/prepare_notion_updates.py +172 -0
  34. package/core/scripts/print_create_payload.py +18 -0
  35. package/core/scripts/session_manager.py +120 -0
  36. package/core/scripts/task_complete.py +127 -0
  37. package/core/scripts/verify_all.py +327 -0
  38. package/core/skills/analytics-strategy/SKILL.md +128 -0
  39. package/core/skills/api-patterns/SKILL.md +81 -0
  40. package/core/skills/api-patterns/api-style.md +42 -0
  41. package/core/skills/api-patterns/auth.md +24 -0
  42. package/core/skills/api-patterns/documentation.md +26 -0
  43. package/core/skills/api-patterns/graphql.md +41 -0
  44. package/core/skills/api-patterns/rate-limiting.md +31 -0
  45. package/core/skills/api-patterns/response.md +37 -0
  46. package/core/skills/api-patterns/rest.md +40 -0
  47. package/core/skills/api-patterns/scripts/api_validator.py +211 -0
  48. package/core/skills/api-patterns/security-testing.md +122 -0
  49. package/core/skills/api-patterns/trpc.md +41 -0
  50. package/core/skills/api-patterns/versioning.md +22 -0
  51. package/core/skills/app-builder/SKILL.md +75 -0
  52. package/core/skills/app-builder/agent-coordination.md +71 -0
  53. package/core/skills/app-builder/feature-building.md +53 -0
  54. package/core/skills/app-builder/project-detection.md +34 -0
  55. package/core/skills/app-builder/scaffolding.md +118 -0
  56. package/core/skills/app-builder/tech-stack.md +40 -0
  57. package/core/skills/app-builder/templates/SKILL.md +39 -0
  58. package/core/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
  59. package/core/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
  60. package/core/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
  61. package/core/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
  62. package/core/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
  63. package/core/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
  64. package/core/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
  65. package/core/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
  66. package/core/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
  67. package/core/skills/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
  68. package/core/skills/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
  69. package/core/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
  70. package/core/skills/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
  71. package/core/skills/architecture/SKILL.md +55 -0
  72. package/core/skills/architecture/context-discovery.md +43 -0
  73. package/core/skills/architecture/examples.md +94 -0
  74. package/core/skills/architecture/pattern-selection.md +68 -0
  75. package/core/skills/architecture/patterns-reference.md +50 -0
  76. package/core/skills/architecture/trade-off-analysis.md +77 -0
  77. package/core/skills/atomic-design/SKILL.md +282 -0
  78. package/core/skills/atomic-design/references/classification-guide.md +132 -0
  79. package/core/skills/atomic-design/references/quality-checklist.md +60 -0
  80. package/core/skills/atomic-design/references/stacks/stack-blade.md +254 -0
  81. package/core/skills/atomic-design/references/stacks/stack-nextjs.md +272 -0
  82. package/core/skills/atomic-design/references/stacks/stack-react.md +239 -0
  83. package/core/skills/atomic-design/references/stacks/stack-vue.md +224 -0
  84. package/core/skills/bash-linux/SKILL.md +199 -0
  85. package/core/skills/behavioral-modes/SKILL.md +242 -0
  86. package/core/skills/brainstorming/SKILL.md +163 -0
  87. package/core/skills/brainstorming/dynamic-questioning.md +373 -0
  88. package/core/skills/checkpointing-patterns/SKILL.md +163 -0
  89. package/core/skills/clean-code/SKILL.md +201 -0
  90. package/core/skills/code-review-checklist/SKILL.md +109 -0
  91. package/core/skills/code-truth-validation/SKILL.md +149 -0
  92. package/core/skills/component-library-discovery/SKILL.md +154 -0
  93. package/core/skills/content-strategy/SKILL.md +222 -0
  94. package/core/skills/context-budget/SKILL.md +155 -0
  95. package/core/skills/context-gathering-patterns/SKILL.md +278 -0
  96. package/core/skills/cost-tracking/SKILL.md +206 -0
  97. package/core/skills/database-design/SKILL.md +52 -0
  98. package/core/skills/database-design/database-selection.md +43 -0
  99. package/core/skills/database-design/indexing.md +39 -0
  100. package/core/skills/database-design/migrations.md +48 -0
  101. package/core/skills/database-design/optimization.md +36 -0
  102. package/core/skills/database-design/orm-selection.md +30 -0
  103. package/core/skills/database-design/schema-design.md +56 -0
  104. package/core/skills/database-design/scripts/schema_validator.py +172 -0
  105. package/core/skills/deployment-procedures/SKILL.md +295 -0
  106. package/core/skills/design-md/README.md +34 -0
  107. package/core/skills/design-md/SKILL.md +172 -0
  108. package/core/skills/design-md/examples/DESIGN.md +154 -0
  109. package/core/skills/design-system-enforcement/SKILL.md +339 -0
  110. package/core/skills/doc.md +177 -0
  111. package/core/skills/document-registry/SKILL.md +130 -0
  112. package/core/skills/documentation-publishing/SKILL.md +174 -0
  113. package/core/skills/documentation-templates/SKILL.md +194 -0
  114. package/core/skills/enhance-prompt/README.md +34 -0
  115. package/core/skills/enhance-prompt/SKILL.md +204 -0
  116. package/core/skills/enhance-prompt/references/KEYWORDS.md +114 -0
  117. package/core/skills/frontend-design/SKILL.md +430 -0
  118. package/core/skills/frontend-design/animation-guide.md +331 -0
  119. package/core/skills/frontend-design/color-system.md +311 -0
  120. package/core/skills/frontend-design/decision-trees.md +418 -0
  121. package/core/skills/frontend-design/motion-graphics.md +306 -0
  122. package/core/skills/frontend-design/scripts/accessibility_checker.py +183 -0
  123. package/core/skills/frontend-design/scripts/ux_audit.py +722 -0
  124. package/core/skills/frontend-design/typography-system.md +345 -0
  125. package/core/skills/frontend-design/ux-psychology.md +541 -0
  126. package/core/skills/frontend-design/visual-effects.md +383 -0
  127. package/core/skills/game-development/2d-games/SKILL.md +119 -0
  128. package/core/skills/game-development/3d-games/SKILL.md +135 -0
  129. package/core/skills/game-development/SKILL.md +167 -0
  130. package/core/skills/game-development/game-art/SKILL.md +185 -0
  131. package/core/skills/game-development/game-audio/SKILL.md +190 -0
  132. package/core/skills/game-development/game-design/SKILL.md +129 -0
  133. package/core/skills/game-development/mobile-games/SKILL.md +108 -0
  134. package/core/skills/game-development/multiplayer/SKILL.md +132 -0
  135. package/core/skills/game-development/pc-games/SKILL.md +144 -0
  136. package/core/skills/game-development/vr-ar/SKILL.md +123 -0
  137. package/core/skills/game-development/web-games/SKILL.md +150 -0
  138. package/core/skills/geo-fundamentals/SKILL.md +156 -0
  139. package/core/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
  140. package/core/skills/git-workflow/SKILL.md +263 -0
  141. package/core/skills/history-check-patterns/SKILL.md +125 -0
  142. package/core/skills/i18n-localization/SKILL.md +154 -0
  143. package/core/skills/i18n-localization/scripts/i18n_checker.py +241 -0
  144. package/core/skills/integration-completeness/SKILL.md +219 -0
  145. package/core/skills/intelligent-routing/SKILL.md +370 -0
  146. package/core/skills/lint-and-validate/SKILL.md +45 -0
  147. package/core/skills/lint-and-validate/scripts/lint_runner.py +173 -0
  148. package/core/skills/lint-and-validate/scripts/type_coverage.py +173 -0
  149. package/core/skills/local-verification/SKILL.md +195 -0
  150. package/core/skills/mcp-builder/SKILL.md +176 -0
  151. package/core/skills/mobile-design/SKILL.md +394 -0
  152. package/core/skills/mobile-design/decision-trees.md +516 -0
  153. package/core/skills/mobile-design/mobile-backend.md +491 -0
  154. package/core/skills/mobile-design/mobile-color-system.md +420 -0
  155. package/core/skills/mobile-design/mobile-debugging.md +122 -0
  156. package/core/skills/mobile-design/mobile-design-thinking.md +357 -0
  157. package/core/skills/mobile-design/mobile-navigation.md +458 -0
  158. package/core/skills/mobile-design/mobile-performance.md +767 -0
  159. package/core/skills/mobile-design/mobile-testing.md +356 -0
  160. package/core/skills/mobile-design/mobile-typography.md +433 -0
  161. package/core/skills/mobile-design/platform-android.md +666 -0
  162. package/core/skills/mobile-design/platform-ios.md +561 -0
  163. package/core/skills/mobile-design/scripts/mobile_audit.py +670 -0
  164. package/core/skills/mobile-design/touch-psychology.md +537 -0
  165. package/core/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +312 -0
  166. package/core/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +240 -0
  167. package/core/skills/nextjs-react-expert/3-server-server-side-performance.md +490 -0
  168. package/core/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +264 -0
  169. package/core/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
  170. package/core/skills/nextjs-react-expert/6-rendering-rendering-performance.md +432 -0
  171. package/core/skills/nextjs-react-expert/7-js-javascript-performance.md +684 -0
  172. package/core/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +150 -0
  173. package/core/skills/nextjs-react-expert/SKILL.md +267 -0
  174. package/core/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
  175. package/core/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
  176. package/core/skills/nodejs-best-practices/SKILL.md +333 -0
  177. package/core/skills/notion-task-patterns/SKILL.md +2529 -0
  178. package/core/skills/page-specifications/SKILL.md +367 -0
  179. package/core/skills/parallel-agents/SKILL.md +175 -0
  180. package/core/skills/performance-profiling/SKILL.md +143 -0
  181. package/core/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
  182. package/core/skills/plan-writing/SKILL.md +190 -0
  183. package/core/skills/powershell-windows/SKILL.md +167 -0
  184. package/core/skills/project-foundation/SKILL.md +117 -0
  185. package/core/skills/project-setup/SKILL.md +141 -0
  186. package/core/skills/project-tracking-patterns/SKILL.md +357 -0
  187. package/core/skills/project-type-discovery/SKILL.md +239 -0
  188. package/core/skills/python-patterns/SKILL.md +441 -0
  189. package/core/skills/qa-test-generation/SKILL.md +156 -0
  190. package/core/skills/react-components/README.md +36 -0
  191. package/core/skills/react-components/SKILL.md +47 -0
  192. package/core/skills/react-components/examples/gold-standard-card.tsx +80 -0
  193. package/core/skills/react-components/package-lock.json +231 -0
  194. package/core/skills/react-components/package.json +16 -0
  195. package/core/skills/react-components/resources/architecture-checklist.md +15 -0
  196. package/core/skills/react-components/resources/component-template.tsx +37 -0
  197. package/core/skills/react-components/resources/stitch-api-reference.md +14 -0
  198. package/core/skills/react-components/resources/style-guide.json +27 -0
  199. package/core/skills/react-components/scripts/fetch-stitch.sh +30 -0
  200. package/core/skills/react-components/scripts/validate.js +68 -0
  201. package/core/skills/red-team-tactics/SKILL.md +199 -0
  202. package/core/skills/remotion/README.md +105 -0
  203. package/core/skills/remotion/SKILL.md +393 -0
  204. package/core/skills/remotion/examples/WalkthroughComposition.tsx +78 -0
  205. package/core/skills/remotion/examples/screens.json +56 -0
  206. package/core/skills/remotion/resources/composition-checklist.md +124 -0
  207. package/core/skills/remotion/resources/screen-slide-template.tsx +123 -0
  208. package/core/skills/remotion/scripts/download-stitch-asset.sh +38 -0
  209. package/core/skills/seo-fundamentals/SKILL.md +129 -0
  210. package/core/skills/seo-fundamentals/scripts/seo_checker.py +219 -0
  211. package/core/skills/server-management/SKILL.md +161 -0
  212. package/core/skills/session-resilience/SKILL.md +199 -0
  213. package/core/skills/shadcn-ui/README.md +248 -0
  214. package/core/skills/shadcn-ui/SKILL.md +326 -0
  215. package/core/skills/shadcn-ui/examples/auth-layout.tsx +177 -0
  216. package/core/skills/shadcn-ui/examples/data-table.tsx +313 -0
  217. package/core/skills/shadcn-ui/examples/form-pattern.tsx +177 -0
  218. package/core/skills/shadcn-ui/resources/component-catalog.md +481 -0
  219. package/core/skills/shadcn-ui/resources/customization-guide.md +516 -0
  220. package/core/skills/shadcn-ui/resources/migration-guide.md +463 -0
  221. package/core/skills/shadcn-ui/resources/setup-guide.md +412 -0
  222. package/core/skills/shadcn-ui/scripts/verify-setup.sh +134 -0
  223. package/core/skills/state-machine/SKILL.md +264 -0
  224. package/core/skills/stitch-loop/README.md +54 -0
  225. package/core/skills/stitch-loop/SKILL.md +203 -0
  226. package/core/skills/stitch-loop/examples/SITE.md +73 -0
  227. package/core/skills/stitch-loop/examples/next-prompt.md +25 -0
  228. package/core/skills/stitch-loop/resources/baton-schema.md +61 -0
  229. package/core/skills/stitch-loop/resources/site-template.md +104 -0
  230. package/core/skills/systematic-debugging/SKILL.md +109 -0
  231. package/core/skills/tailwind-patterns/SKILL.md +284 -0
  232. package/core/skills/tdd-validation/SKILL.md +243 -0
  233. package/core/skills/tdd-workflow/SKILL.md +284 -0
  234. package/core/skills/testing-patterns/SKILL.md +196 -0
  235. package/core/skills/testing-patterns/scripts/test_runner.py +219 -0
  236. package/core/skills/ui-ux-discovery/SKILL.md +329 -0
  237. package/core/skills/ui-validation/SKILL.md +190 -0
  238. package/core/skills/ui-validation/scripts/ui_antipattern_check.py +317 -0
  239. package/core/skills/verification-gate/SKILL.md +205 -0
  240. package/core/skills/vulnerability-scanner/SKILL.md +276 -0
  241. package/core/skills/vulnerability-scanner/checklists.md +121 -0
  242. package/core/skills/vulnerability-scanner/scripts/security_scan.py +458 -0
  243. package/core/skills/web-design-guidelines/SKILL.md +57 -0
  244. package/core/skills/webapp-testing/SKILL.md +187 -0
  245. package/core/skills/webapp-testing/scripts/playwright_runner.py +173 -0
  246. package/core/templates/ARCHITECTURE.template.md +407 -0
  247. package/core/templates/project-resources.example.json +71 -0
  248. package/core/workflows/atomic.md +182 -0
  249. package/core/workflows/brainstorm.md +134 -0
  250. package/core/workflows/check-task.md +242 -0
  251. package/core/workflows/copy-collect.md +306 -0
  252. package/core/workflows/create-agent.md +33 -0
  253. package/core/workflows/create-skill.md +39 -0
  254. package/core/workflows/create-workflow.md +33 -0
  255. package/core/workflows/create.md +92 -0
  256. package/core/workflows/debug.md +186 -0
  257. package/core/workflows/demand.md +443 -0
  258. package/core/workflows/deploy.md +260 -0
  259. package/core/workflows/discovery.md +267 -0
  260. package/core/workflows/document.md +272 -0
  261. package/core/workflows/ds-components.md +296 -0
  262. package/core/workflows/ds-init.md +58 -0
  263. package/core/workflows/ds-refactor.md +245 -0
  264. package/core/workflows/ds-references.md +197 -0
  265. package/core/workflows/ds-styleguide.md +237 -0
  266. package/core/workflows/ds-token-diff.md +103 -0
  267. package/core/workflows/ds-tokens.md +317 -0
  268. package/core/workflows/ds-validate.md +309 -0
  269. package/core/workflows/execute.md +483 -0
  270. package/core/workflows/extract-template.md +278 -0
  271. package/core/workflows/fix-failed-tests.md +160 -0
  272. package/core/workflows/init-project.md +386 -0
  273. package/core/workflows/legacy-project.md +849 -0
  274. package/core/workflows/log.md +97 -0
  275. package/core/workflows/new-project.md +610 -0
  276. package/core/workflows/new-project.md.bak +3292 -0
  277. package/core/workflows/new-task.md +404 -0
  278. package/core/workflows/orchestrate.md +237 -0
  279. package/core/workflows/page-build.md +296 -0
  280. package/core/workflows/plan.md +89 -0
  281. package/core/workflows/prd.md +255 -0
  282. package/core/workflows/preview.md +81 -0
  283. package/core/workflows/review-page.md +304 -0
  284. package/core/workflows/status.md +86 -0
  285. package/core/workflows/stitch.md +226 -0
  286. package/core/workflows/task-complete.md +473 -0
  287. package/core/workflows/task-update.md +163 -0
  288. package/core/workflows/tdd.md +344 -0
  289. package/core/workflows/test.md +251 -0
  290. package/core/workflows/ui-ux-pro-max.md +437 -0
  291. package/core/workflows/ux-mobile-optimize.md +262 -0
  292. package/core/workflows/ux-mobile-validate.md +297 -0
  293. package/engine-files/GEMINI.md +69 -0
  294. package/package.json +47 -0
  295. package/runtime-adapters/antigravity.js +26 -0
  296. package/runtime-adapters/claude.js +57 -0
  297. package/runtime-adapters/codex.js +51 -0
  298. package/runtime-adapters/copilot.js +51 -0
  299. package/runtime-adapters/cursor.js +51 -0
  300. package/runtime-adapters/gemini-cli.js +30 -0
  301. package/runtime-adapters/opencode.js +51 -0
  302. package/runtime-adapters/windsurf.js +51 -0
@@ -0,0 +1,177 @@
1
+ // Example: Authentication Layout with shadcn/ui
2
+ // Demonstrates: Layout composition, card usage, form integration
3
+
4
+ "use client"
5
+
6
+ import { Button } from "@/components/ui/button"
7
+ import {
8
+ Card,
9
+ CardContent,
10
+ CardDescription,
11
+ CardFooter,
12
+ CardHeader,
13
+ CardTitle,
14
+ } from "@/components/ui/card"
15
+ import { Input } from "@/components/ui/input"
16
+ import { Label } from "@/components/ui/label"
17
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
18
+ import { useState } from "react"
19
+
20
+ export function AuthLayout() {
21
+ const [isLoading, setIsLoading] = useState<boolean>(false)
22
+
23
+ async function onSubmit(event: React.FormEvent<HTMLFormElement>) {
24
+ event.preventDefault()
25
+ setIsLoading(true)
26
+
27
+ // Simulate API call
28
+ setTimeout(() => {
29
+ setIsLoading(false)
30
+ }, 2000)
31
+ }
32
+
33
+ return (
34
+ <div className="flex min-h-screen items-center justify-center bg-muted/40">
35
+ <Tabs defaultValue="login" className="w-[400px]">
36
+ <TabsList className="grid w-full grid-cols-2">
37
+ <TabsTrigger value="login">Login</TabsTrigger>
38
+ <TabsTrigger value="register">Register</TabsTrigger>
39
+ </TabsList>
40
+
41
+ <TabsContent value="login">
42
+ <Card>
43
+ <CardHeader>
44
+ <CardTitle>Login</CardTitle>
45
+ <CardDescription>
46
+ Enter your credentials to access your account.
47
+ </CardDescription>
48
+ </CardHeader>
49
+ <form onSubmit={onSubmit}>
50
+ <CardContent className="space-y-4">
51
+ <div className="space-y-2">
52
+ <Label htmlFor="email">Email</Label>
53
+ <Input
54
+ id="email"
55
+ type="email"
56
+ placeholder="m@example.com"
57
+ required
58
+ />
59
+ </div>
60
+ <div className="space-y-2">
61
+ <Label htmlFor="password">Password</Label>
62
+ <Input
63
+ id="password"
64
+ type="password"
65
+ required
66
+ />
67
+ </div>
68
+ </CardContent>
69
+ <CardFooter className="flex flex-col space-y-4">
70
+ <Button
71
+ type="submit"
72
+ className="w-full"
73
+ disabled={isLoading}
74
+ >
75
+ {isLoading ? "Signing in..." : "Sign in"}
76
+ </Button>
77
+ <Button
78
+ type="button"
79
+ variant="link"
80
+ className="w-full text-sm text-muted-foreground"
81
+ >
82
+ Forgot password?
83
+ </Button>
84
+ </CardFooter>
85
+ </form>
86
+ </Card>
87
+ </TabsContent>
88
+
89
+ <TabsContent value="register">
90
+ <Card>
91
+ <CardHeader>
92
+ <CardTitle>Create an account</CardTitle>
93
+ <CardDescription>
94
+ Enter your information to create an account.
95
+ </CardDescription>
96
+ </CardHeader>
97
+ <form onSubmit={onSubmit}>
98
+ <CardContent className="space-y-4">
99
+ <div className="space-y-2">
100
+ <Label htmlFor="name">Name</Label>
101
+ <Input
102
+ id="name"
103
+ placeholder="John Doe"
104
+ required
105
+ />
106
+ </div>
107
+ <div className="space-y-2">
108
+ <Label htmlFor="register-email">Email</Label>
109
+ <Input
110
+ id="register-email"
111
+ type="email"
112
+ placeholder="m@example.com"
113
+ required
114
+ />
115
+ </div>
116
+ <div className="space-y-2">
117
+ <Label htmlFor="register-password">Password</Label>
118
+ <Input
119
+ id="register-password"
120
+ type="password"
121
+ required
122
+ />
123
+ </div>
124
+ <div className="space-y-2">
125
+ <Label htmlFor="confirm-password">Confirm Password</Label>
126
+ <Input
127
+ id="confirm-password"
128
+ type="password"
129
+ required
130
+ />
131
+ </div>
132
+ </CardContent>
133
+ <CardFooter>
134
+ <Button
135
+ type="submit"
136
+ className="w-full"
137
+ disabled={isLoading}
138
+ >
139
+ {isLoading ? "Creating account..." : "Create account"}
140
+ </Button>
141
+ </CardFooter>
142
+ </form>
143
+ </Card>
144
+ </TabsContent>
145
+ </Tabs>
146
+ </div>
147
+ )
148
+ }
149
+
150
+ /**
151
+ * Key Patterns Demonstrated:
152
+ *
153
+ * 1. Layout Composition: Centered authentication card with full-height viewport
154
+ * 2. Card Usage: Structured content with header, body, and footer
155
+ * 3. Tabs: Switch between login and register forms
156
+ * 4. Form Structure: Proper labeling and input grouping
157
+ * 5. Loading States: Button disabled state during form submission
158
+ * 6. Responsive Design: Mobile-friendly with max-width constraint
159
+ * 7. Tailwind Utilities: Using spacing, flexbox, and grid utilities
160
+ *
161
+ * Design Choices:
162
+ * - Minimal, clean interface focusing on the task at hand
163
+ * - Proper semantic HTML with form elements
164
+ * - Accessible labels and inputs
165
+ * - Clear visual hierarchy with card components
166
+ * - Loading feedback for better UX
167
+ *
168
+ * Required Dependencies:
169
+ * None beyond React and shadcn/ui components
170
+ *
171
+ * Installation:
172
+ * npx shadcn@latest add card
173
+ * npx shadcn@latest add input
174
+ * npx shadcn@latest add label
175
+ * npx shadcn@latest add button
176
+ * npx shadcn@latest add tabs
177
+ */
@@ -0,0 +1,313 @@
1
+ // Example: Data Table with Sorting and Filtering
2
+ // Demonstrates: Table composition, TanStack Table integration, responsive design
3
+
4
+ "use client"
5
+
6
+ import {
7
+ ColumnDef,
8
+ ColumnFiltersState,
9
+ flexRender,
10
+ getCoreRowModel,
11
+ getFilteredRowModel,
12
+ getPaginationRowModel,
13
+ getSortedRowModel,
14
+ SortingState,
15
+ useReactTable,
16
+ } from "@tanstack/react-table"
17
+ import { ArrowUpDown, ChevronDown, MoreHorizontal } from "lucide-react"
18
+ import * as React from "react"
19
+
20
+ import { Button } from "@/components/ui/button"
21
+ import {
22
+ DropdownMenu,
23
+ DropdownMenuCheckboxItem,
24
+ DropdownMenuContent,
25
+ DropdownMenuItem,
26
+ DropdownMenuLabel,
27
+ DropdownMenuSeparator,
28
+ DropdownMenuTrigger,
29
+ } from "@/components/ui/dropdown-menu"
30
+ import { Input } from "@/components/ui/input"
31
+ import {
32
+ Table,
33
+ TableBody,
34
+ TableCell,
35
+ TableHead,
36
+ TableHeader,
37
+ TableRow,
38
+ } from "@/components/ui/table"
39
+
40
+ // Define data type
41
+ export type User = {
42
+ id: string
43
+ name: string
44
+ email: string
45
+ role: "admin" | "user" | "viewer"
46
+ status: "active" | "inactive"
47
+ }
48
+
49
+ // Sample data
50
+ const data: User[] = [
51
+ {
52
+ id: "1",
53
+ name: "Alice Johnson",
54
+ email: "alice@example.com",
55
+ role: "admin",
56
+ status: "active",
57
+ },
58
+ {
59
+ id: "2",
60
+ name: "Bob Smith",
61
+ email: "bob@example.com",
62
+ role: "user",
63
+ status: "active",
64
+ },
65
+ {
66
+ id: "3",
67
+ name: "Carol White",
68
+ email: "carol@example.com",
69
+ role: "viewer",
70
+ status: "inactive",
71
+ },
72
+ ]
73
+
74
+ // Define columns
75
+ export const columns: ColumnDef<User>[] = [
76
+ {
77
+ accessorKey: "name",
78
+ header: ({ column }) => {
79
+ return (
80
+ <Button
81
+ variant="ghost"
82
+ onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
83
+ >
84
+ Name
85
+ <ArrowUpDown className="ml-2 h-4 w-4" />
86
+ </Button>
87
+ )
88
+ },
89
+ cell: ({ row }) => <div className="capitalize">{row.getValue("name")}</div>,
90
+ },
91
+ {
92
+ accessorKey: "email",
93
+ header: ({ column }) => {
94
+ return (
95
+ <Button
96
+ variant="ghost"
97
+ onClick={() => column.toggleSorting(column.getIsSorted() === "asc")}
98
+ >
99
+ Email
100
+ <ArrowUpDown className="ml-2 h-4 w-4" />
101
+ </Button>
102
+ )
103
+ },
104
+ cell: ({ row }) => <div className="lowercase">{row.getValue("email")}</div>,
105
+ },
106
+ {
107
+ accessorKey: "role",
108
+ header: "Role",
109
+ cell: ({ row }) => (
110
+ <div className="capitalize">{row.getValue("role")}</div>
111
+ ),
112
+ },
113
+ {
114
+ accessorKey: "status",
115
+ header: "Status",
116
+ cell: ({ row }) => (
117
+ <div className="capitalize">{row.getValue("status")}</div>
118
+ ),
119
+ },
120
+ {
121
+ id: "actions",
122
+ enableHiding: false,
123
+ cell: ({ row }) => {
124
+ const user = row.original
125
+
126
+ return (
127
+ <DropdownMenu>
128
+ <DropdownMenuTrigger asChild>
129
+ <Button variant="ghost" className="h-8 w-8 p-0">
130
+ <span className="sr-only">Open menu</span>
131
+ <MoreHorizontal className="h-4 w-4" />
132
+ </Button>
133
+ </DropdownMenuTrigger>
134
+ <DropdownMenuContent align="end">
135
+ <DropdownMenuLabel>Actions</DropdownMenuLabel>
136
+ <DropdownMenuItem
137
+ onClick={() => navigator.clipboard.writeText(user.id)}
138
+ >
139
+ Copy user ID
140
+ </DropdownMenuItem>
141
+ <DropdownMenuSeparator />
142
+ <DropdownMenuItem>View user</DropdownMenuItem>
143
+ <DropdownMenuItem>Edit user</DropdownMenuItem>
144
+ </DropdownMenuContent>
145
+ </DropdownMenu>
146
+ )
147
+ },
148
+ },
149
+ ]
150
+
151
+ export function DataTableExample() {
152
+ const [sorting, setSorting] = React.useState<SortingState>([])
153
+ const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>([])
154
+ const [columnVisibility, setColumnVisibility] = React.useState({})
155
+ const [rowSelection, setRowSelection] = React.useState({})
156
+
157
+ const table = useReactTable({
158
+ data,
159
+ columns,
160
+ onSortingChange: setSorting,
161
+ onColumnFiltersChange: setColumnFilters,
162
+ getCoreRowModel: getCoreRowModel(),
163
+ getPaginationRowModel: getPaginationRowModel(),
164
+ getSortedRowModel: getSortedRowModel(),
165
+ getFilteredRowModel: getFilteredRowModel(),
166
+ onColumnVisibilityChange: setColumnVisibility,
167
+ onRowSelectionChange: setRowSelection,
168
+ state: {
169
+ sorting,
170
+ columnFilters,
171
+ columnVisibility,
172
+ rowSelection,
173
+ },
174
+ })
175
+
176
+ return (
177
+ <div className="w-full">
178
+ <div className="flex items-center py-4">
179
+ <Input
180
+ placeholder="Filter names..."
181
+ value={(table.getColumn("name")?.getFilterValue() as string) ?? ""}
182
+ onChange={(event) =>
183
+ table.getColumn("name")?.setFilterValue(event.target.value)
184
+ }
185
+ className="max-w-sm"
186
+ />
187
+ <DropdownMenu>
188
+ <DropdownMenuTrigger asChild>
189
+ <Button variant="outline" className="ml-auto">
190
+ Columns <ChevronDown className="ml-2 h-4 w-4" />
191
+ </Button>
192
+ </DropdownMenuTrigger>
193
+ <DropdownMenuContent align="end">
194
+ {table
195
+ .getAllColumns()
196
+ .filter((column) => column.getCanHide())
197
+ .map((column) => {
198
+ return (
199
+ <DropdownMenuCheckboxItem
200
+ key={column.id}
201
+ className="capitalize"
202
+ checked={column.getIsVisible()}
203
+ onCheckedChange={(value) =>
204
+ column.toggleVisibility(!!value)
205
+ }
206
+ >
207
+ {column.id}
208
+ </DropdownMenuCheckboxItem>
209
+ )
210
+ })}
211
+ </DropdownMenuContent>
212
+ </DropdownMenu>
213
+ </div>
214
+ <div className="rounded-md border">
215
+ <Table>
216
+ <TableHeader>
217
+ {table.getHeaderGroups().map((headerGroup) => (
218
+ <TableRow key={headerGroup.id}>
219
+ {headerGroup.headers.map((header) => {
220
+ return (
221
+ <TableHead key={header.id}>
222
+ {header.isPlaceholder
223
+ ? null
224
+ : flexRender(
225
+ header.column.columnDef.header,
226
+ header.getContext()
227
+ )}
228
+ </TableHead>
229
+ )
230
+ })}
231
+ </TableRow>
232
+ ))}
233
+ </TableHeader>
234
+ <TableBody>
235
+ {table.getRowModel().rows?.length ? (
236
+ table.getRowModel().rows.map((row) => (
237
+ <TableRow
238
+ key={row.id}
239
+ data-state={row.getIsSelected() && "selected"}
240
+ >
241
+ {row.getVisibleCells().map((cell) => (
242
+ <TableCell key={cell.id}>
243
+ {flexRender(
244
+ cell.column.columnDef.cell,
245
+ cell.getContext()
246
+ )}
247
+ </TableCell>
248
+ ))}
249
+ </TableRow>
250
+ ))
251
+ ) : (
252
+ <TableRow>
253
+ <TableCell
254
+ colSpan={columns.length}
255
+ className="h-24 text-center"
256
+ >
257
+ No results.
258
+ </TableCell>
259
+ </TableRow>
260
+ )}
261
+ </TableBody>
262
+ </Table>
263
+ </div>
264
+ <div className="flex items-center justify-end space-x-2 py-4">
265
+ <div className="flex-1 text-sm text-muted-foreground">
266
+ {table.getFilteredSelectedRowModel().rows.length} of{" "}
267
+ {table.getFilteredRowModel().rows.length} row(s) selected.
268
+ </div>
269
+ <div className="space-x-2">
270
+ <Button
271
+ variant="outline"
272
+ size="sm"
273
+ onClick={() => table.previousPage()}
274
+ disabled={!table.getCanPreviousPage()}
275
+ >
276
+ Previous
277
+ </Button>
278
+ <Button
279
+ variant="outline"
280
+ size="sm"
281
+ onClick={() => table.nextPage()}
282
+ disabled={!table.getCanNextPage()}
283
+ >
284
+ Next
285
+ </Button>
286
+ </div>
287
+ </div>
288
+ </div>
289
+ )
290
+ }
291
+
292
+ /**
293
+ * Key Patterns Demonstrated:
294
+ *
295
+ * 1. TanStack Table Integration: Using @tanstack/react-table with shadcn/ui
296
+ * 2. Sorting: Click headers to sort ascending/descending
297
+ * 3. Filtering: Text input to filter table data
298
+ * 4. Column Visibility: Toggle columns via dropdown menu
299
+ * 5. Pagination: Built-in pagination controls
300
+ * 6. Row Actions: Dropdown menu per row for context actions
301
+ * 7. Responsive Design: Table adapts to different screen sizes
302
+ *
303
+ * Required Dependencies:
304
+ * - @tanstack/react-table
305
+ * - lucide-react
306
+ *
307
+ * Installation:
308
+ * npx shadcn@latest add table
309
+ * npx shadcn@latest add button
310
+ * npx shadcn@latest add input
311
+ * npx shadcn@latest add dropdown-menu
312
+ * npm install @tanstack/react-table lucide-react
313
+ */
@@ -0,0 +1,177 @@
1
+ // Example: Form Pattern with shadcn/ui components
2
+ // Demonstrates: Form building, validation, and composition
3
+
4
+ "use client"
5
+
6
+ import { Button } from "@/components/ui/button"
7
+ import {
8
+ Form,
9
+ FormControl,
10
+ FormDescription,
11
+ FormField,
12
+ FormItem,
13
+ FormLabel,
14
+ FormMessage,
15
+ } from "@/components/ui/form"
16
+ import { Input } from "@/components/ui/input"
17
+ import {
18
+ Select,
19
+ SelectContent,
20
+ SelectItem,
21
+ SelectTrigger,
22
+ SelectValue,
23
+ } from "@/components/ui/select"
24
+ import { Textarea } from "@/components/ui/textarea"
25
+ import { toast } from "@/components/ui/use-toast"
26
+ import { zodResolver } from "@hookform/resolvers/zod"
27
+ import { useForm } from "react-hook-form"
28
+ import * as z from "zod"
29
+
30
+ // Define form schema with zod
31
+ const formSchema = z.object({
32
+ username: z.string().min(2, {
33
+ message: "Username must be at least 2 characters.",
34
+ }),
35
+ email: z.string().email({
36
+ message: "Please enter a valid email address.",
37
+ }),
38
+ role: z.enum(["admin", "user", "viewer"], {
39
+ required_error: "Please select a role.",
40
+ }),
41
+ bio: z.string().max(160, {
42
+ message: "Bio must not be longer than 160 characters.",
43
+ }).optional(),
44
+ })
45
+
46
+ type FormValues = z.infer<typeof formSchema>
47
+
48
+ export function UserProfileForm() {
49
+ // Initialize form with react-hook-form and zod validation
50
+ const form = useForm<FormValues>({
51
+ resolver: zodResolver(formSchema),
52
+ defaultValues: {
53
+ username: "",
54
+ email: "",
55
+ bio: "",
56
+ },
57
+ })
58
+
59
+ // Handle form submission
60
+ function onSubmit(values: FormValues) {
61
+ // In a real app, send to API
62
+ console.log(values)
63
+
64
+ toast({
65
+ title: "Profile updated",
66
+ description: "Your profile has been successfully updated.",
67
+ })
68
+ }
69
+
70
+ return (
71
+ <Form {...form}>
72
+ <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-8">
73
+ <FormField
74
+ control={form.control}
75
+ name="username"
76
+ render={({ field }) => (
77
+ <FormItem>
78
+ <FormLabel>Username</FormLabel>
79
+ <FormControl>
80
+ <Input placeholder="johndoe" {...field} />
81
+ </FormControl>
82
+ <FormDescription>
83
+ This is your public display name.
84
+ </FormDescription>
85
+ <FormMessage />
86
+ </FormItem>
87
+ )}
88
+ />
89
+
90
+ <FormField
91
+ control={form.control}
92
+ name="email"
93
+ render={({ field }) => (
94
+ <FormItem>
95
+ <FormLabel>Email</FormLabel>
96
+ <FormControl>
97
+ <Input type="email" placeholder="john@example.com" {...field} />
98
+ </FormControl>
99
+ <FormMessage />
100
+ </FormItem>
101
+ )}
102
+ />
103
+
104
+ <FormField
105
+ control={form.control}
106
+ name="role"
107
+ render={({ field }) => (
108
+ <FormItem>
109
+ <FormLabel>Role</FormLabel>
110
+ <Select onValueChange={field.onChange} defaultValue={field.value}>
111
+ <FormControl>
112
+ <SelectTrigger>
113
+ <SelectValue placeholder="Select a role" />
114
+ </SelectTrigger>
115
+ </FormControl>
116
+ <SelectContent>
117
+ <SelectItem value="admin">Admin</SelectItem>
118
+ <SelectItem value="user">User</SelectItem>
119
+ <SelectItem value="viewer">Viewer</SelectItem>
120
+ </SelectContent>
121
+ </Select>
122
+ <FormDescription>
123
+ Your role determines your access level.
124
+ </FormDescription>
125
+ <FormMessage />
126
+ </FormItem>
127
+ )}
128
+ />
129
+
130
+ <FormField
131
+ control={form.control}
132
+ name="bio"
133
+ render={({ field }) => (
134
+ <FormItem>
135
+ <FormLabel>Bio</FormLabel>
136
+ <FormControl>
137
+ <Textarea
138
+ placeholder="Tell us about yourself"
139
+ className="resize-none"
140
+ {...field}
141
+ />
142
+ </FormControl>
143
+ <FormDescription>
144
+ Optional. Maximum 160 characters.
145
+ </FormDescription>
146
+ <FormMessage />
147
+ </FormItem>
148
+ )}
149
+ />
150
+
151
+ <Button type="submit">Update profile</Button>
152
+ </form>
153
+ </Form>
154
+ )
155
+ }
156
+
157
+ /**
158
+ * Key Patterns Demonstrated:
159
+ *
160
+ * 1. Form Composition: Using shadcn/ui's Form components with react-hook-form
161
+ * 2. Validation: Zod schema for type-safe validation
162
+ * 3. Error Handling: Automatic error messages via FormMessage
163
+ * 4. Accessibility: All fields properly labeled with descriptions
164
+ * 5. Type Safety: TypeScript types inferred from Zod schema
165
+ *
166
+ * Required Dependencies:
167
+ * - react-hook-form
168
+ * - @hookform/resolvers
169
+ * - zod
170
+ *
171
+ * Installation:
172
+ * npx shadcn@latest add form
173
+ * npx shadcn@latest add input
174
+ * npx shadcn@latest add select
175
+ * npx shadcn@latest add textarea
176
+ * npx shadcn@latest add button
177
+ */