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