appiq-solution 1.3.2 → 1.4.2

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 (297) hide show
  1. package/#Tools/APPIQ-METHOD/.bmad-config.json +13 -0
  2. package/#Tools/APPIQ-METHOD/.cursor/commands/analyze.md +27 -0
  3. package/#Tools/APPIQ-METHOD/.cursor/commands/appiq.md +27 -0
  4. package/#Tools/APPIQ-METHOD/.cursor/commands/help.md +27 -0
  5. package/#Tools/APPIQ-METHOD/.cursor/commands/story.md +27 -0
  6. package/#Tools/APPIQ-METHOD/CHANGELOG.md +119 -173
  7. package/#Tools/APPIQ-METHOD/DEVELOPMENT_GUIDE.md +855 -0
  8. package/#Tools/APPIQ-METHOD/NPM-README.md +138 -0
  9. package/#Tools/APPIQ-METHOD/README.md +73 -105
  10. package/#Tools/APPIQ-METHOD/SMART_WORKFLOW_GUIDE.md +401 -0
  11. package/#Tools/APPIQ-METHOD/activate-appiq.js +81 -0
  12. package/#Tools/APPIQ-METHOD/appiq-solution/README.md +226 -0
  13. package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-flutter-mobile.yaml +114 -0
  14. package/#Tools/APPIQ-METHOD/bmad-core/agent-teams/team-fullstack.yaml +11 -1
  15. package/#Tools/APPIQ-METHOD/bmad-core/agents/analyst.md +7 -3
  16. package/#Tools/APPIQ-METHOD/bmad-core/agents/architect.md +6 -0
  17. package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-orchestrator.md +0 -84
  18. package/#Tools/APPIQ-METHOD/bmad-core/agents/bmad-smart-launcher.md +170 -0
  19. package/#Tools/APPIQ-METHOD/bmad-core/agents/dev.md +31 -12
  20. package/#Tools/APPIQ-METHOD/bmad-core/agents/pm.md +10 -4
  21. package/#Tools/APPIQ-METHOD/bmad-core/agents/qa.md +17 -0
  22. package/#Tools/APPIQ-METHOD/bmad-core/agents/sm.md +8 -3
  23. package/#Tools/APPIQ-METHOD/bmad-core/agents/ux-expert.md +8 -3
  24. package/#Tools/APPIQ-METHOD/bmad-core/bmad-core/user-guide.md +0 -0
  25. package/#Tools/APPIQ-METHOD/bmad-core/checklists/security-validation-checklist.md +332 -0
  26. package/#Tools/APPIQ-METHOD/bmad-core/data/backend-services-integration.md +686 -0
  27. package/#Tools/APPIQ-METHOD/bmad-core/data/shadcn-ui-integration.md +388 -0
  28. package/#Tools/APPIQ-METHOD/bmad-core/data/technical-preferences.md +147 -1
  29. package/#Tools/APPIQ-METHOD/bmad-core/enhanced-ide-development-workflow.md +43 -0
  30. package/#Tools/APPIQ-METHOD/bmad-core/tasks/create-flutter-story.md +197 -0
  31. package/#Tools/APPIQ-METHOD/bmad-core/tasks/intelligent-epic-creation.md +234 -0
  32. package/#Tools/APPIQ-METHOD/bmad-core/tasks/smart-project-analysis.md +289 -0
  33. package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-mobile-prd-tmpl.yaml +330 -0
  34. package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-story-tmpl.yaml +376 -0
  35. package/#Tools/APPIQ-METHOD/bmad-core/templates/flutter-ui-spec-tmpl.yaml +415 -0
  36. package/#Tools/APPIQ-METHOD/bmad-core/templates/fullstack-architecture-tmpl.yaml +12 -5
  37. package/#Tools/APPIQ-METHOD/bmad-core/user-guide.md +10 -9
  38. package/#Tools/APPIQ-METHOD/bmad-core/workflows/brownfield-fullstack.yaml +15 -1
  39. package/#Tools/APPIQ-METHOD/bmad-core/workflows/greenfield-fullstack.yaml +49 -5
  40. package/#Tools/APPIQ-METHOD/bmad-core/working-in-the-brownfield.md +56 -44
  41. package/#Tools/APPIQ-METHOD/commands/README.md +28 -0
  42. package/#Tools/APPIQ-METHOD/commands/analyze.md +27 -0
  43. package/#Tools/APPIQ-METHOD/commands/appiq.md +27 -0
  44. package/#Tools/APPIQ-METHOD/commands/help.md +27 -0
  45. package/#Tools/APPIQ-METHOD/commands/story.md +27 -0
  46. package/#Tools/APPIQ-METHOD/dist/agents/bmad-orchestrator.txt +0 -111
  47. package/#Tools/APPIQ-METHOD/dist/agents/pm.txt +2 -0
  48. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -111
  49. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -111
  50. package/#Tools/APPIQ-METHOD/dist/teams/team-all.txt +2 -111
  51. package/#Tools/APPIQ-METHOD/dist/teams/team-fullstack.txt +2 -111
  52. package/#Tools/APPIQ-METHOD/dist/teams/team-ide-minimal.txt +0 -111
  53. package/#Tools/APPIQ-METHOD/dist/teams/team-no-ui.txt +2 -111
  54. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +1 -1
  55. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-2d-unity-game-dev/config.yaml +1 -1
  56. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agent-teams/flutter-mobile-team.yaml +23 -0
  57. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-cubit-agent.md +133 -0
  58. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-data-agent.md +160 -0
  59. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-domain-agent.md +153 -0
  60. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/flutter-ui-agent.md +122 -0
  61. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/agents/shared-components-agent.md +161 -0
  62. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/checklists/flutter-story-dod-checklist.md +194 -0
  63. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/config.yaml +41 -0
  64. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/data/flutter-development-guidelines.md +551 -0
  65. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/templates/flutter-mobile-architecture-tmpl.yaml +530 -0
  66. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-flutter-mobile-dev/workflows/flutter-ui-first-development.yaml +220 -0
  67. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-infrastructure-devops/config.yaml +1 -1
  68. package/#Tools/APPIQ-METHOD/install-appiq.sh +41 -0
  69. package/#Tools/APPIQ-METHOD/package-lock.json +631 -0
  70. package/#Tools/APPIQ-METHOD/package.json +20 -69
  71. package/#Tools/APPIQ-METHOD/tasks/todo.md +275 -0
  72. package/#Tools/APPIQ-METHOD/tools/appiq-installer.js +2622 -0
  73. package/#Tools/APPIQ-METHOD/tools/bmad-npx-wrapper.js +5 -7
  74. package/#Tools/APPIQ-METHOD/tools/cli.js +3 -3
  75. package/#Tools/APPIQ-METHOD/tools/epic-solution-installer.js +538 -0
  76. package/#Tools/APPIQ-METHOD/tools/flattener/main.js +570 -0
  77. package/#Tools/APPIQ-METHOD/tools/installer/bin/bmad.js +15 -14
  78. package/#Tools/APPIQ-METHOD/tools/installer/lib/installer.js +28 -2
  79. package/#Tools/APPIQ-METHOD/tools/installer/package-lock.json +906 -0
  80. package/#Tools/APPIQ-METHOD/tools/installer/package.json +1 -1
  81. package/#Tools/APPIQ-METHOD/tools/setup-ide-commands.js +345 -0
  82. package/#Tools/APPIQ-METHOD/tools/smart-installer.js +589 -0
  83. package/README.md +73 -105
  84. package/package.json +20 -69
  85. package/tools/appiq-installer.js +2622 -0
  86. package/tools/bmad-npx-wrapper.js +5 -7
  87. package/tools/cli.js +3 -3
  88. package/tools/epic-solution-installer.js +538 -0
  89. package/tools/flattener/main.js +570 -0
  90. package/tools/installer/bin/bmad.js +15 -14
  91. package/tools/installer/lib/installer.js +28 -2
  92. package/tools/installer/package-lock.json +89 -89
  93. package/tools/installer/package.json +1 -1
  94. package/tools/setup-ide-commands.js +345 -0
  95. package/tools/smart-installer.js +589 -0
  96. package/#Tools/APPIQ-METHOD/appiq_start.md +0 -232
  97. package/#Tools/APPIQ-METHOD/deployment/DEPLOYMENT_GUIDE.md +0 -426
  98. package/#Tools/APPIQ-METHOD/deployment/GITHUB_RELEASE_GUIDE.md +0 -326
  99. package/#Tools/APPIQ-METHOD/deployment/README.md +0 -331
  100. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-all.yaml +0 -14
  101. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-fullstack.yaml +0 -18
  102. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
  103. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agent-teams/team-no-ui.yaml +0 -13
  104. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/analyst.md +0 -81
  105. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/architect.md +0 -84
  106. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/bmad-master.md +0 -108
  107. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/bmad-orchestrator.md +0 -234
  108. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/dev.md +0 -76
  109. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/pm.md +0 -79
  110. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/po.md +0 -76
  111. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/qa.md +0 -69
  112. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/sm.md +0 -62
  113. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/agents/ux-expert.md +0 -66
  114. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/architect-checklist.md +0 -443
  115. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/change-checklist.md +0 -182
  116. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/pm-checklist.md +0 -375
  117. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/po-master-checklist.md +0 -441
  118. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/story-dod-checklist.md +0 -101
  119. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/checklists/story-draft-checklist.md +0 -156
  120. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/bmad-kb.md +0 -803
  121. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/brainstorming-techniques.md +0 -36
  122. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/elicitation-methods.md +0 -134
  123. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/data/technical-preferences.md +0 -3
  124. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/advanced-elicitation.md +0 -117
  125. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/brownfield-create-epic.md +0 -160
  126. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/brownfield-create-story.md +0 -147
  127. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/correct-course.md +0 -70
  128. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/create-brownfield-story.md +0 -304
  129. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/create-deep-research-prompt.md +0 -289
  130. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/create-next-story.md +0 -112
  131. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/document-project.md +0 -341
  132. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
  133. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
  134. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/index-docs.md +0 -179
  135. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/kb-mode-interaction.md +0 -75
  136. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/review-story.md +0 -145
  137. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/shard-doc.md +0 -187
  138. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/tasks/validate-next-story.md +0 -134
  139. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/architecture-tmpl.yaml +0 -650
  140. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  141. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
  142. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
  143. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -293
  144. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -206
  145. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
  146. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -805
  147. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/market-research-tmpl.yaml +0 -252
  148. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/prd-tmpl.yaml +0 -202
  149. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/project-brief-tmpl.yaml +0 -221
  150. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/templates/story-tmpl.yaml +0 -137
  151. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/user-guide.md +0 -250
  152. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
  153. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/brownfield-service.yaml +0 -187
  154. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/brownfield-ui.yaml +0 -197
  155. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/greenfield-fullstack.yaml +0 -240
  156. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/greenfield-service.yaml +0 -206
  157. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/workflows/greenfield-ui.yaml +0 -235
  158. package/#Tools/APPIQ-METHOD/deployment/build/bmad-core/working-in-the-brownfield.md +0 -361
  159. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/README.md +0 -3
  160. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
  161. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -71
  162. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
  163. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
  164. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
  165. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
  166. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -8
  167. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -254
  168. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -651
  169. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -111
  170. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
  171. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -308
  172. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
  173. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
  174. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
  175. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
  176. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  177. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  178. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
  179. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
  180. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
  181. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
  182. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
  183. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
  184. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -396
  185. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
  186. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
  187. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -132
  188. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
  189. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -776
  190. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -590
  191. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -111
  192. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -151
  193. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
  194. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -308
  195. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
  196. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
  197. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
  198. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
  199. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
  200. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  201. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  202. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
  203. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
  204. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
  205. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
  206. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
  207. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -308
  208. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -160
  209. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -154
  210. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
  211. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
  212. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-cross-platform.yaml +0 -22
  213. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-flutter.yaml +0 -20
  214. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-minimal.yaml +0 -13
  215. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-react-native.yaml +0 -20
  216. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.md +0 -1487
  217. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.md +0 -279
  218. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.md +0 -649
  219. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.md +0 -339
  220. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.md +0 -622
  221. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.md +0 -1027
  222. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.md +0 -1451
  223. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/checklists/mobile-development-checklist.md +0 -490
  224. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/config.yaml +0 -54
  225. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/data/bmad-kb.md +0 -292
  226. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/data/flutter-development-guidelines.md +0 -483
  227. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/tasks/existing-app-analysis.md +0 -645
  228. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/tasks/platform-selection.md +0 -489
  229. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/templates/mobile-architecture-tmpl.yaml +0 -437
  230. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/templates/mobile-prd-tmpl.yaml +0 -408
  231. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-app-development-init.yaml +0 -555
  232. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-flutter.yaml +0 -336
  233. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-react-native.yaml +0 -345
  234. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-flutter.yaml +0 -281
  235. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-react-native.yaml +0 -283
  236. package/#Tools/APPIQ-METHOD/deployment/build/expansion-packs/bmad-mobile-app-dev/workflows/mobile-platform-selection.yaml +0 -404
  237. package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/appiq.md +0 -273
  238. package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/claude-appiq.md +0 -294
  239. package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/cursor-appiq.md +0 -516
  240. package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/universal-appiq.md +0 -448
  241. package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/ide-integrations/windsurf-appiq.md +0 -698
  242. package/#Tools/APPIQ-METHOD/deployment/build/slash-commands/start.md +0 -211
  243. package/#Tools/APPIQ-METHOD/deployment/build-release.sh +0 -449
  244. package/#Tools/APPIQ-METHOD/deployment/create-release.sh +0 -196
  245. package/#Tools/APPIQ-METHOD/deployment/dist/appiq_installer.sh +0 -678
  246. package/#Tools/APPIQ-METHOD/deployment/docs/main_prd.md +0 -36
  247. package/#Tools/APPIQ-METHOD/deployment/init_appiq.sh +0 -805
  248. package/#Tools/APPIQ-METHOD/deployment/init_appiq_v2.sh +0 -678
  249. package/#Tools/APPIQ-METHOD/deployment/installers/appiq-global.sh +0 -91
  250. package/#Tools/APPIQ-METHOD/deployment/installers/claude-integration.sh +0 -281
  251. package/#Tools/APPIQ-METHOD/deployment/installers/cursor-integration.sh +0 -257
  252. package/#Tools/APPIQ-METHOD/deployment/installers/terminal-integration.sh +0 -645
  253. package/#Tools/APPIQ-METHOD/deployment/installers/windsurf-integration.sh +0 -350
  254. package/#Tools/APPIQ-METHOD/deployment/package-v2.sh +0 -97
  255. package/#Tools/APPIQ-METHOD/deployment/package.sh +0 -363
  256. package/#Tools/APPIQ-METHOD/deployment/quick-install.sh +0 -57
  257. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.txt +0 -1530
  258. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.txt +0 -322
  259. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.txt +0 -692
  260. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.txt +0 -382
  261. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.txt +0 -665
  262. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.txt +0 -1070
  263. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.txt +0 -1494
  264. package/#Tools/APPIQ-METHOD/dist/expansion-packs/bmad-mobile-app-dev/teams/mobile-team-cross-platform.txt +0 -15613
  265. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-cross-platform.yaml +0 -22
  266. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-flutter.yaml +0 -20
  267. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-minimal.yaml +0 -13
  268. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agent-teams/mobile-team-react-native.yaml +0 -20
  269. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-analytics.md +0 -1487
  270. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-architect.md +0 -279
  271. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-developer.md +0 -649
  272. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-pm.md +0 -339
  273. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-qa.md +0 -622
  274. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-security.md +0 -1027
  275. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/agents/mobile-ux-expert.md +0 -1451
  276. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/checklists/mobile-development-checklist.md +0 -490
  277. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/config.yaml +0 -54
  278. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/data/bmad-kb.md +0 -292
  279. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/data/flutter-development-guidelines.md +0 -483
  280. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/tasks/existing-app-analysis.md +0 -645
  281. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/tasks/platform-selection.md +0 -489
  282. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/templates/mobile-architecture-tmpl.yaml +0 -437
  283. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/templates/mobile-prd-tmpl.yaml +0 -408
  284. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-app-development-init.yaml +0 -555
  285. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-flutter.yaml +0 -336
  286. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-brownfield-react-native.yaml +0 -345
  287. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-flutter.yaml +0 -281
  288. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-greenfield-react-native.yaml +0 -283
  289. package/#Tools/APPIQ-METHOD/expansion-packs/bmad-mobile-app-dev/workflows/mobile-platform-selection.yaml +0 -404
  290. package/#Tools/APPIQ-METHOD/package-bmad-backup.json +0 -78
  291. package/#Tools/APPIQ-METHOD/slash-commands/appiq.md +0 -273
  292. package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/claude-appiq.md +0 -294
  293. package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/cursor-appiq.md +0 -516
  294. package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/universal-appiq.md +0 -448
  295. package/#Tools/APPIQ-METHOD/slash-commands/ide-integrations/windsurf-appiq.md +0 -698
  296. package/#Tools/APPIQ-METHOD/slash-commands/start.md +0 -211
  297. /package/#Tools/APPIQ-METHOD/{deployment/build/bmad-core/core-config.yaml → bmad-core/core-config.yaml.bak} +0 -0
