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,254 @@
1
+ # Stack Adapter: Laravel Blade + Alpine.js
2
+
3
+ > For Laravel projects using Blade components, Tailwind CSS, and Alpine.js for interactivity.
4
+
5
+ ---
6
+
7
+ ## Folder Structure
8
+
9
+ For a component named `button` in the **atoms** category:
10
+
11
+ ```
12
+ resources/views/components/atoms/
13
+ └── button.blade.php
14
+
15
+ app/View/Components/Atoms/
16
+ └── Button.php
17
+
18
+ tests/Unit/Components/Atoms/
19
+ └── ButtonTest.php
20
+ ```
21
+
22
+ **Category paths (Blade views):**
23
+ - `resources/views/components/atoms/` — button, input, icon, badge
24
+ - `resources/views/components/molecules/` — search-bar, form-field
25
+ - `resources/views/components/organisms/` — header, card, modal
26
+
27
+ **Category paths (Component classes):**
28
+ - `app/View/Components/Atoms/`
29
+ - `app/View/Components/Molecules/`
30
+ - `app/View/Components/Organisms/`
31
+
32
+ ---
33
+
34
+ ## Required Files (3 minimum)
35
+
36
+ ### 1. Component Class — `app/View/Components/Atoms/Button.php`
37
+
38
+ ```php
39
+ <?php
40
+
41
+ namespace App\View\Components\Atoms;
42
+
43
+ use Illuminate\View\Component;
44
+
45
+ class Button extends Component
46
+ {
47
+ /**
48
+ * @param 'primary'|'secondary' $variant
49
+ * @param 'sm'|'md'|'lg' $size
50
+ * @param bool $disabled
51
+ */
52
+ public function __construct(
53
+ public string $variant = 'primary',
54
+ public string $size = 'md',
55
+ public bool $disabled = false,
56
+ ) {}
57
+
58
+ public function render()
59
+ {
60
+ return view('components.atoms.button');
61
+ }
62
+
63
+ public function classes(): string
64
+ {
65
+ return implode(' ', array_filter([
66
+ 'button',
67
+ "button--{$this->variant}",
68
+ "button--{$this->size}",
69
+ ]));
70
+ }
71
+ }
72
+ ```
73
+
74
+ **Rules:**
75
+ - PHPDoc for all constructor parameters with union types
76
+ - Promoted constructor properties
77
+ - Helper methods for computed values (like CSS classes)
78
+ - Namespace follows folder structure
79
+
80
+ ### 2. Blade Template — `resources/views/components/atoms/button.blade.php`
81
+
82
+ ```blade
83
+ <button
84
+ {{ $attributes->merge(['class' => $classes()]) }}
85
+ @if($disabled) disabled @endif
86
+ {{ $attributes->except(['class']) }}
87
+ >
88
+ {{ $slot }}
89
+ </button>
90
+ ```
91
+
92
+ **Rules:**
93
+ - Use `$attributes->merge()` for class merging
94
+ - Use `$slot` (not `$children`)
95
+ - Keep templates minimal — logic in Component class
96
+ - Design tokens via Tailwind/CSS classes mapped to variables
97
+
98
+ #### With Alpine.js interactivity:
99
+
100
+ ```blade
101
+ <button
102
+ {{ $attributes->merge(['class' => $classes()]) }}
103
+ @if($disabled) disabled @endif
104
+ x-data="{ loading: false }"
105
+ x-on:click="loading = true; $dispatch('button-click')"
106
+ x-bind:class="{ 'button--loading': loading }"
107
+ >
108
+ <span x-show="!loading">{{ $slot }}</span>
109
+ <span x-show="loading" x-cloak>Loading...</span>
110
+ </button>
111
+ ```
112
+
113
+ ### 3. Test — `tests/Unit/Components/Atoms/ButtonTest.php`
114
+
115
+ ```php
116
+ <?php
117
+
118
+ namespace Tests\Unit\Components\Atoms;
119
+
120
+ use App\View\Components\Atoms\Button;
121
+ use Tests\TestCase;
122
+
123
+ class ButtonTest extends TestCase
124
+ {
125
+ public function test_renders_with_default_props(): void
126
+ {
127
+ $component = new Button();
128
+
129
+ $this->assertEquals('primary', $component->variant);
130
+ $this->assertEquals('md', $component->size);
131
+ $this->assertFalse($component->disabled);
132
+ }
133
+
134
+ public function test_generates_correct_classes(): void
135
+ {
136
+ $component = new Button(variant: 'secondary', size: 'lg');
137
+
138
+ $this->assertStringContainsString('button--secondary', $component->classes());
139
+ $this->assertStringContainsString('button--lg', $component->classes());
140
+ }
141
+
142
+ public function test_renders_in_view(): void
143
+ {
144
+ $view = $this->component(Button::class, [
145
+ 'variant' => 'primary',
146
+ ]);
147
+
148
+ $view->assertSee('button--primary');
149
+ }
150
+
151
+ public function test_disabled_state(): void
152
+ {
153
+ $view = $this->component(Button::class, [
154
+ 'disabled' => true,
155
+ ]);
156
+
157
+ $view->assertSee('disabled');
158
+ }
159
+ }
160
+ ```
161
+
162
+ **Rules:**
163
+ - PHPUnit (Laravel default)
164
+ - Test: construction, class generation, rendering, states
165
+ - Location: `tests/Unit/Components/{Category}/`
166
+
167
+ ---
168
+
169
+ ## Usage in Blade Views
170
+
171
+ ```blade
172
+ {{-- Basic usage --}}
173
+ <x-atoms.button variant="primary">
174
+ Save
175
+ </x-atoms.button>
176
+
177
+ {{-- With attributes --}}
178
+ <x-atoms.button
179
+ variant="secondary"
180
+ size="lg"
181
+ wire:click="submit"
182
+ class="mt-4"
183
+ >
184
+ Submit Form
185
+ </x-atoms.button>
186
+
187
+ {{-- Molecule using atoms --}}
188
+ <x-molecules.search-bar
189
+ placeholder="Search..."
190
+ action="/search"
191
+ />
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Styling Approach
197
+
198
+ Blade projects typically use **Tailwind CSS** for styling. Map design tokens via `tailwind.config.js`:
199
+
200
+ ```js
201
+ // tailwind.config.js
202
+ module.exports = {
203
+ theme: {
204
+ extend: {
205
+ colors: {
206
+ primary: 'var(--color-primary)',
207
+ secondary: 'var(--color-secondary)',
208
+ },
209
+ spacing: {
210
+ xs: 'var(--spacing-xs)',
211
+ sm: 'var(--spacing-sm)',
212
+ md: 'var(--spacing-md)',
213
+ lg: 'var(--spacing-lg)',
214
+ xl: 'var(--spacing-xl)',
215
+ },
216
+ },
217
+ },
218
+ };
219
+ ```
220
+
221
+ Or use BEM with a separate SCSS file:
222
+
223
+ ```
224
+ resources/css/components/atoms/_button.scss
225
+ ```
226
+
227
+ Import in `app.css`:
228
+ ```css
229
+ @import 'components/atoms/button';
230
+ ```
231
+
232
+ ---
233
+
234
+ ## Artisan Helper
235
+
236
+ Create components quickly via artisan:
237
+
238
+ ```bash
239
+ php artisan make:component Atoms/Button
240
+ ```
241
+
242
+ This generates both the class and view. Adjust namespace and paths as needed.
243
+
244
+ ---
245
+
246
+ ## Infrastructure Detection
247
+
248
+ | Check | File to Scan | When Present |
249
+ |-------|-------------|-------------|
250
+ | Laravel | `artisan` file in root | ✅ Blade adapter |
251
+ | Blade views | `resources/views/` | ✅ Standard location |
252
+ | Alpine.js | `package.json` → `alpinejs` | Interactive components |
253
+ | Tailwind | `tailwind.config.*` | Utility-first styling |
254
+ | PHPUnit | `phpunit.xml` | Test framework |
@@ -0,0 +1,272 @@
1
+ # Stack Adapter: Next.js (App Router + TypeScript)
2
+
3
+ > Extends the React adapter with Next.js-specific patterns: Server/Client boundary, CSS Modules, and App Router conventions.
4
+ > **Base:** Read [stack-react.md](stack-react.md) first — this adapter adds Next.js-specific rules on top.
5
+
6
+ ---
7
+
8
+ ## Key Difference: Server vs Client Components
9
+
10
+ Next.js App Router components are **Server Components by default**. This affects how Atomic Design components are structured.
11
+
12
+ ### When to use `'use client'`
13
+
14
+ | Needs | Directive | Examples |
15
+ |-------|-----------|---------|
16
+ | onClick, onChange, onSubmit | `'use client'` | Button, Input, Toggle, SearchBar |
17
+ | useState, useEffect, useRef | `'use client'` | Modal, Accordion, Tabs |
18
+ | Browser APIs (window, localStorage) | `'use client'` | ThemeSwitcher, ScrollToTop |
19
+ | Static rendering only | **None** (Server) | Badge, Avatar, Icon, Card (display-only) |
20
+ | Data fetching (async component) | **None** (Server) | DataTable with `fetch()`, UserProfile |
21
+
22
+ ### Rule of Thumb
23
+
24
+ ```
25
+ Does this component handle user interaction or use React hooks?
26
+ ├── YES → 'use client' (first line of the .tsx file)
27
+ └── NO → Server Component (no directive needed)
28
+ ```
29
+
30
+ > 🔴 **Push `'use client'` as far DOWN the tree as possible.**
31
+ > A Header (Organism) can be a Server Component if only its SearchBar (Molecule) needs interactivity.
32
+
33
+ ---
34
+
35
+ ## Folder Structure
36
+
37
+ For a component named `Button` in the **atoms** category:
38
+
39
+ ```
40
+ src/components/atoms/Button/
41
+ ├── index.ts # Barrel export
42
+ ├── Button.tsx # Component ('use client' if interactive)
43
+ ├── Button.module.scss # CSS Modules (Next.js default)
44
+ ├── Button.types.ts # TypeScript interfaces
45
+ ├── Button.test.tsx # Tests (Vitest + RTL)
46
+ └── Button.stories.tsx # Storybook story (optional)
47
+ ```
48
+
49
+ **Category paths:**
50
+ - `src/components/atoms/` — Button, Input, Icon, Badge
51
+ - `src/components/molecules/` — SearchBar, FormField, NavItem
52
+ - `src/components/organisms/` — Header, Modal, DataTable
53
+
54
+ **Path alias:** Always use `@/components/...` (configured in `tsconfig.json`).
55
+
56
+ ---
57
+
58
+ ## Required Files
59
+
60
+ ### 1. Types — `Button.types.ts` (ALWAYS FIRST)
61
+
62
+ Same as React adapter. No Next.js-specific changes.
63
+
64
+ ```tsx
65
+ export interface ButtonProps {
66
+ readonly children: React.ReactNode;
67
+ readonly variant?: 'primary' | 'secondary' | 'ghost';
68
+ readonly size?: 'sm' | 'md' | 'lg';
69
+ readonly disabled?: boolean;
70
+ readonly onClick?: () => void;
71
+ }
72
+ ```
73
+
74
+ ### 2. Component — `Button.tsx` (with `'use client'`)
75
+
76
+ ```tsx
77
+ 'use client';
78
+
79
+ import type { ButtonProps } from './Button.types';
80
+ import styles from './Button.module.scss';
81
+ import clsx from 'clsx';
82
+
83
+ export default function Button({
84
+ children,
85
+ variant = 'primary',
86
+ size = 'md',
87
+ disabled = false,
88
+ onClick,
89
+ }: ButtonProps) {
90
+ return (
91
+ <button
92
+ className={clsx(
93
+ styles.button,
94
+ styles[`button--${variant}`],
95
+ styles[`button--${size}`],
96
+ )}
97
+ disabled={disabled}
98
+ onClick={onClick}
99
+ >
100
+ {children}
101
+ </button>
102
+ );
103
+ }
104
+ ```
105
+
106
+ **Next.js-specific rules:**
107
+ - `'use client'` as first line if component uses interactivity/hooks
108
+ - **Named function export** (preferred in Next.js over `const + React.FC`)
109
+ - Default export for the component
110
+ - CSS Modules import with `clsx` for class composition
111
+
112
+ ### 3. Styles — `Button.module.scss` (CSS Modules)
113
+
114
+ ```scss
115
+ .button {
116
+ padding: var(--spacing-sm) var(--spacing-md);
117
+ font-size: var(--font-size-md);
118
+ font-weight: var(--font-weight-medium);
119
+ border: 1px solid transparent;
120
+ border-radius: var(--radius-md);
121
+ cursor: pointer;
122
+ transition: background-color 0.2s ease, opacity 0.2s ease;
123
+ }
124
+
125
+ .button--primary {
126
+ background-color: var(--color-primary);
127
+ color: var(--color-background);
128
+ }
129
+
130
+ .button--secondary {
131
+ background-color: transparent;
132
+ color: var(--color-primary);
133
+ border-color: var(--color-primary);
134
+ }
135
+
136
+ .button--ghost {
137
+ background-color: transparent;
138
+ color: var(--color-text);
139
+ }
140
+
141
+ .button--sm { padding: var(--spacing-xs) var(--spacing-sm); font-size: var(--font-size-sm); }
142
+ .button--lg { padding: var(--spacing-md) var(--spacing-lg); font-size: var(--font-size-lg); }
143
+
144
+ .button:hover:not(:disabled) { opacity: 0.85; }
145
+
146
+ .button:disabled {
147
+ opacity: 0.5;
148
+ cursor: not-allowed;
149
+ }
150
+ ```
151
+
152
+ **CSS Modules rules:**
153
+ - File extension: `.module.scss` (NOT `.styles.scss`)
154
+ - Import as: `import styles from './Button.module.scss'`
155
+ - Classes accessed via `styles.button`, `styles['button--primary']`
156
+ - BEM modifiers use bracket notation: `styles['button--variant']`
157
+ - Design tokens via CSS variables still work (they're global)
158
+
159
+ > **Note:** BEM nesting (`&--modifier`) does NOT work with CSS Modules because class names are hashed. Use flat selectors instead.
160
+
161
+ ### 4. Tests — `Button.test.tsx`
162
+
163
+ Same as React adapter (Vitest + React Testing Library). No changes.
164
+
165
+ ### 5. Barrel Export — `index.ts`
166
+
167
+ ```ts
168
+ export { default } from './Button';
169
+ export type { ButtonProps } from './Button.types';
170
+ ```
171
+
172
+ ---
173
+
174
+ ## Server Component Example (no `'use client'`)
175
+
176
+ For a **display-only** component like a Badge:
177
+
178
+ ```tsx
179
+ // No 'use client' — this is a Server Component
180
+ import type { BadgeProps } from './Badge.types';
181
+ import styles from './Badge.module.scss';
182
+ import clsx from 'clsx';
183
+
184
+ export default function Badge({ children, variant = 'default' }: BadgeProps) {
185
+ return (
186
+ <span className={clsx(styles.badge, styles[`badge--${variant}`])}>
187
+ {children}
188
+ </span>
189
+ );
190
+ }
191
+ ```
192
+
193
+ Server Components **cannot:**
194
+ - Use `onClick`, `onChange`, or any event handlers
195
+ - Use `useState`, `useEffect`, `useRef`, or any hooks
196
+ - Use browser APIs (`window`, `document`, `localStorage`)
197
+
198
+ Server Components **can:**
199
+ - Be `async` and fetch data directly
200
+ - Import and render other Server Components
201
+ - Import and render Client Components
202
+
203
+ ---
204
+
205
+ ## Composition with shadcn/ui
206
+
207
+ shadcn components in Next.js already include `'use client'` where needed:
208
+
209
+ ```tsx
210
+ 'use client';
211
+
212
+ import { Button as ShadcnButton } from '@/components/ui/button';
213
+ import type { ButtonProps } from './Button.types';
214
+ import styles from './Button.module.scss';
215
+ import clsx from 'clsx';
216
+
217
+ export default function Button({ children, variant, ...props }: ButtonProps) {
218
+ return (
219
+ <ShadcnButton className={clsx(styles.button, styles[`button--${variant}`])} {...props}>
220
+ {children}
221
+ </ShadcnButton>
222
+ );
223
+ }
224
+ ```
225
+
226
+ ---
227
+
228
+ ## Storybook Caveat
229
+
230
+ > ⚠️ **Server Components do NOT render in Storybook.** Only create stories for Client Components.
231
+
232
+ For Server Components, test rendering via Vitest with RSC support or integration tests.
233
+
234
+ ---
235
+
236
+ ## Token File Location
237
+
238
+ In Next.js, the global CSS file is typically:
239
+
240
+ ```
241
+ src/app/globals.css (App Router)
242
+ src/styles/globals.css (alternative)
243
+ ```
244
+
245
+ Add design tokens as `:root` variables in `globals.css`. They will be available to all CSS Modules via `var(--token-name)`.
246
+
247
+ ---
248
+
249
+ ## Infrastructure Detection
250
+
251
+ | Check | File to Scan | Install Command |
252
+ |-------|-------------|----------------|
253
+ | Next.js | `next.config.*` | — |
254
+ | TypeScript | `tsconfig.json` | Built-in with Next.js |
255
+ | SCSS | `package.json` → `sass` | `npm install -D sass` |
256
+ | clsx | `package.json` → `clsx` | `npm install clsx` |
257
+ | Vitest | `vitest.config.*` | `npm install -D vitest @testing-library/react @testing-library/jest-dom @vitejs/plugin-react` |
258
+ | Storybook | `.storybook/` dir | `npx storybook@latest init` |
259
+ | shadcn | `components.json` | `npx shadcn@latest init` |
260
+
261
+ ---
262
+
263
+ ## Quick Reference: React vs Next.js Adapter
264
+
265
+ | Aspect | React (`stack-react.md`) | Next.js (this file) |
266
+ |--------|------------------------|---------------------|
267
+ | Styles | `.styles.scss` (direct import) | `.module.scss` (CSS Modules) |
268
+ | BEM nesting | `&--modifier` in SCSS | Flat selectors (no nesting) |
269
+ | Class composition | String concatenation | `clsx()` utility |
270
+ | Component style | `React.FC<Props>` | Named function export |
271
+ | Server Components | N/A | Default, push `'use client'` down |
272
+ | Path alias | Optional | `@/components/...` (standard) |