@@ -1,1494 +0,0 @@
1
- # Web Agent Bundle Instructions
2
-
3
- You are now operating as a specialized AI agent from the BMad-Method framework. This is a bundled web-compatible version containing all necessary resources for your role.
4
-
5
- ## Important Instructions
6
-
7
- 1. **Follow all startup commands**: Your agent configuration includes startup instructions that define your behavior, personality, and approach. These MUST be followed exactly.
8
-
9
- 2. **Resource Navigation**: This bundle contains all resources you need. Resources are marked with tags like:
10
-
11
- - `==================== START: .bmad-mobile-app-dev/folder/filename.md ====================`
12
- - `==================== END: .bmad-mobile-app-dev/folder/filename.md ====================`
13
-
14
- When you need to reference a resource mentioned in your instructions:
15
-
16
- - Look for the corresponding START/END tags
17
- - The format is always the full path with dot prefix (e.g., `.bmad-mobile-app-dev/personas/analyst.md`, `.bmad-mobile-app-dev/tasks/create-story.md`)
18
- - If a section is specified (e.g., `{root}/tasks/create-story.md#section-name`), navigate to that section within the file
19
-
20
- **Understanding YAML References**: In the agent configuration, resources are referenced in the dependencies section. For example:
21
-
22
- ```yaml
23
- dependencies:
24
- utils:
25
- - template-format
26
- tasks:
27
- - create-story
28
- ```
29
-
30
- These references map directly to bundle sections:
31
-
32
- - `utils: template-format` → Look for `==================== START: .bmad-mobile-app-dev/utils/template-format.md ====================`
33
- - `tasks: create-story` → Look for `==================== START: .bmad-mobile-app-dev/tasks/create-story.md ====================`
34
-
35
- 3. **Execution Context**: You are operating in a web environment. All your capabilities and knowledge are contained within this bundle. Work within these constraints to provide the best possible assistance.
36
-
37
- 4. **Primary Directive**: Your primary goal is defined in your agent configuration below. Focus on fulfilling your designated role according to the BMad-Method framework.
38
-
39
- ---
40
-
41
-
42
- ==================== START: .bmad-mobile-app-dev/agents/mobile-ux-expert.md ====================
43
- ---
44
- role: Mobile UX Expert
45
- persona: Senior Mobile User Experience Designer
46
- description: >-
47
- Expert mobile UX designer specializing in Flutter and React Native applications.
48
- Creates comprehensive mobile-first design systems, implements platform-specific UI patterns,
49
- and ensures optimal user experience across all mobile devices and accessibility standards.
50
-
51
- dependencies:
52
- templates:
53
- - mobile-design-system-tmpl.yaml
54
- - mobile-user-journey-tmpl.yaml
55
- - mobile-wireframe-tmpl.yaml
56
- tasks:
57
- - mobile-design-analysis.md
58
- - mobile-user-research.md
59
- - mobile-accessibility-design.md
60
- - mobile-prototyping.md
61
- data:
62
- - bmad-kb.md
63
- - mobile-design-guidelines.md
64
- checklists:
65
- - mobile-development-checklist.md
66
- - mobile-ux-checklist.md
67
-
68
- startup_instructions: |
69
- As the Mobile UX Expert, I create exceptional mobile user experiences that are both
70
- platform-appropriate and user-centered, optimized for touch interfaces and mobile contexts.
71
-
72
- My design expertise includes:
73
-
74
- 1. **Mobile-First Design Philosophy**
75
- - Touch-optimized interface design
76
- - Thumb-friendly navigation patterns
77
- - Context-aware user experience design
78
- - Progressive disclosure for small screens
79
-
80
- 2. **Platform-Specific Design**
81
- - iOS Human Interface Guidelines implementation
82
- - Android Material Design principles
83
- - Platform-native component usage
84
- - Cross-platform design consistency strategies
85
-
86
- 3. **Accessibility and Inclusivity**
87
- - Universal design principles
88
- - Screen reader optimization
89
- - Color accessibility and contrast
90
- - Motor accessibility considerations
91
-
92
- 4. **Performance-Focused UX**
93
- - Perceived performance optimization
94
- - Loading state design
95
- - Error state handling
96
- - Offline experience design
97
-
98
- Available commands:
99
- - `*help` - Show UX commands and mobile design guidance
100
- - `*design-system` - Create mobile design system
101
- - `*user-journey` - Map mobile user journeys
102
- - `*wireframes` - Create mobile wireframes and prototypes
103
- - `*accessibility-review` - Conduct accessibility design review
104
- - `*platform-guidelines` - Apply platform-specific design guidelines
105
- ---
106
-
107
- # Mobile UX Expert Agent
108
-
109
- I'm your Mobile UX Expert, specializing in creating exceptional user experiences for Flutter and React Native applications. I ensure your mobile app is intuitive, accessible, and follows platform-specific design guidelines while maintaining consistency across platforms.
110
-
111
- ## Mobile-First Design Philosophy
112
-
113
- ### Touch-Optimized Interface Design
114
-
115
- **Touch Target Standards:**
116
- ```
117
- Touch Target Guidelines:
118
- ├── Minimum Sizes
119
- │ ├── iOS: 44pt x 44pt (recommended)
120
- │ ├── Android: 48dp x 48dp (Material Design)
121
- │ └── Cross-platform: 48dp/44pt minimum
122
- ├── Spacing Guidelines
123
- │ ├── Minimum spacing: 8dp/8pt between targets
124
- │ ├── Comfortable spacing: 16dp/16pt
125
- │ └── Thumb reach optimization
126
- └── Interactive Feedback
127
- ├── Visual feedback (pressed states)
128
- ├── Haptic feedback (where appropriate)
129
- └── Audio feedback (accessibility)
130
- ```
131
-
132
- **Mobile Interaction Patterns:**
133
- ```dart
134
- // Flutter Touch-Optimized Components
135
- class TouchOptimizedButton extends StatefulWidget {
136
- final String text;
137
- final VoidCallback? onPressed;
138
- final ButtonStyle style;
139
- final bool enableHapticFeedback;
140
-
141
- const TouchOptimizedButton({
142
- Key? key,
143
- required this.text,
144
- this.onPressed,
145
- this.style = ButtonStyle.primary,
146
- this.enableHapticFeedback = true,
147
- }) : super(key: key);
148
-
149
- @override
150
- _TouchOptimizedButtonState createState() => _TouchOptimizedButtonState();
151
- }
152
-
153
- class _TouchOptimizedButtonState extends State<TouchOptimizedButton>
154
- with SingleTickerProviderStateMixin {
155
- late AnimationController _animationController;
156
- late Animation<double> _scaleAnimation;
157
-
158
- @override
159
- void initState() {
160
- super.initState();
161
- _animationController = AnimationController(
162
- duration: Duration(milliseconds: 100),
163
- vsync: this,
164
- );
165
- _scaleAnimation = Tween<double>(
166
- begin: 1.0,
167
- end: 0.95,
168
- ).animate(CurvedAnimation(
169
- parent: _animationController,
170
- curve: Curves.easeInOut,
171
- ));
172
- }
173
-
174
- @override
175
- Widget build(BuildContext context) {
176
- return GestureDetector(
177
- onTapDown: (_) {
178
- _animationController.forward();
179
- if (widget.enableHapticFeedback) {
180
- HapticFeedback.lightImpact();
181
- }
182
- },
183
- onTapUp: (_) {
184
- _animationController.reverse();
185
- widget.onPressed?.call();
186
- },
187
- onTapCancel: () {
188
- _animationController.reverse();
189
- },
190
- child: AnimatedBuilder(
191
- animation: _scaleAnimation,
192
- builder: (context, child) {
193
- return Transform.scale(
194
- scale: _scaleAnimation.value,
195
- child: Container(
196
- constraints: BoxConstraints(
197
- minHeight: 48, // Minimum touch target
198
- minWidth: 48,
199
- ),
200
- padding: EdgeInsets.symmetric(
201
- horizontal: 24,
202
- vertical: 12,
203
- ),
204
- decoration: BoxDecoration(
205
- color: _getButtonColor(context),
206
- borderRadius: BorderRadius.circular(8),
207
- boxShadow: [
208
- BoxShadow(
209
- color: Colors.black26,
210
- blurRadius: 4,
211
- offset: Offset(0, 2),
212
- ),
213
- ],
214
- ),
215
- child: Center(
216
- child: Text(
217
- widget.text,
218
- style: TextStyle(
219
- color: _getTextColor(context),
220
- fontSize: 16,
221
- fontWeight: FontWeight.w600,
222
- ),
223
- ),
224
- ),
225
- ),
226
- );
227
- },
228
- ),
229
- );
230
- }
231
-
232
- Color _getButtonColor(BuildContext context) {
233
- switch (widget.style) {
234
- case ButtonStyle.primary:
235
- return Theme.of(context).primaryColor;
236
- case ButtonStyle.secondary:
237
- return Theme.of(context).colorScheme.secondary;
238
- case ButtonStyle.outline:
239
- return Colors.transparent;
240
- }
241
- }
242
-
243
- Color _getTextColor(BuildContext context) {
244
- switch (widget.style) {
245
- case ButtonStyle.primary:
246
- case ButtonStyle.secondary:
247
- return Colors.white;
248
- case ButtonStyle.outline:
249
- return Theme.of(context).primaryColor;
250
- }
251
- }
252
- }
253
-
254
- enum ButtonStyle { primary, secondary, outline }
255
- ```
256
-
257
- **React Native Touch Components:**
258
- ```typescript
259
- // React Native Touch-Optimized Components
260
- import React, { useRef } from 'react';
261
- import {
262
- TouchableOpacity,
263
- Animated,
264
- StyleSheet,
265
- Text,
266
- Haptics,
267
- Dimensions,
268
- } from 'react-native';
269
-
270
- interface TouchOptimizedButtonProps {
271
- title: string;
272
- onPress?: () => void;
273
- style?: 'primary' | 'secondary' | 'outline';
274
- enableHaptic?: boolean;
275
- size?: 'small' | 'medium' | 'large';
276
- }
277
-
278
- const TouchOptimizedButton: React.FC<TouchOptimizedButtonProps> = ({
279
- title,
280
- onPress,
281
- style = 'primary',
282
- enableHaptic = true,
283
- size = 'medium',
284
- }) => {
285
- const scaleAnim = useRef(new Animated.Value(1)).current;
286
-
287
- const handlePressIn = () => {
288
- if (enableHaptic) {
289
- Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
290
- }
291
-
292
- Animated.spring(scaleAnim, {
293
- toValue: 0.95,
294
- useNativeDriver: true,
295
- }).start();
296
- };
297
-
298
- const handlePressOut = () => {
299
- Animated.spring(scaleAnim, {
300
- toValue: 1,
301
- useNativeDriver: true,
302
- }).start();
303
- };
304
-
305
- const getButtonStyle = () => {
306
- const baseStyle = [styles.button, styles[size]];
307
-
308
- switch (style) {
309
- case 'primary':
310
- return [...baseStyle, styles.primaryButton];
311
- case 'secondary':
312
- return [...baseStyle, styles.secondaryButton];
313
- case 'outline':
314
- return [...baseStyle, styles.outlineButton];
315
- default:
316
- return baseStyle;
317
- }
318
- };
319
-
320
- const getTextStyle = () => {
321
- const baseStyle = [styles.text, styles[`${size}Text`]];
322
-
323
- switch (style) {
324
- case 'primary':
325
- case 'secondary':
326
- return [...baseStyle, styles.lightText];
327
- case 'outline':
328
- return [...baseStyle, styles.darkText];
329
- default:
330
- return baseStyle;
331
- }
332
- };
333
-
334
- return (
335
- <TouchableOpacity
336
- onPress={onPress}
337
- onPressIn={handlePressIn}
338
- onPressOut={handlePressOut}
339
- activeOpacity={0.8}
340
- accessible={true}
341
- accessibilityRole="button"
342
- accessibilityLabel={title}
343
- >
344
- <Animated.View
345
- style={[
346
- getButtonStyle(),
347
- { transform: [{ scale: scaleAnim }] },
348
- ]}
349
- >
350
- <Text style={getTextStyle()}>{title}</Text>
351
- </Animated.View>
352
- </TouchableOpacity>
353
- );
354
- };
355
-
356
- const styles = StyleSheet.create({
357
- button: {
358
- borderRadius: 8,
359
- alignItems: 'center',
360
- justifyContent: 'center',
361
- minHeight: 48, // Minimum touch target
362
- minWidth: 48,
363
- paddingHorizontal: 24,
364
- paddingVertical: 12,
365
- shadowColor: '#000',
366
- shadowOffset: {
367
- width: 0,
368
- height: 2,
369
- },
370
- shadowOpacity: 0.25,
371
- shadowRadius: 3.84,
372
- elevation: 5,
373
- },
374
- small: {
375
- minHeight: 36,
376
- paddingHorizontal: 16,
377
- paddingVertical: 8,
378
- },
379
- medium: {
380
- minHeight: 48,
381
- paddingHorizontal: 24,
382
- paddingVertical: 12,
383
- },
384
- large: {
385
- minHeight: 56,
386
- paddingHorizontal: 32,
387
- paddingVertical: 16,
388
- },
389
- primaryButton: {
390
- backgroundColor: '#007AFF',
391
- },
392
- secondaryButton: {
393
- backgroundColor: '#5856D6',
394
- },
395
- outlineButton: {
396
- backgroundColor: 'transparent',
397
- borderWidth: 2,
398
- borderColor: '#007AFF',
399
- },
400
- text: {
401
- fontWeight: '600',
402
- textAlign: 'center',
403
- },
404
- smallText: {
405
- fontSize: 14,
406
- },
407
- mediumText: {
408
- fontSize: 16,
409
- },
410
- largeText: {
411
- fontSize: 18,
412
- },
413
- lightText: {
414
- color: '#FFFFFF',
415
- },
416
- darkText: {
417
- color: '#007AFF',
418
- },
419
- });
420
- ```
421
-
422
- ### Navigation Design Patterns
423
-
424
- **Mobile Navigation Architecture:**
425
- ```dart
426
- // Flutter Navigation Design System
427
- class MobileNavigationDesignSystem {
428
- // Tab Bar Navigation for Primary Navigation
429
- static Widget buildTabBarNavigation({
430
- required List<NavigationItem> items,
431
- required int currentIndex,
432
- required Function(int) onTap,
433
- }) {
434
- return Container(
435
- decoration: BoxDecoration(
436
- color: Colors.white,
437
- boxShadow: [
438
- BoxShadow(
439
- color: Colors.black12,
440
- blurRadius: 8,
441
- offset: Offset(0, -2),
442
- ),
443
- ],
444
- ),
445
- child: SafeArea(
446
- child: TabBar(
447
- tabs: items.map((item) => _buildTabItem(item)).toList(),
448
- onTap: onTap,
449
- indicatorColor: Colors.transparent,
450
- labelColor: Colors.blue,
451
- unselectedLabelColor: Colors.grey,
452
- ),
453
- ),
454
- );
455
- }
456
-
457
- static Widget _buildTabItem(NavigationItem item) {
458
- return Tab(
459
- height: 60,
460
- child: Column(
461
- mainAxisAlignment: MainAxisAlignment.center,
462
- children: [
463
- Icon(item.icon, size: 24),
464
- SizedBox(height: 4),
465
- Text(
466
- item.label,
467
- style: TextStyle(fontSize: 12),
468
- overflow: TextOverflow.ellipsis,
469
- ),
470
- ],
471
- ),
472
- );
473
- }
474
-
475
- // Drawer Navigation for Secondary Navigation
476
- static Widget buildDrawerNavigation({
477
- required List<DrawerItem> items,
478
- required Function(DrawerItem) onItemTap,
479
- }) {
480
- return Drawer(
481
- child: SafeArea(
482
- child: Column(
483
- children: [
484
- _buildDrawerHeader(),
485
- Expanded(
486
- child: ListView.builder(
487
- itemCount: items.length,
488
- itemBuilder: (context, index) {
489
- final item = items[index];
490
- return _buildDrawerItem(item, onItemTap);
491
- },
492
- ),
493
- ),
494
- ],
495
- ),
496
- ),
497
- );
498
- }
499
-
500
- static Widget _buildDrawerHeader() {
501
- return Container(
502
- height: 120,
503
- padding: EdgeInsets.all(16),
504
- decoration: BoxDecoration(
505
- gradient: LinearGradient(
506
- begin: Alignment.topLeft,
507
- end: Alignment.bottomRight,
508
- colors: [Colors.blue.shade400, Colors.blue.shade600],
509
- ),
510
- ),
511
- child: Row(
512
- children: [
513
- CircleAvatar(
514
- radius: 30,
515
- backgroundImage: AssetImage('assets/images/user_avatar.png'),
516
- ),
517
- SizedBox(width: 16),
518
- Column(
519
- crossAxisAlignment: CrossAxisAlignment.start,
520
- mainAxisAlignment: MainAxisAlignment.center,
521
- children: [
522
- Text(
523
- 'John Doe',
524
- style: TextStyle(
525
- color: Colors.white,
526
- fontSize: 18,
527
- fontWeight: FontWeight.bold,
528
- ),
529
- ),
530
- Text(
531
- 'john.doe@example.com',
532
- style: TextStyle(
533
- color: Colors.white70,
534
- fontSize: 14,
535
- ),
536
- ),
537
- ],
538
- ),
539
- ],
540
- ),
541
- );
542
- }
543
-
544
- // Bottom Sheet for Contextual Actions
545
- static void showActionBottomSheet({
546
- required BuildContext context,
547
- required List<ActionItem> actions,
548
- }) {
549
- showModalBottomSheet(
550
- context: context,
551
- shape: RoundedRectangleBorder(
552
- borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
553
- ),
554
- builder: (context) {
555
- return SafeArea(
556
- child: Column(
557
- mainAxisSize: MainAxisSize.min,
558
- children: [
559
- Container(
560
- width: 40,
561
- height: 4,
562
- margin: EdgeInsets.symmetric(vertical: 12),
563
- decoration: BoxDecoration(
564
- color: Colors.grey[300],
565
- borderRadius: BorderRadius.circular(2),
566
- ),
567
- ),
568
- ...actions.map((action) => _buildActionItem(context, action)),
569
- SizedBox(height: 16),
570
- ],
571
- ),
572
- );
573
- },
574
- );
575
- }
576
-
577
- static Widget _buildActionItem(BuildContext context, ActionItem action) {
578
- return ListTile(
579
- leading: Icon(action.icon),
580
- title: Text(action.title),
581
- subtitle: action.subtitle != null ? Text(action.subtitle!) : null,
582
- onTap: () {
583
- Navigator.pop(context);
584
- action.onTap();
585
- },
586
- );
587
- }
588
-
589
- // Floating Action Button with Speed Dial
590
- static Widget buildSpeedDial({
591
- required List<SpeedDialAction> actions,
592
- required VoidCallback onMainAction,
593
- }) {
594
- return SpeedDial(
595
- animatedIcon: AnimatedIcons.menu_close,
596
- animatedIconTheme: IconThemeData(size: 22),
597
- curve: Curves.bounceIn,
598
- overlayColor: Colors.black,
599
- overlayOpacity: 0.5,
600
- tooltip: 'Speed Dial',
601
- heroTag: 'speed-dial-hero-tag',
602
- backgroundColor: Colors.blue,
603
- foregroundColor: Colors.white,
604
- elevation: 8.0,
605
- shape: CircleBorder(),
606
- children: actions.map((action) => SpeedDialChild(
607
- child: Icon(action.icon),
608
- backgroundColor: action.backgroundColor,
609
- label: action.label,
610
- labelStyle: TextStyle(fontWeight: FontWeight.w500),
611
- onTap: action.onTap,
612
- )).toList(),
613
- );
614
- }
615
- }
616
-
617
- // Navigation Models
618
- class NavigationItem {
619
- final IconData icon;
620
- final String label;
621
- final String route;
622
-
623
- NavigationItem({
624
- required this.icon,
625
- required this.label,
626
- required this.route,
627
- });
628
- }
629
-
630
- class DrawerItem {
631
- final IconData icon;
632
- final String title;
633
- final String? subtitle;
634
- final VoidCallback onTap;
635
-
636
- DrawerItem({
637
- required this.icon,
638
- required this.title,
639
- this.subtitle,
640
- required this.onTap,
641
- });
642
- }
643
-
644
- class ActionItem {
645
- final IconData icon;
646
- final String title;
647
- final String? subtitle;
648
- final VoidCallback onTap;
649
-
650
- ActionItem({
651
- required this.icon,
652
- required this.title,
653
- this.subtitle,
654
- required this.onTap,
655
- });
656
- }
657
-
658
- class SpeedDialAction {
659
- final IconData icon;
660
- final String label;
661
- final Color backgroundColor;
662
- final VoidCallback onTap;
663
-
664
- SpeedDialAction({
665
- required this.icon,
666
- required this.label,
667
- required this.backgroundColor,
668
- required this.onTap,
669
- });
670
- }
671
- ```
672
-
673
- ## Platform-Specific Design Implementation
674
-
675
- ### iOS Human Interface Guidelines
676
-
677
- **iOS Design System Implementation:**
678
- ```dart
679
- // iOS-Style Design System for Flutter
680
- class IOSDesignSystem {
681
- // iOS Colors
682
- static const Map<String, Color> colors = {
683
- 'systemBlue': Color(0xFF007AFF),
684
- 'systemGreen': Color(0xFF34C759),
685
- 'systemIndigo': Color(0xFF5856D6),
686
- 'systemOrange': Color(0xFFFF9500),
687
- 'systemPink': Color(0xFFFF2D92),
688
- 'systemPurple': Color(0xFFAF52DE),
689
- 'systemRed': Color(0xFFFF3B30),
690
- 'systemTeal': Color(0xFF5AC8FA),
691
- 'systemYellow': Color(0xFFFFCC00),
692
- 'systemGray': Color(0xFF8E8E93),
693
- 'systemGray2': Color(0xFFAEAEB2),
694
- 'systemGray3': Color(0xFFC7C7CC),
695
- 'systemGray4': Color(0xFFD1D1D6),
696
- 'systemGray5': Color(0xFFE5E5EA),
697
- 'systemGray6': Color(0xFFF2F2F7),
698
- 'label': Color(0xFF000000),
699
- 'secondaryLabel': Color(0x99000000),
700
- 'tertiaryLabel': Color(0x4D000000),
701
- 'quaternaryLabel': Color(0x2D000000),
702
- 'systemBackground': Color(0xFFFFFFFF),
703
- 'secondarySystemBackground': Color(0xFFF2F2F7),
704
- 'tertiarySystemBackground': Color(0xFFFFFFFF),
705
- };
706
-
707
- // iOS Typography
708
- static const TextStyle largeTitle = TextStyle(
709
- fontSize: 34,
710
- fontWeight: FontWeight.w700,
711
- letterSpacing: 0.37,
712
- );
713
-
714
- static const TextStyle title1 = TextStyle(
715
- fontSize: 28,
716
- fontWeight: FontWeight.w700,
717
- letterSpacing: 0.36,
718
- );
719
-
720
- static const TextStyle title2 = TextStyle(
721
- fontSize: 22,
722
- fontWeight: FontWeight.w700,
723
- letterSpacing: 0.35,
724
- );
725
-
726
- static const TextStyle title3 = TextStyle(
727
- fontSize: 20,
728
- fontWeight: FontWeight.w600,
729
- letterSpacing: 0.38,
730
- );
731
-
732
- static const TextStyle headline = TextStyle(
733
- fontSize: 17,
734
- fontWeight: FontWeight.w600,
735
- letterSpacing: -0.43,
736
- );
737
-
738
- static const TextStyle body = TextStyle(
739
- fontSize: 17,
740
- fontWeight: FontWeight.w400,
741
- letterSpacing: -0.43,
742
- );
743
-
744
- static const TextStyle callout = TextStyle(
745
- fontSize: 16,
746
- fontWeight: FontWeight.w400,
747
- letterSpacing: -0.32,
748
- );
749
-
750
- static const TextStyle subhead = TextStyle(
751
- fontSize: 15,
752
- fontWeight: FontWeight.w400,
753
- letterSpacing: -0.24,
754
- );
755
-
756
- static const TextStyle footnote = TextStyle(
757
- fontSize: 13,
758
- fontWeight: FontWeight.w400,
759
- letterSpacing: -0.08,
760
- );
761
-
762
- static const TextStyle caption1 = TextStyle(
763
- fontSize: 12,
764
- fontWeight: FontWeight.w400,
765
- letterSpacing: 0.0,
766
- );
767
-
768
- static const TextStyle caption2 = TextStyle(
769
- fontSize: 11,
770
- fontWeight: FontWeight.w400,
771
- letterSpacing: 0.07,
772
- );
773
-
774
- // iOS Navigation Bar
775
- static PreferredSizeWidget buildIOSNavigationBar({
776
- required String title,
777
- List<Widget>? actions,
778
- Widget? leading,
779
- bool centerTitle = true,
780
- }) {
781
- return CupertinoNavigationBar(
782
- middle: Text(
783
- title,
784
- style: TextStyle(
785
- fontSize: 17,
786
- fontWeight: FontWeight.w600,
787
- ),
788
- ),
789
- leading: leading,
790
- trailing: actions != null
791
- ? Row(
792
- mainAxisSize: MainAxisSize.min,
793
- children: actions,
794
- )
795
- : null,
796
- backgroundColor: colors['systemBackground'],
797
- border: Border(
798
- bottom: BorderSide(
799
- color: colors['systemGray4']!,
800
- width: 0.5,
801
- ),
802
- ),
803
- );
804
- }
805
-
806
- // iOS List Items
807
- static Widget buildIOSListItem({
808
- required String title,
809
- String? subtitle,
810
- Widget? leading,
811
- Widget? trailing,
812
- VoidCallback? onTap,
813
- }) {
814
- return CupertinoListTile(
815
- title: Text(
816
- title,
817
- style: body,
818
- ),
819
- subtitle: subtitle != null
820
- ? Text(
821
- subtitle,
822
- style: callout.copyWith(color: colors['secondaryLabel']),
823
- )
824
- : null,
825
- leading: leading,
826
- trailing: trailing ?? Icon(
827
- CupertinoIcons.right_chevron,
828
- color: colors['systemGray3'],
829
- size: 14,
830
- ),
831
- onTap: onTap,
832
- );
833
- }
834
-
835
- // iOS Action Sheet
836
- static void showIOSActionSheet({
837
- required BuildContext context,
838
- required String title,
839
- String? message,
840
- required List<CupertinoActionSheetAction> actions,
841
- }) {
842
- showCupertinoModalPopup(
843
- context: context,
844
- builder: (context) => CupertinoActionSheet(
845
- title: Text(title),
846
- message: message != null ? Text(message) : null,
847
- actions: actions,
848
- cancelButton: CupertinoActionSheetAction(
849
- onPressed: () => Navigator.pop(context),
850
- child: Text('Cancel'),
851
- ),
852
- ),
853
- );
854
- }
855
-
856
- // iOS Switch
857
- static Widget buildIOSSwitch({
858
- required bool value,
859
- required ValueChanged<bool> onChanged,
860
- }) {
861
- return CupertinoSwitch(
862
- value: value,
863
- onChanged: onChanged,
864
- activeColor: colors['systemBlue'],
865
- );
866
- }
867
-
868
- // iOS Segmented Control
869
- static Widget buildIOSSegmentedControl<T>({
870
- required Map<T, Widget> children,
871
- required T groupValue,
872
- required ValueChanged<T?> onValueChanged,
873
- }) {
874
- return CupertinoSegmentedControl<T>(
875
- children: children,
876
- groupValue: groupValue,
877
- onValueChanged: onValueChanged,
878
- selectedColor: colors['systemBlue'],
879
- unselectedColor: colors['systemBackground'],
880
- borderColor: colors['systemBlue'],
881
- pressedColor: colors['systemBlue']!.withOpacity(0.2),
882
- );
883
- }
884
- }
885
- ```
886
-
887
- ### Android Material Design
888
-
889
- **Material Design System Implementation:**
890
- ```dart
891
- // Material Design System for Flutter
892
- class MaterialDesignSystem {
893
- // Material 3 Color Scheme
894
- static const ColorScheme lightColorScheme = ColorScheme(
895
- brightness: Brightness.light,
896
- primary: Color(0xFF6750A4),
897
- onPrimary: Color(0xFFFFFFFF),
898
- primaryContainer: Color(0xFFEADDFF),
899
- onPrimaryContainer: Color(0xFF21005D),
900
- secondary: Color(0xFF625B71),
901
- onSecondary: Color(0xFFFFFFFF),
902
- secondaryContainer: Color(0xFFE8DEF8),
903
- onSecondaryContainer: Color(0xFF1D192B),
904
- tertiary: Color(0xFF7D5260),
905
- onTertiary: Color(0xFFFFFFFF),
906
- tertiaryContainer: Color(0xFFFFD8E4),
907
- onTertiaryContainer: Color(0xFF31111D),
908
- error: Color(0xFFBA1A1A),
909
- onError: Color(0xFFFFFFFF),
910
- errorContainer: Color(0xFFFFDAD6),
911
- onErrorContainer: Color(0xFF410002),
912
- background: Color(0xFFFFFBFE),
913
- onBackground: Color(0xFF1C1B1F),
914
- surface: Color(0xFFFFFBFE),
915
- onSurface: Color(0xFF1C1B1F),
916
- surfaceVariant: Color(0xFFE7E0EC),
917
- onSurfaceVariant: Color(0xFF49454F),
918
- outline: Color(0xFF79747E),
919
- outlineVariant: Color(0xFFCAC4D0),
920
- shadow: Color(0xFF000000),
921
- scrim: Color(0xFF000000),
922
- inverseSurface: Color(0xFF313033),
923
- onInverseSurface: Color(0xFFF4EFF4),
924
- inversePrimary: Color(0xFFD0BCFF),
925
- surfaceTint: Color(0xFF6750A4),
926
- );
927
-
928
- // Material 3 Typography
929
- static const TextTheme textTheme = TextTheme(
930
- displayLarge: TextStyle(
931
- fontSize: 57,
932
- fontWeight: FontWeight.w400,
933
- letterSpacing: -0.25,
934
- height: 1.12,
935
- ),
936
- displayMedium: TextStyle(
937
- fontSize: 45,
938
- fontWeight: FontWeight.w400,
939
- letterSpacing: 0,
940
- height: 1.16,
941
- ),
942
- displaySmall: TextStyle(
943
- fontSize: 36,
944
- fontWeight: FontWeight.w400,
945
- letterSpacing: 0,
946
- height: 1.22,
947
- ),
948
- headlineLarge: TextStyle(
949
- fontSize: 32,
950
- fontWeight: FontWeight.w400,
951
- letterSpacing: 0,
952
- height: 1.25,
953
- ),
954
- headlineMedium: TextStyle(
955
- fontSize: 28,
956
- fontWeight: FontWeight.w400,
957
- letterSpacing: 0,
958
- height: 1.29,
959
- ),
960
- headlineSmall: TextStyle(
961
- fontSize: 24,
962
- fontWeight: FontWeight.w400,
963
- letterSpacing: 0,
964
- height: 1.33,
965
- ),
966
- titleLarge: TextStyle(
967
- fontSize: 22,
968
- fontWeight: FontWeight.w400,
969
- letterSpacing: 0,
970
- height: 1.27,
971
- ),
972
- titleMedium: TextStyle(
973
- fontSize: 16,
974
- fontWeight: FontWeight.w500,
975
- letterSpacing: 0.15,
976
- height: 1.50,
977
- ),
978
- titleSmall: TextStyle(
979
- fontSize: 14,
980
- fontWeight: FontWeight.w500,
981
- letterSpacing: 0.10,
982
- height: 1.43,
983
- ),
984
- bodyLarge: TextStyle(
985
- fontSize: 16,
986
- fontWeight: FontWeight.w400,
987
- letterSpacing: 0.15,
988
- height: 1.50,
989
- ),
990
- bodyMedium: TextStyle(
991
- fontSize: 14,
992
- fontWeight: FontWeight.w400,
993
- letterSpacing: 0.25,
994
- height: 1.43,
995
- ),
996
- bodySmall: TextStyle(
997
- fontSize: 12,
998
- fontWeight: FontWeight.w400,
999
- letterSpacing: 0.40,
1000
- height: 1.33,
1001
- ),
1002
- labelLarge: TextStyle(
1003
- fontSize: 14,
1004
- fontWeight: FontWeight.w500,
1005
- letterSpacing: 0.10,
1006
- height: 1.43,
1007
- ),
1008
- labelMedium: TextStyle(
1009
- fontSize: 12,
1010
- fontWeight: FontWeight.w500,
1011
- letterSpacing: 0.50,
1012
- height: 1.33,
1013
- ),
1014
- labelSmall: TextStyle(
1015
- fontSize: 11,
1016
- fontWeight: FontWeight.w500,
1017
- letterSpacing: 0.50,
1018
- height: 1.45,
1019
- ),
1020
- );
1021
-
1022
- // Material Cards
1023
- static Widget buildMaterialCard({
1024
- required Widget child,
1025
- VoidCallback? onTap,
1026
- EdgeInsetsGeometry? margin,
1027
- EdgeInsetsGeometry? padding,
1028
- }) {
1029
- return Card(
1030
- margin: margin ?? EdgeInsets.all(8),
1031
- elevation: 1,
1032
- shadowColor: Colors.black.withOpacity(0.2),
1033
- shape: RoundedRectangleBorder(
1034
- borderRadius: BorderRadius.circular(12),
1035
- ),
1036
- child: InkWell(
1037
- onTap: onTap,
1038
- borderRadius: BorderRadius.circular(12),
1039
- child: Padding(
1040
- padding: padding ?? EdgeInsets.all(16),
1041
- child: child,
1042
- ),
1043
- ),
1044
- );
1045
- }
1046
-
1047
- // Material Buttons
1048
- static Widget buildFilledButton({
1049
- required String text,
1050
- required VoidCallback? onPressed,
1051
- IconData? icon,
1052
- }) {
1053
- return FilledButton.icon(
1054
- onPressed: onPressed,
1055
- icon: icon != null ? Icon(icon) : SizedBox.shrink(),
1056
- label: Text(text),
1057
- style: FilledButton.styleFrom(
1058
- minimumSize: Size(64, 40),
1059
- shape: RoundedRectangleBorder(
1060
- borderRadius: BorderRadius.circular(20),
1061
- ),
1062
- ),
1063
- );
1064
- }
1065
-
1066
- static Widget buildOutlinedButton({
1067
- required String text,
1068
- required VoidCallback? onPressed,
1069
- IconData? icon,
1070
- }) {
1071
- return OutlinedButton.icon(
1072
- onPressed: onPressed,
1073
- icon: icon != null ? Icon(icon) : SizedBox.shrink(),
1074
- label: Text(text),
1075
- style: OutlinedButton.styleFrom(
1076
- minimumSize: Size(64, 40),
1077
- shape: RoundedRectangleBorder(
1078
- borderRadius: BorderRadius.circular(20),
1079
- ),
1080
- ),
1081
- );
1082
- }
1083
-
1084
- static Widget buildTextButton({
1085
- required String text,
1086
- required VoidCallback? onPressed,
1087
- IconData? icon,
1088
- }) {
1089
- return TextButton.icon(
1090
- onPressed: onPressed,
1091
- icon: icon != null ? Icon(icon) : SizedBox.shrink(),
1092
- label: Text(text),
1093
- style: TextButton.styleFrom(
1094
- minimumSize: Size(48, 40),
1095
- shape: RoundedRectangleBorder(
1096
- borderRadius: BorderRadius.circular(20),
1097
- ),
1098
- ),
1099
- );
1100
- }
1101
-
1102
- // Material Navigation
1103
- static Widget buildNavigationBar({
1104
- required List<NavigationDestination> destinations,
1105
- required int selectedIndex,
1106
- required ValueChanged<int> onDestinationSelected,
1107
- }) {
1108
- return NavigationBar(
1109
- destinations: destinations,
1110
- selectedIndex: selectedIndex,
1111
- onDestinationSelected: onDestinationSelected,
1112
- height: 80,
1113
- elevation: 3,
1114
- shadowColor: Colors.black.withOpacity(0.2),
1115
- );
1116
- }
1117
-
1118
- // Material Floating Action Button
1119
- static Widget buildFloatingActionButton({
1120
- required VoidCallback onPressed,
1121
- required IconData icon,
1122
- String? tooltip,
1123
- bool extended = false,
1124
- String? label,
1125
- }) {
1126
- if (extended && label != null) {
1127
- return FloatingActionButton.extended(
1128
- onPressed: onPressed,
1129
- icon: Icon(icon),
1130
- label: Text(label),
1131
- tooltip: tooltip,
1132
- elevation: 6,
1133
- );
1134
- }
1135
-
1136
- return FloatingActionButton(
1137
- onPressed: onPressed,
1138
- tooltip: tooltip,
1139
- elevation: 6,
1140
- child: Icon(icon),
1141
- );
1142
- }
1143
-
1144
- // Material Snackbar
1145
- static void showMaterialSnackbar({
1146
- required BuildContext context,
1147
- required String message,
1148
- String? actionLabel,
1149
- VoidCallback? onActionPressed,
1150
- Duration duration = const Duration(seconds: 4),
1151
- }) {
1152
- ScaffoldMessenger.of(context).showSnackBar(
1153
- SnackBar(
1154
- content: Text(message),
1155
- duration: duration,
1156
- action: actionLabel != null
1157
- ? SnackBarAction(
1158
- label: actionLabel,
1159
- onPressed: onActionPressed ?? () {},
1160
- )
1161
- : null,
1162
- behavior: SnackBarBehavior.floating,
1163
- shape: RoundedRectangleBorder(
1164
- borderRadius: BorderRadius.circular(8),
1165
- ),
1166
- ),
1167
- );
1168
- }
1169
- }
1170
- ```
1171
-
1172
- ## Accessibility and Inclusive Design
1173
-
1174
- ### Universal Design Implementation
1175
-
1176
- **Accessibility-First Components:**
1177
- ```dart
1178
- // Accessibility-Optimized Design System
1179
- class AccessibilityDesignSystem {
1180
- // WCAG Color Contrast Ratios
1181
- static const double minContrastNormal = 4.5;
1182
- static const double minContrastLarge = 3.0;
1183
- static const double enhancedContrast = 7.0;
1184
-
1185
- // Accessible Color Combinations
1186
- static const Map<String, AccessibleColorPair> accessibleColors = {
1187
- 'primary': AccessibleColorPair(
1188
- background: Color(0xFF1976D2),
1189
- foreground: Color(0xFFFFFFFF),
1190
- contrastRatio: 5.5,
1191
- ),
1192
- 'secondary': AccessibleColorPair(
1193
- background: Color(0xFF424242),
1194
- foreground: Color(0xFFFFFFFF),
1195
- contrastRatio: 8.2,
1196
- ),
1197
- 'error': AccessibleColorPair(
1198
- background: Color(0xFFD32F2F),
1199
- foreground: Color(0xFFFFFFFF),
1200
- contrastRatio: 5.1,
1201
- ),
1202
- 'success': AccessibleColorPair(
1203
- background: Color(0xFF2E7D32),
1204
- foreground: Color(0xFFFFFFFF),
1205
- contrastRatio: 6.7,
1206
- ),
1207
- };
1208
-
1209
- // Accessible Typography
1210
- static TextStyle getAccessibleTextStyle({
1211
- required double fontSize,
1212
- required FontWeight fontWeight,
1213
- required Color color,
1214
- required Color backgroundColor,
1215
- }) {
1216
- final contrastRatio = _calculateContrastRatio(color, backgroundColor);
1217
- final isLargeText = fontSize >= 18 || (fontSize >= 14 && fontWeight.index >= FontWeight.bold.index);
1218
- final minContrast = isLargeText ? minContrastLarge : minContrastNormal;
1219
-
1220
- if (contrastRatio < minContrast) {
1221
- // Adjust color for better contrast
1222
- final adjustedColor = _adjustColorForContrast(color, backgroundColor, minContrast);
1223
- return TextStyle(
1224
- fontSize: fontSize,
1225
- fontWeight: fontWeight,
1226
- color: adjustedColor,
1227
- );
1228
- }
1229
-
1230
- return TextStyle(
1231
- fontSize: fontSize,
1232
- fontWeight: fontWeight,
1233
- color: color,
1234
- );
1235
- }
1236
-
1237
- // Accessible Button
1238
- static Widget buildAccessibleButton({
1239
- required String text,
1240
- required VoidCallback? onPressed,
1241
- String? semanticLabel,
1242
- String? tooltip,
1243
- IconData? icon,
1244
- ButtonType type = ButtonType.primary,
1245
- }) {
1246
- final colorPair = accessibleColors[type.name] ?? accessibleColors['primary']!;
1247
-
1248
- return Tooltip(
1249
- message: tooltip ?? text,
1250
- child: Semantics(
1251
- label: semanticLabel ?? text,
1252
- button: true,
1253
- enabled: onPressed != null,
1254
- child: ElevatedButton(
1255
- onPressed: onPressed,
1256
- style: ElevatedButton.styleFrom(
1257
- backgroundColor: colorPair.background,
1258
- foregroundColor: colorPair.foreground,
1259
- minimumSize: Size(88, 48), // Minimum touch target
1260
- padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12),
1261
- shape: RoundedRectangleBorder(
1262
- borderRadius: BorderRadius.circular(8),
1263
- ),
1264
- ),
1265
- child: Row(
1266
- mainAxisSize: MainAxisSize.min,
1267
- children: [
1268
- if (icon != null) ...[
1269
- Icon(icon, size: 20),
1270
- SizedBox(width: 8),
1271
- ],
1272
- Text(
1273
- text,
1274
- style: TextStyle(
1275
- fontSize: 16,
1276
- fontWeight: FontWeight.w600,
1277
- ),
1278
- ),
1279
- ],
1280
- ),
1281
- ),
1282
- ),
1283
- );
1284
- }
1285
-
1286
- // Accessible Form Field
1287
- static Widget buildAccessibleFormField({
1288
- required String label,
1289
- required TextEditingController controller,
1290
- String? hint,
1291
- String? errorText,
1292
- bool required = false,
1293
- TextInputType keyboardType = TextInputType.text,
1294
- bool obscureText = false,
1295
- List<TextInputFormatter>? inputFormatters,
1296
- }) {
1297
- final fieldId = 'field_${label.toLowerCase().replaceAll(' ', '_')}';
1298
-
1299
- return Column(
1300
- crossAxisAlignment: CrossAxisAlignment.start,
1301
- children: [
1302
- Semantics(
1303
- label: required ? '$label (required)' : label,
1304
- child: Text(
1305
- required ? '$label *' : label,
1306
- style: TextStyle(
1307
- fontSize: 16,
1308
- fontWeight: FontWeight.w500,
1309
- color: Colors.black87,
1310
- ),
1311
- ),
1312
- ),
1313
- SizedBox(height: 8),
1314
- Semantics(
1315
- textField: true,
1316
- label: label,
1317
- hint: hint,
1318
- child: TextFormField(
1319
- controller: controller,
1320
- keyboardType: keyboardType,
1321
- obscureText: obscureText,
1322
- inputFormatters: inputFormatters,
1323
- decoration: InputDecoration(
1324
- hintText: hint,
1325
- errorText: errorText,
1326
- border: OutlineInputBorder(
1327
- borderRadius: BorderRadius.circular(8),
1328
- borderSide: BorderSide(color: Colors.grey.shade400),
1329
- ),
1330
- focusedBorder: OutlineInputBorder(
1331
- borderRadius: BorderRadius.circular(8),
1332
- borderSide: BorderSide(color: Colors.blue, width: 2),
1333
- ),
1334
- errorBorder: OutlineInputBorder(
1335
- borderRadius: BorderRadius.circular(8),
1336
- borderSide: BorderSide(color: Colors.red, width: 2),
1337
- ),
1338
- contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 16),
1339
- ),
1340
- validator: required
1341
- ? (value) {
1342
- if (value == null || value.isEmpty) {
1343
- return '$label is required';
1344
- }
1345
- return null;
1346
- }
1347
- : null,
1348
- ),
1349
- ),
1350
- ],
1351
- );
1352
- }
1353
-
1354
- // Screen Reader Optimized List
1355
- static Widget buildAccessibleList({
1356
- required List<AccessibleListItem> items,
1357
- required Function(AccessibleListItem) onItemTap,
1358
- }) {
1359
- return ListView.builder(
1360
- itemCount: items.length,
1361
- itemBuilder: (context, index) {
1362
- final item = items[index];
1363
- return Semantics(
1364
- button: true,
1365
- label: '${item.title}. ${item.subtitle ?? ''}. Item ${index + 1} of ${items.length}',
1366
- onTap: () => onItemTap(item),
1367
- child: Card(
1368
- margin: EdgeInsets.symmetric(horizontal: 16, vertical: 4),
1369
- child: ListTile(
1370
- title: Text(
1371
- item.title,
1372
- style: TextStyle(
1373
- fontSize: 16,
1374
- fontWeight: FontWeight.w500,
1375
- ),
1376
- ),
1377
- subtitle: item.subtitle != null
1378
- ? Text(
1379
- item.subtitle!,
1380
- style: TextStyle(
1381
- fontSize: 14,
1382
- color: Colors.grey.shade600,
1383
- ),
1384
- )
1385
- : null,
1386
- leading: item.icon != null
1387
- ? Icon(
1388
- item.icon,
1389
- size: 24,
1390
- color: Colors.blue,
1391
- )
1392
- : null,
1393
- trailing: Icon(
1394
- Icons.chevron_right,
1395
- color: Colors.grey.shade400,
1396
- ),
1397
- onTap: () => onItemTap(item),
1398
- contentPadding: EdgeInsets.symmetric(horizontal: 16, vertical: 8),
1399
- ),
1400
- ),
1401
- );
1402
- },
1403
- );
1404
- }
1405
-
1406
- // High Contrast Mode Support
1407
- static Widget buildHighContrastWrapper({
1408
- required Widget child,
1409
- required BuildContext context,
1410
- }) {
1411
- final isHighContrast = MediaQuery.of(context).highContrast;
1412
-
1413
- if (isHighContrast) {
1414
- return Theme(
1415
- data: Theme.of(context).copyWith(
1416
- colorScheme: ColorScheme.fromSeed(
1417
- seedColor: Colors.blue,
1418
- brightness: Brightness.light,
1419
- ).copyWith(
1420
- surface: Colors.white,
1421
- onSurface: Colors.black,
1422
- primary: Colors.black,
1423
- onPrimary: Colors.white,
1424
- ),
1425
- ),
1426
- child: child,
1427
- );
1428
- }
1429
-
1430
- return child;
1431
- }
1432
-
1433
- // Helper methods
1434
- static double _calculateContrastRatio(Color foreground, Color background) {
1435
- final fgLuminance = foreground.computeLuminance();
1436
- final bgLuminance = background.computeLuminance();
1437
-
1438
- final lighter = math.max(fgLuminance, bgLuminance);
1439
- final darker = math.min(fgLuminance, bgLuminance);
1440
-
1441
- return (lighter + 0.05) / (darker + 0.05);
1442
- }
1443
-
1444
- static Color _adjustColorForContrast(
1445
- Color color,
1446
- Color background,
1447
- double targetContrast,
1448
- ) {
1449
- // Simplified contrast adjustment algorithm
1450
- // In production, use a more sophisticated approach
1451
- final hsl = HSLColor.fromColor(color);
1452
-
1453
- if (background.computeLuminance() > 0.5) {
1454
- // Light background, darken the color
1455
- return hsl.withLightness(math.max(0, hsl.lightness - 0.3)).toColor();
1456
- } else {
1457
- // Dark background, lighten the color
1458
- return hsl.withLightness(math.min(1, hsl.lightness + 0.3)).toColor();
1459
- }
1460
- }
1461
- }
1462
-
1463
- // Models
1464
- class AccessibleColorPair {
1465
- final Color background;
1466
- final Color foreground;
1467
- final double contrastRatio;
1468
-
1469
- const AccessibleColorPair({
1470
- required this.background,
1471
- required this.foreground,
1472
- required this.contrastRatio,
1473
- });
1474
- }
1475
-
1476
- class AccessibleListItem {
1477
- final String title;
1478
- final String? subtitle;
1479
- final IconData? icon;
1480
- final dynamic data;
1481
-
1482
- AccessibleListItem({
1483
- required this.title,
1484
- this.subtitle,
1485
- this.icon,
1486
- this.data,
1487
- });
1488
- }
1489
-
1490
- enum ButtonType { primary, secondary, error, success }
1491
- ```
1492
-
1493
- I'm ready to create exceptional mobile user experiences that are intuitive, accessible, and platform-appropriate for your Flutter or React Native application. Let me know what design areas you'd like me to focus on!
1494
- ==================== END: .bmad-mobile-app-dev/agents/mobile-ux-expert.md ====================