@shaykec/app-agent 1.0.5 → 1.0.6

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 (1033) hide show
  1. package/.cursor/rules/safety-guardrails.mdc +1 -0
  2. package/.cursor/rules/workflow.mdc +4 -4
  3. package/.cursor/skills/content-writer/SKILL.md +27 -3
  4. package/.cursor/skills/module-integrator/SKILL.md +53 -0
  5. package/.cursor/skills/module-selector/SKILL.md +11 -0
  6. package/.cursor/skills/ui-tester/SKILL.md +4 -2
  7. package/CLAUDE.md +4 -3
  8. package/dist/cli.d.ts +4 -2
  9. package/dist/cli.d.ts.map +1 -1
  10. package/dist/cli.js +45 -2
  11. package/dist/cli.js.map +1 -1
  12. package/dist/commands/configure.d.ts +3 -0
  13. package/dist/commands/configure.d.ts.map +1 -0
  14. package/dist/commands/configure.js +301 -0
  15. package/dist/commands/configure.js.map +1 -0
  16. package/dist/config.d.ts +6 -0
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +2 -0
  19. package/dist/config.js.map +1 -1
  20. package/dist/index.js +7 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/prompt-builder.d.ts +2 -2
  23. package/dist/prompt-builder.d.ts.map +1 -1
  24. package/dist/prompt-builder.js +24 -8
  25. package/dist/prompt-builder.js.map +1 -1
  26. package/package.json +1 -1
  27. package/prompts/agent-prompt.md +1 -1
  28. package/prompts/quick-agent-prompt.md +2 -2
  29. package/prompts/scratch-agent-prompt.md +1 -1
  30. package/prompts/test-agent-prompt.md +1 -1
  31. package/prompts/update-agent-prompt.md +4 -2
  32. package/templates/android/BookTemplate/TESTING_MANIFEST.md +12 -0
  33. package/templates/android/BookTemplate/app/build.gradle.kts +5 -0
  34. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/BookApplication.kt +5 -0
  35. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/core/components/EmptyStateView.kt +105 -0
  36. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/DataRepository.kt +37 -0
  37. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/DataSourceResolver.kt +3 -4
  38. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/AppDao.kt +113 -0
  39. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/AppDatabase.kt +40 -0
  40. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/BookingEntity.kt +60 -0
  41. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/BusinessHoursEntity.kt +35 -0
  42. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/LocalStorageProvider.kt +205 -0
  43. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/ProviderEntity.kt +83 -0
  44. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/ReviewEntity.kt +62 -0
  45. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/data/local/ServiceEntity.kt +40 -0
  46. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/features/bookings/BookingsScreen.kt +11 -29
  47. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/features/discovery/ProviderDetailScreen.kt +3 -2
  48. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/features/discovery/SearchScreen.kt +9 -22
  49. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/features/profile/ProfileScreen.kt +5 -22
  50. package/templates/android/BookTemplate/app/src/main/kotlin/com/appship/book/mock/MockDataProvider.kt +2 -2
  51. package/templates/android/BookTemplate/app/src/test/kotlin/com/appship/book/DataRepositoryTest.kt +40 -0
  52. package/templates/android/BookTemplate/gradle/libs.versions.toml +4 -0
  53. package/templates/android/BookTemplate/tests/01_launch_discover.yaml +17 -7
  54. package/templates/android/BookTemplate/tests/02_tab_navigation.yaml +23 -4
  55. package/templates/android/BookTemplate/tests/03_provider_detail.yaml +36 -5
  56. package/templates/android/BookTemplate/tests/04_booking_detail.yaml +48 -0
  57. package/templates/android/BookTemplate/tests/05_booking_create_flow.yaml +42 -0
  58. package/templates/android/BookTemplate/tests/06_search_filter.yaml +48 -0
  59. package/templates/android/BookTemplate/tests/07_profile_settings.yaml +37 -0
  60. package/templates/android/BookTemplate/tests/08_full_e2e.yaml +57 -3
  61. package/templates/android/ChatTemplate/TESTING_MANIFEST.md +3 -0
  62. package/templates/android/ChatTemplate/app/build.gradle.kts +5 -0
  63. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/ChatApplication.kt +6 -0
  64. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/core/components/EmptyStateView.kt +105 -0
  65. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/AppDao.kt +75 -0
  66. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/AppDatabase.kt +40 -0
  67. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/CallEntity.kt +57 -0
  68. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/ContactEntity.kt +38 -0
  69. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/ConversationEntity.kt +73 -0
  70. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/MessageEntity.kt +89 -0
  71. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/data/local/UserEntity.kt +52 -0
  72. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/features/calls/CallsScreen.kt +25 -9
  73. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/features/contacts/ContactsScreen.kt +27 -12
  74. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/features/conversations/ChatScreen.kt +1 -0
  75. package/templates/android/ChatTemplate/app/src/main/kotlin/com/appship/chat/features/conversations/ConversationsScreen.kt +42 -26
  76. package/templates/android/ChatTemplate/app/src/test/kotlin/com/appship/chat/DataRepositoryTest.kt +41 -0
  77. package/templates/android/ChatTemplate/gradle/libs.versions.toml +4 -0
  78. package/templates/android/ChatTemplate/tests/01_launch_chats.yaml +26 -7
  79. package/templates/android/ChatTemplate/tests/02_tab_navigation.yaml +61 -12
  80. package/templates/android/ChatTemplate/tests/08_full_e2e.yaml +96 -19
  81. package/templates/android/DashTemplate/TESTING_MANIFEST.md +6 -0
  82. package/templates/android/DashTemplate/app/build.gradle.kts +5 -0
  83. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/AppConfig.kt +9 -0
  84. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/DashApplication.kt +10 -1
  85. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/core/components/EmptyStateView.kt +105 -0
  86. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/DataSourceResolver.kt +2 -4
  87. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/AlertEntity.kt +40 -0
  88. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/AppDao.kt +112 -0
  89. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/AppDatabase.kt +41 -0
  90. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/DataPointEntity.kt +32 -0
  91. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/DataSourceEntity.kt +37 -0
  92. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/LocalStorageProvider.kt +231 -0
  93. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/MetricEntity.kt +52 -0
  94. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/ReportEntity.kt +48 -0
  95. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/data/local/WidgetEntity.kt +97 -0
  96. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/features/alerts/AlertsScreen.kt +25 -11
  97. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/features/dashboard/DashboardScreen.kt +21 -10
  98. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/features/datasources/DataSourcesScreen.kt +30 -16
  99. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/features/reports/ReportsScreen.kt +30 -16
  100. package/templates/android/DashTemplate/app/src/main/kotlin/com/appship/dash/mock/MockDataProvider.kt +7 -7
  101. package/templates/android/DashTemplate/app/src/test/kotlin/com/appship/dash/DataRepositoryTest.kt +41 -0
  102. package/templates/android/DashTemplate/gradle/libs.versions.toml +4 -0
  103. package/templates/android/DashTemplate/tests/02_tab_navigation.yaml +41 -7
  104. package/templates/android/FamilyTemplate/TESTING_MANIFEST.md +3 -0
  105. package/templates/android/FamilyTemplate/app/build.gradle.kts +5 -0
  106. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/FamilyApplication.kt +10 -1
  107. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/core/components/EmptyStateView.kt +105 -0
  108. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/DataRepository.kt +65 -0
  109. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/DataSourceResolver.kt +21 -0
  110. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/AppDao.kt +138 -0
  111. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/AppDatabase.kt +42 -0
  112. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/CalendarEventEntity.kt +55 -0
  113. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/ChoreEntity.kt +58 -0
  114. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/FamilyMemberEntity.kt +52 -0
  115. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/LocalStorageProvider.kt +301 -0
  116. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/LocationUpdateEntity.kt +39 -0
  117. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/MilestoneEntity.kt +45 -0
  118. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/PhotoEntity.kt +51 -0
  119. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/data/local/RewardEntity.kt +48 -0
  120. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/features/calendar/CalendarScreen.kt +19 -8
  121. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/features/chores/ChoreBoardScreen.kt +35 -21
  122. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/features/familyhub/FamilyHubScreen.kt +1 -1
  123. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/features/gallery/GalleryScreen.kt +1 -1
  124. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/features/rewards/RewardsScreen.kt +1 -1
  125. package/templates/android/FamilyTemplate/app/src/main/java/com/appship/family/mock/MockDataProvider.kt +7 -7
  126. package/templates/android/FamilyTemplate/app/src/test/java/com/appship/family/DataRepositoryTest.kt +42 -0
  127. package/templates/android/FamilyTemplate/app/src/test/java/com/appship/family/mock/MockDataProviderTest.kt +17 -17
  128. package/templates/android/FamilyTemplate/gradle/libs.versions.toml +4 -0
  129. package/templates/android/FamilyTemplate/tests/01_launch_hub.yaml +32 -1
  130. package/templates/android/FamilyTemplate/tests/02_tab_navigation.yaml +56 -3
  131. package/templates/android/FamilyTemplate/tests/03_chore_complete.yaml +36 -3
  132. package/templates/android/FamilyTemplate/tests/04_add_chore.yaml +49 -3
  133. package/templates/android/FinanceTemplate/TESTING_MANIFEST.md +4 -0
  134. package/templates/android/FinanceTemplate/app/build.gradle.kts +3 -0
  135. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/FinanceApplication.kt +5 -0
  136. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/core/components/EmptyStateView.kt +105 -0
  137. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/DataSourceResolver.kt +2 -4
  138. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/Models.kt +8 -0
  139. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/AccountEntity.kt +58 -0
  140. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/AppDao.kt +145 -0
  141. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/AppDatabase.kt +42 -0
  142. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/BillEntity.kt +63 -0
  143. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/BudgetEntity.kt +54 -0
  144. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/CategoryEntity.kt +33 -0
  145. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/GoalEntity.kt +59 -0
  146. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/InsightEntity.kt +47 -0
  147. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/LocalStorageProvider.kt +326 -0
  148. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/data/local/TransactionEntity.kt +66 -0
  149. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/features/budgets/BudgetsScreen.kt +13 -2
  150. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/features/goals/GoalsScreen.kt +17 -6
  151. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/features/home/HomeScreen.kt +12 -3
  152. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/features/transactions/TransactionsScreen.kt +26 -13
  153. package/templates/android/FinanceTemplate/app/src/main/kotlin/com/appship/finance/mock/MockDataProvider.kt +25 -61
  154. package/templates/android/FinanceTemplate/app/src/test/kotlin/com/appship/finance/DataRepositoryTest.kt +41 -0
  155. package/templates/android/FinanceTemplate/app/src/test/kotlin/com/appship/finance/mock/MockDataProviderTest.kt +5 -5
  156. package/templates/android/FinanceTemplate/gradle/libs.versions.toml +4 -0
  157. package/templates/android/FinanceTemplate/tests/01_launch_home.yaml +16 -6
  158. package/templates/android/FinanceTemplate/tests/08_full_e2e.yaml +89 -5
  159. package/templates/android/GameTemplate/TESTING_MANIFEST.md +3 -0
  160. package/templates/android/GameTemplate/app/build.gradle.kts +5 -0
  161. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/AppConfig.kt +9 -0
  162. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/MainActivity.kt +6 -0
  163. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/core/components/EmptyStateView.kt +137 -0
  164. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/DataSourceResolver.kt +21 -0
  165. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/AchievementEntity.kt +42 -0
  166. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/AppDao.kt +127 -0
  167. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/AppDatabase.kt +41 -0
  168. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/DailyChallengeEntity.kt +70 -0
  169. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/GameSessionEntity.kt +45 -0
  170. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/LeaderboardEntryEntity.kt +57 -0
  171. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/LevelEntity.kt +45 -0
  172. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/LocalStorageProvider.kt +99 -0
  173. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/data/local/ShopItemEntity.kt +41 -0
  174. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/features/achievements/AchievementsScreen.kt +20 -11
  175. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/features/leaderboard/LeaderboardScreen.kt +19 -11
  176. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/features/shop/ShopScreen.kt +32 -23
  177. package/templates/android/GameTemplate/app/src/main/kotlin/com/appship/game/mock/MockDataProvider.kt +6 -6
  178. package/templates/android/GameTemplate/app/src/test/kotlin/com/appship/game/DataRepositoryTest.kt +41 -0
  179. package/templates/android/GameTemplate/gradle/libs.versions.toml +8 -0
  180. package/templates/android/GameTemplate/tests/01_launch_home.yaml +16 -3
  181. package/templates/android/GameTemplate/tests/02_tab_navigation.yaml +40 -10
  182. package/templates/android/GameTemplate/tests/03_game_play.yaml +39 -2
  183. package/templates/android/GameTemplate/tests/04_leaderboard.yaml +41 -7
  184. package/templates/android/GameTemplate/tests/05_shop.yaml +36 -7
  185. package/templates/android/GameTemplate/tests/06_achievements.yaml +39 -6
  186. package/templates/android/GameTemplate/tests/07_profile_settings.yaml +40 -7
  187. package/templates/android/GameTemplate/tests/08_full_e2e.yaml +95 -22
  188. package/templates/android/HealthTemplate/TESTING_MANIFEST.md +2 -0
  189. package/templates/android/HealthTemplate/app/build.gradle.kts +7 -1
  190. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/AppConfig.kt +9 -0
  191. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/MainActivity.kt +8 -0
  192. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/core/components/EmptyStateView.kt +137 -0
  193. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/DataSourceResolver.kt +1 -2
  194. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/AppDao.kt +120 -0
  195. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/AppDatabase.kt +43 -0
  196. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/BodyMeasurementEntity.kt +38 -0
  197. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/DailyGoalEntity.kt +36 -0
  198. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/ExerciseEntity.kt +50 -0
  199. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/HealthMetricEntity.kt +38 -0
  200. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/LocalStorageProvider.kt +222 -0
  201. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/MealEntity.kt +60 -0
  202. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/WaterEntryEntity.kt +34 -0
  203. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/WorkoutEntity.kt +58 -0
  204. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/data/local/WorkoutSessionEntity.kt +51 -0
  205. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/features/dashboard/DashboardScreen.kt +4 -1
  206. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/features/profile/ProfileScreen.kt +5 -4
  207. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/features/workouts/WorkoutListScreen.kt +12 -1
  208. package/templates/android/HealthTemplate/app/src/main/kotlin/com/appship/health/mock/MockDataProvider.kt +12 -10
  209. package/templates/android/HealthTemplate/app/src/test/kotlin/com/appship/health/DataRepositoryTest.kt +41 -0
  210. package/templates/android/HealthTemplate/gradle/libs.versions.toml +4 -0
  211. package/templates/android/HealthTemplate/tests/01_launch_dashboard.yaml +20 -2
  212. package/templates/android/HealthTemplate/tests/02_tab_navigation.yaml +35 -8
  213. package/templates/android/HealthTemplate/tests/03_workout_browse.yaml +43 -3
  214. package/templates/android/HealthTemplate/tests/04_workout_player.yaml +46 -4
  215. package/templates/android/HealthTemplate/tests/05_meal_logging.yaml +46 -3
  216. package/templates/android/HealthTemplate/tests/06_progress_charts.yaml +42 -2
  217. package/templates/android/HealthTemplate/tests/07_profile_settings.yaml +33 -6
  218. package/templates/android/HealthTemplate/tests/08_full_e2e.yaml +91 -29
  219. package/templates/android/LearnTemplate/app/build.gradle.kts +5 -0
  220. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/MainActivity.kt +7 -0
  221. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/core/components/EmptyStateView.kt +137 -0
  222. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/DataRepository.kt +1 -0
  223. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/DataSourceResolver.kt +1 -2
  224. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/AchievementEntity.kt +38 -0
  225. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/AppDao.kt +74 -0
  226. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/AppDatabase.kt +40 -0
  227. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/CategoryEntity.kt +32 -0
  228. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/CourseEntity.kt +86 -0
  229. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/FlashcardDeckEntity.kt +50 -0
  230. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/LeaderboardEntryEntity.kt +41 -0
  231. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/data/local/LocalStorageProvider.kt +288 -0
  232. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/features/courses/CourseListScreen.kt +14 -4
  233. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/features/leaderboard/LeaderboardScreen.kt +2 -0
  234. package/templates/android/LearnTemplate/app/src/main/kotlin/com/appship/learn/mock/MockDataProvider.kt +7 -7
  235. package/templates/android/LearnTemplate/app/src/test/kotlin/com/appship/learn/DataRepositoryTest.kt +41 -0
  236. package/templates/android/LearnTemplate/gradle/libs.versions.toml +4 -0
  237. package/templates/android/LearnTemplate/tests/01_launch_home.yaml +13 -3
  238. package/templates/android/LearnTemplate/tests/02_tab_navigation.yaml +33 -8
  239. package/templates/android/LearnTemplate/tests/03_course_detail.yaml +29 -8
  240. package/templates/android/LearnTemplate/tests/04_lesson_player.yaml +31 -8
  241. package/templates/android/LearnTemplate/tests/05_search_filter.yaml +28 -4
  242. package/templates/android/LearnTemplate/tests/06_progress.yaml +28 -8
  243. package/templates/android/LearnTemplate/tests/07_profile_settings.yaml +32 -9
  244. package/templates/android/LearnTemplate/tests/08_full_e2e.yaml +69 -25
  245. package/templates/android/MapTemplate/TESTING_MANIFEST.md +9 -0
  246. package/templates/android/MapTemplate/app/build.gradle.kts +3 -0
  247. package/templates/android/MapTemplate/app/src/main/AndroidManifest.xml +1 -0
  248. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/MapApplication.kt +11 -1
  249. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/core/components/EmptyStateView.kt +137 -0
  250. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/data/DataSourceResolver.kt +3 -2
  251. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/data/local/AppDao.kt +70 -0
  252. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/data/local/AppDatabase.kt +34 -0
  253. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/data/local/LocalStorageProvider.kt +237 -0
  254. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/data/local/PlaceEntity.kt +104 -0
  255. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/data/local/ReviewEntity.kt +47 -0
  256. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/features/place/PlaceDetailScreen.kt +2 -0
  257. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/features/profile/ProfileScreen.kt +2 -0
  258. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/features/route/RouteScreen.kt +2 -0
  259. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/features/search/SearchScreen.kt +2 -0
  260. package/templates/android/MapTemplate/app/src/main/kotlin/com/appship/map/features/settings/SettingsScreen.kt +2 -0
  261. package/templates/android/MapTemplate/app/src/test/kotlin/com/appship/map/DataRepositoryTest.kt +18 -0
  262. package/templates/android/MapTemplate/gradle/libs.versions.toml +4 -0
  263. package/templates/android/MapTemplate/tests/01_launch_map.yaml +18 -8
  264. package/templates/android/MapTemplate/tests/02_tab_navigation.yaml +27 -13
  265. package/templates/android/MapTemplate/tests/03_map_interaction.yaml +23 -10
  266. package/templates/android/MapTemplate/tests/04_place_detail.yaml +21 -5
  267. package/templates/android/MapTemplate/tests/05_search.yaml +24 -2
  268. package/templates/android/MapTemplate/tests/06_filters.yaml +22 -2
  269. package/templates/android/MapTemplate/tests/08_full_e2e.yaml +26 -41
  270. package/templates/android/MediaTemplate/TESTING_MANIFEST.md +5 -0
  271. package/templates/android/MediaTemplate/app/build.gradle.kts +5 -0
  272. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/MediaApplication.kt +11 -1
  273. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/core/components/EmptyStateView.kt +137 -0
  274. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/DataRepository.kt +49 -0
  275. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/DataSourceResolver.kt +27 -0
  276. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/AppDao.kt +132 -0
  277. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/AppDatabase.kt +40 -0
  278. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/EpisodeEntity.kt +76 -0
  279. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/LocalStorageProvider.kt +335 -0
  280. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/MediaCategoryEntity.kt +39 -0
  281. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/MediaItemEntity.kt +74 -0
  282. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/PlaybackHistoryEntity.kt +46 -0
  283. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/data/local/PlaylistEntity.kt +64 -0
  284. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/features/browse/BrowseScreen.kt +1 -0
  285. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/features/settings/SettingsScreen.kt +2 -0
  286. package/templates/android/MediaTemplate/app/src/main/kotlin/com/appship/media/mock/MockDataProvider.kt +291 -62
  287. package/templates/android/MediaTemplate/app/src/test/kotlin/com/appship/media/DataRepositoryTest.kt +41 -0
  288. package/templates/android/MediaTemplate/gradle/libs.versions.toml +4 -0
  289. package/templates/android/MediaTemplate/tests/01_launch_home.yaml +18 -8
  290. package/templates/android/MediaTemplate/tests/02_tab_navigation.yaml +32 -9
  291. package/templates/android/MediaTemplate/tests/05_search.yaml +28 -1
  292. package/templates/android/MediaTemplate/tests/06_playlist_management.yaml +37 -0
  293. package/templates/android/MediaTemplate/tests/07_downloads_settings.yaml +34 -0
  294. package/templates/android/MediaTemplate/tests/08_full_e2e.yaml +38 -24
  295. package/templates/android/ReferenceTemplate/app/build.gradle.kts +5 -0
  296. package/templates/android/ReferenceTemplate/app/src/main/AndroidManifest.xml +3 -14
  297. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/ReferenceApplication.kt +16 -0
  298. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/DataRepository.kt +26 -0
  299. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/DataSourceResolver.kt +25 -0
  300. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/Models.kt +61 -0
  301. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/local/AppDao.kt +57 -0
  302. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/local/AppDatabase.kt +37 -0
  303. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/local/LocalStorageProvider.kt +277 -0
  304. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/local/NoteEntity.kt +57 -0
  305. package/templates/android/ReferenceTemplate/app/src/main/kotlin/com/appship/reference/data/local/TaskEntity.kt +58 -0
  306. package/templates/android/ReferenceTemplate/app/src/main/res/values/themes.xml +1 -1
  307. package/templates/android/ReferenceTemplate/app/src/test/kotlin/com/appship/reference/DataRepositoryTest.kt +17 -0
  308. package/templates/android/ReferenceTemplate/gradle/libs.versions.toml +4 -0
  309. package/templates/android/ReferenceTemplate/tests/01_launch_consent.yaml +56 -14
  310. package/templates/android/ReferenceTemplate/tests/02_biometric_auth.yaml +58 -11
  311. package/templates/android/ReferenceTemplate/tests/03_home_navigation.yaml +60 -32
  312. package/templates/android/ReferenceTemplate/tests/05_push_notifications.yaml +30 -32
  313. package/templates/android/ReferenceTemplate/tests/06_feedback_support.yaml +24 -50
  314. package/templates/android/ReferenceTemplate/tests/07_settings.yaml +89 -37
  315. package/templates/android/ReferenceTemplate/tests/08_full_e2e.yaml +132 -56
  316. package/templates/android/ShopTemplate/TESTING_MANIFEST.md +2 -0
  317. package/templates/android/ShopTemplate/app/build.gradle.kts +5 -0
  318. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/ShopApplication.kt +6 -0
  319. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/core/components/EmptyStateView.kt +137 -0
  320. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/DataSourceResolver.kt +1 -2
  321. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/AppDao.kt +119 -0
  322. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/AppDatabase.kt +40 -0
  323. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/BannerEntity.kt +45 -0
  324. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/CategoryEntity.kt +39 -0
  325. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/LocalStorageProvider.kt +333 -0
  326. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/OrderEntity.kt +108 -0
  327. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/ProductEntity.kt +89 -0
  328. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/data/local/ReviewEntity.kt +73 -0
  329. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/features/cart/CartScreen.kt +6 -15
  330. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/features/home/HomeViewModel.kt +5 -4
  331. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/features/products/ProductListScreen.kt +2 -3
  332. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/features/products/ProductViewModels.kt +2 -4
  333. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/features/wishlist/WishlistScreen.kt +5 -13
  334. package/templates/android/ShopTemplate/app/src/main/kotlin/com/appship/shop/mock/MockDataProvider.kt +2 -1
  335. package/templates/android/ShopTemplate/app/src/test/kotlin/com/appship/shop/DataRepositoryTest.kt +41 -0
  336. package/templates/android/ShopTemplate/gradle/libs.versions.toml +4 -0
  337. package/templates/android/ShopTemplate/tests/01_launch_home.yaml +25 -5
  338. package/templates/android/ShopTemplate/tests/02_tab_navigation.yaml +35 -9
  339. package/templates/android/ShopTemplate/tests/03_product_detail.yaml +43 -0
  340. package/templates/android/ShopTemplate/tests/04_cart_checkout.yaml +49 -0
  341. package/templates/android/ShopTemplate/tests/05_search_filter.yaml +37 -4
  342. package/templates/android/ShopTemplate/tests/06_wishlist.yaml +32 -3
  343. package/templates/android/ShopTemplate/tests/07_profile_settings.yaml +39 -3
  344. package/templates/android/ShopTemplate/tests/08_full_e2e.yaml +49 -11
  345. package/templates/android/Skeleton/TESTING_MANIFEST.md +2 -1
  346. package/templates/android/Skeleton/app/build.gradle.kts +3 -0
  347. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/SkeletonApplication.kt +10 -1
  348. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/core/components/EmptyStateView.kt +137 -0
  349. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/data/DataSourceResolver.kt +2 -4
  350. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/data/local/AppDao.kt +62 -0
  351. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/data/local/AppDatabase.kt +34 -0
  352. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/data/local/CategoryEntity.kt +32 -0
  353. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/data/local/ItemEntity.kt +59 -0
  354. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/data/local/LocalStorageProvider.kt +153 -0
  355. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/features/explore/ExploreScreen.kt +23 -12
  356. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/features/favorites/FavoritesScreen.kt +9 -23
  357. package/templates/android/Skeleton/app/src/main/kotlin/com/appship/skeleton/features/home/HomeScreen.kt +44 -30
  358. package/templates/android/Skeleton/app/src/test/kotlin/com/appship/skeleton/DataRepositoryTest.kt +100 -0
  359. package/templates/android/Skeleton/gradle/libs.versions.toml +4 -0
  360. package/templates/android/Skeleton/tests/01_app_launch.yaml +1 -2
  361. package/templates/android/Skeleton/tests/02_tab_navigation.yaml +6 -11
  362. package/templates/android/Skeleton/tests/03_detail_screen.yaml +20 -0
  363. package/templates/android/Skeleton/tests/04_favorites.yaml +17 -0
  364. package/templates/android/Skeleton/tests/05_explore_search.yaml +12 -0
  365. package/templates/android/Skeleton/tests/06_create_item.yaml +19 -0
  366. package/templates/android/Skeleton/tests/07_profile.yaml +17 -0
  367. package/templates/android/Skeleton/tests/08_full_e2e.yaml +36 -0
  368. package/templates/android/SocialTemplate/TESTING_MANIFEST.md +6 -0
  369. package/templates/android/SocialTemplate/app/build.gradle.kts +3 -0
  370. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/SocialApplication.kt +2 -0
  371. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/core/components/EmptyStateView.kt +137 -0
  372. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/DataSourceResolver.kt +1 -2
  373. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/AppDao.kt +139 -0
  374. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/AppDatabase.kt +42 -0
  375. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/CommentEntity.kt +60 -0
  376. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/ConversationEntity.kt +60 -0
  377. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/LocalStorageProvider.kt +295 -0
  378. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/MessageEntity.kt +63 -0
  379. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/NotificationEntity.kt +64 -0
  380. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/PostEntity.kt +89 -0
  381. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/StoryEntity.kt +50 -0
  382. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/data/local/UserEntity.kt +64 -0
  383. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/features/createpost/CreatePostScreen.kt +1 -1
  384. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/features/feed/FeedScreen.kt +1 -1
  385. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/features/messages/MessagesScreen.kt +25 -15
  386. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/features/notifications/NotificationsScreen.kt +17 -7
  387. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/features/search/SearchScreen.kt +20 -12
  388. package/templates/android/SocialTemplate/app/src/main/kotlin/com/appship/social/mock/MockDataProvider.kt +18 -18
  389. package/templates/android/SocialTemplate/app/src/test/kotlin/com/appship/social/DataRepositoryTest.kt +41 -0
  390. package/templates/android/SocialTemplate/gradle/libs.versions.toml +4 -0
  391. package/templates/android/SocialTemplate/tests/01_launch_feed.yaml +16 -7
  392. package/templates/android/SocialTemplate/tests/02_tab_navigation.yaml +38 -6
  393. package/templates/android/SocialTemplate/tests/03_post_interaction.yaml +35 -6
  394. package/templates/android/SocialTemplate/tests/04_create_post.yaml +31 -2
  395. package/templates/android/SocialTemplate/tests/05_search_follow.yaml +32 -5
  396. package/templates/android/SocialTemplate/tests/06_profile_settings.yaml +50 -0
  397. package/templates/android/SocialTemplate/tests/07_messages.yaml +36 -2
  398. package/templates/android/SocialTemplate/tests/08_full_e2e.yaml +47 -7
  399. package/templates/android/TaskTemplate/TESTING_MANIFEST.md +5 -0
  400. package/templates/android/TaskTemplate/app/build.gradle.kts +9 -0
  401. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/TaskApplication.kt +2 -0
  402. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/core/components/EmptyStateView.kt +137 -0
  403. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/DataRepository.kt +3 -0
  404. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/DataSourceResolver.kt +1 -2
  405. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/AppDao.kt +105 -0
  406. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/AppDatabase.kt +39 -0
  407. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/KanbanColumnEntity.kt +41 -0
  408. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/LocalStorageProvider.kt +204 -0
  409. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/ProjectEntity.kt +50 -0
  410. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/TagEntity.kt +29 -0
  411. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/data/local/TaskEntity.kt +79 -0
  412. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/features/inbox/InboxScreen.kt +11 -22
  413. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/features/kanban/KanbanBoardScreen.kt +1 -0
  414. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/features/projects/ProjectDetailScreen.kt +28 -14
  415. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/features/projects/ProjectListScreen.kt +11 -22
  416. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/features/search/SearchScreen.kt +6 -3
  417. package/templates/android/TaskTemplate/app/src/main/kotlin/com/appship/task/mock/MockDataProvider.kt +8 -4
  418. package/templates/android/TaskTemplate/app/src/test/kotlin/com/appship/task/DataRepositoryTest.kt +41 -0
  419. package/templates/android/TaskTemplate/gradle/libs.versions.toml +6 -0
  420. package/templates/android/TaskTemplate/tests/07_search_filter.yaml +70 -6
  421. package/templates/android/TrackTemplate/TESTING_MANIFEST.md +4 -0
  422. package/templates/android/TrackTemplate/app/build.gradle.kts +6 -1
  423. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/TrackApplication.kt +2 -0
  424. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/core/components/EmptyStateView.kt +89 -0
  425. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/DataRepository.kt +1 -1
  426. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/DataSourceResolver.kt +1 -2
  427. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/AchievementEntity.kt +53 -0
  428. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/AppDao.kt +93 -0
  429. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/AppDatabase.kt +39 -0
  430. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/HabitEntity.kt +75 -0
  431. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/HabitEntryEntity.kt +50 -0
  432. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/LocalStorageProvider.kt +182 -0
  433. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/data/local/StreakEntity.kt +43 -0
  434. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/features/dashboard/TodayScreen.kt +10 -39
  435. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/features/habits/HabitsListScreen.kt +8 -35
  436. package/templates/android/TrackTemplate/app/src/main/kotlin/com/appship/track/mock/MockDataProvider.kt +3 -3
  437. package/templates/android/TrackTemplate/app/src/test/kotlin/com/appship/track/DataRepositoryTest.kt +41 -0
  438. package/templates/android/TrackTemplate/gradle/libs.versions.toml +6 -0
  439. package/templates/android/TrackTemplate/tests/01_launch_today.yaml +44 -5
  440. package/templates/android/TrackTemplate/tests/02_tab_navigation.yaml +79 -16
  441. package/templates/android/TrackTemplate/tests/03_habit_toggle.yaml +65 -4
  442. package/templates/android/TrackTemplate/tests/04_add_habit.yaml +98 -3
  443. package/templates/android/TrackTemplate/tests/06_dashboard.yaml +54 -4
  444. package/templates/android/TrackTemplate/tests/07_settings.yaml +81 -4
  445. package/templates/android/TrackTemplate/tests/08_full_e2e.yaml +116 -18
  446. package/templates/ios/BookTemplate/BookTemplate/Core/EmptyStateView.swift +130 -0
  447. package/templates/ios/BookTemplate/BookTemplate/Core/Strings.swift +27 -0
  448. package/templates/ios/BookTemplate/BookTemplate/Data/DataSourceResolver.swift +1 -2
  449. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/BookingEntity.swift +53 -0
  450. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/BusinessHoursEntity.swift +33 -0
  451. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/CoreDataStack.swift +345 -0
  452. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/LocalStorageProvider.swift +222 -0
  453. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/ProviderEntity.swift +88 -0
  454. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/ReviewEntity.swift +66 -0
  455. package/templates/ios/BookTemplate/BookTemplate/Data/LocalStorage/ServiceEntity.swift +37 -0
  456. package/templates/ios/BookTemplate/BookTemplate/Features/Calendar/BookingsView.swift +16 -21
  457. package/templates/ios/BookTemplate/BookTemplate/Features/Discovery/SearchView.swift +1 -21
  458. package/templates/ios/BookTemplate/BookTemplate/Features/Profile/FavoritesView.swift +6 -27
  459. package/templates/ios/BookTemplate/BookTemplate/MockData/MockDataProvider.swift +8 -0
  460. package/templates/ios/BookTemplate/BookTemplate.xcodeproj/project.pbxproj +56 -0
  461. package/templates/ios/BookTemplate/BookTemplateTests/DataRepositoryTests.swift +26 -0
  462. package/templates/ios/BookTemplate/TESTING_MANIFEST.md +4 -0
  463. package/templates/ios/BookTemplate/tests/01_launch_discover.yaml +14 -5
  464. package/templates/ios/BookTemplate/tests/02_tab_navigation.yaml +23 -2
  465. package/templates/ios/BookTemplate/tests/03_provider_detail.yaml +37 -5
  466. package/templates/ios/BookTemplate/tests/04_booking_detail.yaml +48 -0
  467. package/templates/ios/BookTemplate/tests/05_booking_create_flow.yaml +42 -0
  468. package/templates/ios/BookTemplate/tests/06_search_filter.yaml +48 -0
  469. package/templates/ios/BookTemplate/tests/07_profile_settings.yaml +37 -0
  470. package/templates/ios/BookTemplate/tests/08_full_e2e.yaml +59 -12
  471. package/templates/ios/ChatTemplate/ChatTemplate/Core/EmptyStateView.swift +130 -0
  472. package/templates/ios/ChatTemplate/ChatTemplate/Core/Strings.swift +27 -0
  473. package/templates/ios/ChatTemplate/ChatTemplate/Data/DataSourceResolver.swift +1 -2
  474. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/CallEntity.swift +64 -0
  475. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/ContactEntity.swift +35 -0
  476. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/ConversationEntity.swift +82 -0
  477. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/CoreDataStack.swift +351 -0
  478. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/LocalStorageProvider.swift +257 -0
  479. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/MessageEntity.swift +77 -0
  480. package/templates/ios/ChatTemplate/ChatTemplate/Data/LocalStorage/UserEntity.swift +47 -0
  481. package/templates/ios/ChatTemplate/ChatTemplate/Features/Calls/CallsView.swift +16 -7
  482. package/templates/ios/ChatTemplate/ChatTemplate/Features/Contacts/ContactsView.swift +16 -7
  483. package/templates/ios/ChatTemplate/ChatTemplate/Features/Conversations/ConversationsView.swift +31 -22
  484. package/templates/ios/ChatTemplate/ChatTemplate/MockData/MockDataProvider.swift +1 -1
  485. package/templates/ios/ChatTemplate/ChatTemplate.xcodeproj/project.pbxproj +71 -0
  486. package/templates/ios/ChatTemplate/ChatTemplateTests/DataRepositoryTests.swift +26 -0
  487. package/templates/ios/ChatTemplate/TESTING_MANIFEST.md +3 -0
  488. package/templates/ios/ChatTemplate/tests/01_launch_chats.yaml +26 -7
  489. package/templates/ios/ChatTemplate/tests/02_tab_navigation.yaml +61 -12
  490. package/templates/ios/ChatTemplate/tests/03_conversation_chat.yaml +38 -6
  491. package/templates/ios/ChatTemplate/tests/04_new_chat.yaml +57 -4
  492. package/templates/ios/ChatTemplate/tests/05_calls.yaml +39 -4
  493. package/templates/ios/DashTemplate/DashTemplate/Core/EmptyStateView.swift +130 -0
  494. package/templates/ios/DashTemplate/DashTemplate/Core/Strings.swift +27 -0
  495. package/templates/ios/DashTemplate/DashTemplate/Data/DataSourceResolver.swift +19 -0
  496. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/AlertEntity.swift +35 -0
  497. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/CoreDataStack.swift +260 -0
  498. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/DataPointEntity.swift +28 -0
  499. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/DataSourceEntity.swift +32 -0
  500. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/LocalStorageProvider.swift +312 -0
  501. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/MetricEntity.swift +56 -0
  502. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/ReportEntity.swift +51 -0
  503. package/templates/ios/DashTemplate/DashTemplate/Data/LocalStorage/WidgetEntity.swift +98 -0
  504. package/templates/ios/DashTemplate/DashTemplate/Features/Alerts/AlertsView.swift +31 -15
  505. package/templates/ios/DashTemplate/DashTemplate/Features/Dashboard/DashboardView.swift +32 -21
  506. package/templates/ios/DashTemplate/DashTemplate/Features/DataSources/DataSourcesView.swift +24 -13
  507. package/templates/ios/DashTemplate/DashTemplate/Features/Reports/ReportsView.swift +23 -11
  508. package/templates/ios/DashTemplate/DashTemplate.xcodeproj/project.pbxproj +68 -0
  509. package/templates/ios/DashTemplate/DashTemplateTests/DataRepositoryTests.swift +27 -0
  510. package/templates/ios/DashTemplate/TESTING_MANIFEST.md +6 -0
  511. package/templates/ios/DashTemplate/tests/01_launch_dashboard.yaml +16 -3
  512. package/templates/ios/DashTemplate/tests/02_tab_navigation.yaml +35 -13
  513. package/templates/ios/FamilyTemplate/FamilyTemplate/Core/EmptyStateView.swift +130 -0
  514. package/templates/ios/FamilyTemplate/FamilyTemplate/Core/Strings.swift +27 -0
  515. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/DataRepository.swift +63 -0
  516. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/DataSourceResolver.swift +14 -0
  517. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/CalendarEventEntity.swift +59 -0
  518. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/ChoreEntity.swift +53 -0
  519. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/CoreDataStack.swift +385 -0
  520. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/FamilyMemberEntity.swift +56 -0
  521. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/LocalStorageProvider.swift +388 -0
  522. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/LocationUpdateEntity.swift +35 -0
  523. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/MilestoneEntity.swift +41 -0
  524. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/PhotoEntity.swift +56 -0
  525. package/templates/ios/FamilyTemplate/FamilyTemplate/Data/LocalStorage/RewardEntity.swift +44 -0
  526. package/templates/ios/FamilyTemplate/FamilyTemplate/Features/Calendar/CalendarView.swift +4 -5
  527. package/templates/ios/FamilyTemplate/FamilyTemplate/Features/Chores/ChoreBoardView.swift +4 -29
  528. package/templates/ios/FamilyTemplate/FamilyTemplate/Features/Gallery/GalleryView.swift +16 -7
  529. package/templates/ios/FamilyTemplate/FamilyTemplate/Features/Members/MembersListView.swift +14 -5
  530. package/templates/ios/FamilyTemplate/FamilyTemplate/Features/Rewards/RewardsView.swift +4 -5
  531. package/templates/ios/FamilyTemplate/FamilyTemplate.xcodeproj/project.pbxproj +72 -0
  532. package/templates/ios/FamilyTemplate/FamilyTemplateTests/DataRepositoryTests.swift +26 -0
  533. package/templates/ios/FamilyTemplate/TESTING_MANIFEST.md +7 -0
  534. package/templates/ios/FamilyTemplate/tests/01_launch_hub.yaml +34 -14
  535. package/templates/ios/FamilyTemplate/tests/02_tab_navigation.yaml +62 -19
  536. package/templates/ios/FamilyTemplate/tests/03_chore_complete.yaml +38 -19
  537. package/templates/ios/FamilyTemplate/tests/04_add_chore.yaml +50 -14
  538. package/templates/ios/FamilyTemplate/tests/05_rewards.yaml +49 -17
  539. package/templates/ios/FamilyTemplate/tests/06_calendar.yaml +56 -14
  540. package/templates/ios/FamilyTemplate/tests/07_gallery.yaml +55 -20
  541. package/templates/ios/FamilyTemplate/tests/08_full_e2e.yaml +131 -35
  542. package/templates/ios/FinanceTemplate/Features/Accounts/AccountsView.swift +4 -4
  543. package/templates/ios/FinanceTemplate/FinanceTemplate/Core/EmptyStateView.swift +130 -0
  544. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/DataRepository.swift +11 -30
  545. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/DataSourceResolver.swift +1 -2
  546. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/AccountEntity.swift +51 -0
  547. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/BillEntity.swift +57 -0
  548. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/BudgetEntity.swift +48 -0
  549. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/CategoryEntity.swift +30 -0
  550. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/CoreDataStack.swift +468 -0
  551. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/GoalEntity.swift +54 -0
  552. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/InsightEntity.swift +41 -0
  553. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/LocalStorageProvider.swift +420 -0
  554. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/LocalStorage/TransactionEntity.swift +60 -0
  555. package/templates/ios/FinanceTemplate/FinanceTemplate/Data/SyncManager.swift +3 -3
  556. package/templates/ios/FinanceTemplate/FinanceTemplate/Features/Budgets/BudgetsView.swift +10 -3
  557. package/templates/ios/FinanceTemplate/FinanceTemplate/Features/Goals/GoalsView.swift +11 -4
  558. package/templates/ios/FinanceTemplate/FinanceTemplate/MockData/MockDataProvider.swift +6 -6
  559. package/templates/ios/FinanceTemplate/FinanceTemplate/Models/Models.swift +41 -0
  560. package/templates/ios/FinanceTemplate/FinanceTemplate.xcodeproj/project.pbxproj +75 -0
  561. package/templates/ios/FinanceTemplate/FinanceTemplateTests/DataRepositoryTests.swift +26 -0
  562. package/templates/ios/FinanceTemplate/FinanceTemplateTests/MockDataProviderTests.swift +6 -6
  563. package/templates/ios/FinanceTemplate/TESTING_MANIFEST.md +6 -0
  564. package/templates/ios/FinanceTemplate/tests/01_launch_home.yaml +16 -6
  565. package/templates/ios/FinanceTemplate/tests/02_tab_navigation.yaml +41 -5
  566. package/templates/ios/FinanceTemplate/tests/03_transaction_detail.yaml +39 -0
  567. package/templates/ios/FinanceTemplate/tests/05_add_transaction.yaml +55 -0
  568. package/templates/ios/GameTemplate/GameTemplate/Core/Components/EmptyStateView.swift +59 -0
  569. package/templates/ios/GameTemplate/GameTemplate/Core/Strings.swift +16 -0
  570. package/templates/ios/GameTemplate/GameTemplate/Data/DataSourceResolver.swift +1 -1
  571. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/AchievementEntity.swift +36 -0
  572. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/CoreDataStack.swift +316 -0
  573. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/DailyChallengeEntity.swift +60 -0
  574. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/GameSessionEntity.swift +36 -0
  575. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/LeaderboardEntryEntity.swift +124 -0
  576. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/LevelEntity.swift +39 -0
  577. package/templates/ios/GameTemplate/GameTemplate/Data/LocalStorage/ShopItemEntity.swift +39 -0
  578. package/templates/ios/GameTemplate/GameTemplate/Features/Achievements/AchievementsView.swift +10 -4
  579. package/templates/ios/GameTemplate/GameTemplate/Features/DailyChallenge/DailyChallengeView.swift +1 -1
  580. package/templates/ios/GameTemplate/GameTemplate/Features/Home/HomeMenuView.swift +16 -11
  581. package/templates/ios/GameTemplate/GameTemplate/Features/Leaderboard/LeaderboardView.swift +11 -7
  582. package/templates/ios/GameTemplate/GameTemplate/Features/Profile/ProfileView.swift +2 -2
  583. package/templates/ios/GameTemplate/GameTemplate/Features/Results/ResultsView.swift +2 -2
  584. package/templates/ios/GameTemplate/GameTemplate/Features/Shop/ShopView.swift +11 -7
  585. package/templates/ios/GameTemplate/GameTemplate.xcodeproj/project.pbxproj +56 -0
  586. package/templates/ios/GameTemplate/GameTemplateTests/DataRepositoryTests.swift +26 -0
  587. package/templates/ios/GameTemplate/TESTING_MANIFEST.md +2 -0
  588. package/templates/ios/GameTemplate/tests/01_launch_home.yaml +13 -2
  589. package/templates/ios/GameTemplate/tests/02_tab_navigation.yaml +31 -1
  590. package/templates/ios/GameTemplate/tests/03_game_play.yaml +48 -8
  591. package/templates/ios/GameTemplate/tests/04_leaderboard.yaml +36 -4
  592. package/templates/ios/GameTemplate/tests/05_shop.yaml +33 -4
  593. package/templates/ios/GameTemplate/tests/06_achievements.yaml +35 -2
  594. package/templates/ios/GameTemplate/tests/07_profile_settings.yaml +38 -2
  595. package/templates/ios/GameTemplate/tests/08_full_e2e.yaml +98 -26
  596. package/templates/ios/HealthTemplate/HealthTemplate/Core/Components/EmptyStateView.swift +59 -0
  597. package/templates/ios/HealthTemplate/HealthTemplate/Core/Strings.swift +16 -0
  598. package/templates/ios/HealthTemplate/HealthTemplate/Data/DataSourceResolver.swift +19 -0
  599. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/BodyMeasurementEntity.swift +30 -0
  600. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/CoreDataStack.swift +377 -0
  601. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/DailyGoalEntity.swift +30 -0
  602. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/ExerciseEntity.swift +45 -0
  603. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/HealthMetricEntity.swift +30 -0
  604. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/LocalStorageProvider.swift +398 -0
  605. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/MealEntity.swift +59 -0
  606. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/WaterEntryEntity.swift +27 -0
  607. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/WorkoutEntity.swift +59 -0
  608. package/templates/ios/HealthTemplate/HealthTemplate/Data/LocalStorage/WorkoutSessionEntity.swift +52 -0
  609. package/templates/ios/HealthTemplate/HealthTemplate/Features/Dashboard/DashboardView.swift +7 -7
  610. package/templates/ios/HealthTemplate/HealthTemplate/Features/Navigation/MainTabView.swift +1 -0
  611. package/templates/ios/HealthTemplate/HealthTemplate/Features/Nutrition/MealLogView.swift +2 -1
  612. package/templates/ios/HealthTemplate/HealthTemplate/Features/Nutrition/NutritionLogView.swift +3 -4
  613. package/templates/ios/HealthTemplate/HealthTemplate/Features/Onboarding/OnboardingView.swift +1 -0
  614. package/templates/ios/HealthTemplate/HealthTemplate/Features/Profile/ProfileView.swift +9 -8
  615. package/templates/ios/HealthTemplate/HealthTemplate/Features/Progress/ProgressChartsView.swift +3 -2
  616. package/templates/ios/HealthTemplate/HealthTemplate/Features/Settings/SettingsView.swift +1 -0
  617. package/templates/ios/HealthTemplate/HealthTemplate/Features/Workouts/ExerciseDetailView.swift +1 -0
  618. package/templates/ios/HealthTemplate/HealthTemplate/Features/Workouts/WorkoutListView.swift +10 -6
  619. package/templates/ios/HealthTemplate/HealthTemplate/Features/Workouts/WorkoutPlayerView.swift +4 -3
  620. package/templates/ios/HealthTemplate/HealthTemplate.xcodeproj/project.pbxproj +83 -0
  621. package/templates/ios/HealthTemplate/HealthTemplateTests/DataRepositoryTests.swift +26 -0
  622. package/templates/ios/HealthTemplate/tests/01_launch_dashboard.yaml +24 -11
  623. package/templates/ios/HealthTemplate/tests/02_tab_navigation.yaml +17 -6
  624. package/templates/ios/HealthTemplate/tests/03_workout_browse.yaml +56 -0
  625. package/templates/ios/HealthTemplate/tests/04_workout_player.yaml +48 -8
  626. package/templates/ios/HealthTemplate/tests/05_meal_logging.yaml +44 -11
  627. package/templates/ios/HealthTemplate/tests/07_profile_settings.yaml +30 -9
  628. package/templates/ios/HealthTemplate/tests/08_full_e2e.yaml +84 -16
  629. package/templates/ios/LearnTemplate/LearnTemplate/Core/Components/EmptyStateView.swift +59 -0
  630. package/templates/ios/LearnTemplate/LearnTemplate/Core/Strings.swift +16 -0
  631. package/templates/ios/LearnTemplate/LearnTemplate/Data/DataRepository.swift +52 -0
  632. package/templates/ios/LearnTemplate/LearnTemplate/Data/DataSourceResolver.swift +19 -0
  633. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/AchievementEntity.swift +33 -0
  634. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/CategoryEntity.swift +27 -0
  635. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/CoreDataStack.swift +270 -0
  636. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/CourseEntity.swift +108 -0
  637. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/FlashcardDeckEntity.swift +62 -0
  638. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/LeaderboardEntryEntity.swift +36 -0
  639. package/templates/ios/LearnTemplate/LearnTemplate/Data/LocalStorage/LocalStorageProvider.swift +325 -0
  640. package/templates/ios/LearnTemplate/LearnTemplate/Features/Courses/CourseDetailView.swift +9 -4
  641. package/templates/ios/LearnTemplate/LearnTemplate/Features/Courses/CourseListView.swift +9 -4
  642. package/templates/ios/LearnTemplate/LearnTemplate/Features/Flashcards/FlashcardView.swift +1 -0
  643. package/templates/ios/LearnTemplate/LearnTemplate/Features/Leaderboard/LeaderboardView.swift +1 -0
  644. package/templates/ios/LearnTemplate/LearnTemplate/Features/Lessons/LessonPlayerView.swift +1 -0
  645. package/templates/ios/LearnTemplate/LearnTemplate/Features/Onboarding/OnboardingView.swift +8 -3
  646. package/templates/ios/LearnTemplate/LearnTemplate/Features/Profile/ProfileView.swift +1 -0
  647. package/templates/ios/LearnTemplate/LearnTemplate/Features/Progress/ProgressDashboardView.swift +1 -0
  648. package/templates/ios/LearnTemplate/LearnTemplate/Features/Quiz/QuizView.swift +1 -0
  649. package/templates/ios/LearnTemplate/LearnTemplate/Features/Settings/SettingsView.swift +1 -0
  650. package/templates/ios/LearnTemplate/LearnTemplate/MockData/MockDataProvider.swift +1 -1
  651. package/templates/ios/LearnTemplate/LearnTemplate.xcodeproj/project.pbxproj +56 -0
  652. package/templates/ios/LearnTemplate/LearnTemplateTests/DataRepositoryTests.swift +26 -0
  653. package/templates/ios/LearnTemplate/tests/01_launch_home.yaml +16 -2
  654. package/templates/ios/LearnTemplate/tests/02_tab_navigation.yaml +33 -6
  655. package/templates/ios/LearnTemplate/tests/03_course_detail.yaml +29 -7
  656. package/templates/ios/LearnTemplate/tests/04_quiz_flow.yaml +32 -18
  657. package/templates/ios/LearnTemplate/tests/05_flashcard_flip.yaml +45 -8
  658. package/templates/ios/LearnTemplate/tests/06_progress_stats.yaml +28 -3
  659. package/templates/ios/MapTemplate/MapTemplate/App/AppConfig.swift +9 -0
  660. package/templates/ios/MapTemplate/MapTemplate/Core/Components/EmptyStateView.swift +59 -0
  661. package/templates/ios/MapTemplate/MapTemplate/Core/Strings.swift +16 -0
  662. package/templates/ios/MapTemplate/MapTemplate/Data/DataRepository.swift +36 -0
  663. package/templates/ios/MapTemplate/MapTemplate/Data/DataSourceResolver.swift +1 -2
  664. package/templates/ios/MapTemplate/MapTemplate/Data/LocalStorage/CoreDataStack.swift +203 -0
  665. package/templates/ios/MapTemplate/MapTemplate/Data/LocalStorage/LocalStorageProvider.swift +237 -0
  666. package/templates/ios/MapTemplate/MapTemplate/Data/LocalStorage/PlaceEntity.swift +111 -0
  667. package/templates/ios/MapTemplate/MapTemplate/Data/LocalStorage/ReviewEntity.swift +40 -0
  668. package/templates/ios/MapTemplate/MapTemplate/Features/Favorites/FavoritesView.swift +3 -14
  669. package/templates/ios/MapTemplate/MapTemplate/Features/Filters/FiltersView.swift +1 -0
  670. package/templates/ios/MapTemplate/MapTemplate/Features/Map/MapView.swift +1 -0
  671. package/templates/ios/MapTemplate/MapTemplate/Features/Onboarding/OnboardingView.swift +1 -0
  672. package/templates/ios/MapTemplate/MapTemplate/Features/PlaceDetail/PlaceDetailView.swift +8 -3
  673. package/templates/ios/MapTemplate/MapTemplate/Features/PlaceList/PlaceListView.swift +3 -9
  674. package/templates/ios/MapTemplate/MapTemplate/Features/Profile/ProfileView.swift +1 -0
  675. package/templates/ios/MapTemplate/MapTemplate/Features/Route/RouteView.swift +1 -0
  676. package/templates/ios/MapTemplate/MapTemplate/Features/Search/SearchView.swift +3 -10
  677. package/templates/ios/MapTemplate/MapTemplate/Features/Settings/SettingsView.swift +1 -0
  678. package/templates/ios/MapTemplate/MapTemplate/MockData/MockDataProvider.swift +1 -1
  679. package/templates/ios/MapTemplate/MapTemplate.xcodeproj/project.pbxproj +44 -0
  680. package/templates/ios/MapTemplate/MapTemplateTests/DataRepositoryTests.swift +25 -0
  681. package/templates/ios/MapTemplate/TESTING_MANIFEST.md +9 -0
  682. package/templates/ios/MapTemplate/tests/01_launch_map.yaml +22 -7
  683. package/templates/ios/MapTemplate/tests/02_tab_navigation.yaml +24 -15
  684. package/templates/ios/MapTemplate/tests/03_map_interaction.yaml +32 -10
  685. package/templates/ios/MapTemplate/tests/04_place_detail.yaml +30 -12
  686. package/templates/ios/MapTemplate/tests/06_profile_settings.yaml +17 -19
  687. package/templates/ios/MapTemplate/tests/07_favorites.yaml +31 -11
  688. package/templates/ios/MapTemplate/tests/08_full_e2e.yaml +45 -20
  689. package/templates/ios/MediaTemplate/MediaTemplate/Core/Components/CommonComponents.swift +2 -1
  690. package/templates/ios/MediaTemplate/MediaTemplate/Core/Components/EmptyStateView.swift +59 -0
  691. package/templates/ios/MediaTemplate/MediaTemplate/Core/Strings.swift +16 -0
  692. package/templates/ios/MediaTemplate/MediaTemplate/Data/DataSourceResolver.swift +1 -2
  693. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/CoreDataStack.swift +333 -0
  694. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/EpisodeEntity.swift +79 -0
  695. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/LocalStorageProvider.swift +393 -0
  696. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/MediaCategoryEntity.swift +36 -0
  697. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/MediaItemEntity.swift +82 -0
  698. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/PlaybackHistoryEntity.swift +51 -0
  699. package/templates/ios/MediaTemplate/MediaTemplate/Data/LocalStorage/PlaylistEntity.swift +66 -0
  700. package/templates/ios/MediaTemplate/MediaTemplate/Features/Browse/BrowseView.swift +10 -3
  701. package/templates/ios/MediaTemplate/MediaTemplate/Features/Detail/DetailView.swift +14 -7
  702. package/templates/ios/MediaTemplate/MediaTemplate/Features/Home/HomeView.swift +14 -9
  703. package/templates/ios/MediaTemplate/MediaTemplate/Features/Library/LibraryView.swift +10 -5
  704. package/templates/ios/MediaTemplate/MediaTemplate/Features/Onboarding/OnboardingView.swift +1 -0
  705. package/templates/ios/MediaTemplate/MediaTemplate/Features/Player/PlayerFullView.swift +3 -1
  706. package/templates/ios/MediaTemplate/MediaTemplate/Features/Settings/SettingsView.swift +1 -0
  707. package/templates/ios/MediaTemplate/MediaTemplate.xcodeproj/project.pbxproj +56 -0
  708. package/templates/ios/MediaTemplate/MediaTemplateTests/DataRepositoryTests.swift +26 -0
  709. package/templates/ios/MediaTemplate/TESTING_MANIFEST.md +5 -0
  710. package/templates/ios/MediaTemplate/tests/01_launch_home.yaml +22 -6
  711. package/templates/ios/MediaTemplate/tests/02_tab_navigation.yaml +30 -10
  712. package/templates/ios/MediaTemplate/tests/03_media_detail_playback.yaml +45 -0
  713. package/templates/ios/MediaTemplate/tests/04_player_controls.yaml +39 -5
  714. package/templates/ios/MediaTemplate/tests/05_search.yaml +33 -6
  715. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Core/EmptyStateView.swift +130 -0
  716. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Core/Strings.swift +2 -1
  717. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Data/DataSourceResolver.swift +6 -2
  718. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Data/LocalStorage/CoreDataStack.swift +148 -0
  719. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Data/LocalStorage/LocalStorageProvider.swift +206 -0
  720. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Data/LocalStorage/NoteEntity.swift +62 -0
  721. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Data/LocalStorage/TaskEntity.swift +56 -0
  722. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Features/EmptyStates/EmptyStateService.swift +16 -4
  723. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Features/EmptyStates/EmptyStatesStrings.swift +1 -0
  724. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Features/Home/HomeView.swift +1 -1
  725. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Features/Notes/NotesView.swift +3 -3
  726. package/templates/ios/ReferenceTemplate/ReferenceTemplate/Features/Tasks/TaskListView.swift +3 -3
  727. package/templates/ios/ReferenceTemplate/ReferenceTemplate.xcodeproj/project.pbxproj +48 -4
  728. package/templates/ios/ReferenceTemplate/ReferenceTemplateTests/DataRepositoryTests.swift +26 -0
  729. package/templates/ios/ReferenceTemplate/TESTING_MANIFEST.md +2 -0
  730. package/templates/ios/ReferenceTemplate/tests/01_launch_consent.yaml +62 -6
  731. package/templates/ios/ReferenceTemplate/tests/07_paywall.yaml +58 -6
  732. package/templates/ios/ReferenceTemplate/tests/08_push_notifications.yaml +37 -6
  733. package/templates/ios/ReferenceTemplate/tests/15_full_e2e.yaml +175 -12
  734. package/templates/ios/ShopTemplate/ShopTemplate/Core/Components/CommonComponents.swift +5 -48
  735. package/templates/ios/{ReferenceTemplate/ReferenceTemplate/Features/EmptyStates → ShopTemplate/ShopTemplate/Core}/EmptyStateView.swift +39 -40
  736. package/templates/ios/ShopTemplate/ShopTemplate/Core/Strings.swift +21 -0
  737. package/templates/ios/ShopTemplate/ShopTemplate/Data/DataRepository.swift +48 -0
  738. package/templates/ios/ShopTemplate/ShopTemplate/Data/DataSourceResolver.swift +1 -2
  739. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/BannerEntity.swift +41 -0
  740. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/CategoryEntity.swift +39 -0
  741. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/CoreDataStack.swift +365 -0
  742. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/LocalStorageProvider.swift +304 -0
  743. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/OrderEntity.swift +124 -0
  744. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/ProductEntity.swift +104 -0
  745. package/templates/ios/ShopTemplate/ShopTemplate/Data/LocalStorage/ReviewEntity.swift +65 -0
  746. package/templates/ios/ShopTemplate/ShopTemplate/Features/Cart/CartView.swift +9 -10
  747. package/templates/ios/ShopTemplate/ShopTemplate/Features/Orders/OrdersView.swift +6 -8
  748. package/templates/ios/ShopTemplate/ShopTemplate/Features/Products/ProductListView.swift +18 -12
  749. package/templates/ios/ShopTemplate/ShopTemplate/Features/Wishlist/WishlistView.swift +6 -10
  750. package/templates/ios/ShopTemplate/ShopTemplate.xcodeproj/project.pbxproj +71 -0
  751. package/templates/ios/ShopTemplate/ShopTemplateTests/DataRepositoryTests.swift +26 -0
  752. package/templates/ios/ShopTemplate/TESTING_MANIFEST.md +2 -0
  753. package/templates/ios/ShopTemplate/tests/01_launch_home.yaml +25 -6
  754. package/templates/ios/ShopTemplate/tests/02_tab_navigation.yaml +35 -9
  755. package/templates/ios/ShopTemplate/tests/03_product_detail.yaml +43 -0
  756. package/templates/ios/ShopTemplate/tests/04_cart_checkout.yaml +49 -0
  757. package/templates/ios/ShopTemplate/tests/05_search_filter.yaml +37 -4
  758. package/templates/ios/ShopTemplate/tests/06_wishlist.yaml +32 -3
  759. package/templates/ios/Skeleton/Skeleton/Core/EmptyStateView.swift +130 -0
  760. package/templates/ios/Skeleton/Skeleton/Core/Strings.swift +29 -0
  761. package/templates/ios/Skeleton/Skeleton/Data/DataSourceResolver.swift +1 -2
  762. package/templates/ios/Skeleton/Skeleton/Data/LocalStorage/CategoryEntity.swift +29 -0
  763. package/templates/ios/Skeleton/Skeleton/Data/LocalStorage/CoreDataStack.swift +128 -0
  764. package/templates/ios/Skeleton/Skeleton/Data/LocalStorage/ItemEntity.swift +62 -0
  765. package/templates/ios/Skeleton/Skeleton/Data/LocalStorage/LocalStorageProvider.swift +144 -0
  766. package/templates/ios/Skeleton/Skeleton/Features/Create/CreateView.swift +2 -2
  767. package/templates/ios/Skeleton/Skeleton/Features/Detail/DetailView.swift +2 -2
  768. package/templates/ios/Skeleton/Skeleton/Features/Explore/ExploreView.swift +2 -6
  769. package/templates/ios/Skeleton/Skeleton/Features/Favorites/FavoritesView.swift +6 -10
  770. package/templates/ios/Skeleton/Skeleton/Features/Favorites/FavoritesViewModel.swift +41 -0
  771. package/templates/ios/Skeleton/Skeleton/Features/Home/HomeView.swift +37 -25
  772. package/templates/ios/Skeleton/Skeleton.xcodeproj/project.pbxproj +56 -0
  773. package/templates/ios/Skeleton/SkeletonTests/DataRepositoryTests.swift +95 -0
  774. package/templates/ios/Skeleton/SkeletonTests/MockDataProviderTests.swift +1 -0
  775. package/templates/ios/Skeleton/TESTING_MANIFEST.md +4 -2
  776. package/templates/ios/Skeleton/tests/01_app_launch.yaml +1 -2
  777. package/templates/ios/Skeleton/tests/02_tab_navigation.yaml +6 -11
  778. package/templates/ios/Skeleton/tests/03_detail_screen.yaml +20 -0
  779. package/templates/ios/Skeleton/tests/04_favorites.yaml +17 -0
  780. package/templates/ios/Skeleton/tests/05_explore_search.yaml +12 -0
  781. package/templates/ios/Skeleton/tests/06_create_item.yaml +19 -0
  782. package/templates/ios/Skeleton/tests/07_profile.yaml +17 -0
  783. package/templates/ios/Skeleton/tests/08_full_e2e.yaml +36 -0
  784. package/templates/ios/SocialTemplate/SocialTemplate/App/AppConfig.swift +9 -0
  785. package/templates/ios/SocialTemplate/SocialTemplate/Core/EmptyStateView.swift +145 -0
  786. package/templates/ios/SocialTemplate/SocialTemplate/Core/Strings.swift +21 -0
  787. package/templates/ios/SocialTemplate/SocialTemplate/Data/DataSourceResolver.swift +1 -2
  788. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/CommentEntity.swift +74 -0
  789. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/ConversationEntity.swift +76 -0
  790. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/CoreDataStack.swift +434 -0
  791. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/LocalStorageProvider.swift +475 -0
  792. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/MessageEntity.swift +62 -0
  793. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/NotificationEntity.swift +92 -0
  794. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/PostEntity.swift +143 -0
  795. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/StoryEntity.swift +66 -0
  796. package/templates/ios/SocialTemplate/SocialTemplate/Data/LocalStorage/UserEntity.swift +54 -0
  797. package/templates/ios/SocialTemplate/SocialTemplate/Features/Feed/FeedView.swift +27 -14
  798. package/templates/ios/SocialTemplate/SocialTemplate/Features/Messages/MessagesView.swift +19 -6
  799. package/templates/ios/SocialTemplate/SocialTemplate/Features/Notifications/NotificationsView.swift +15 -7
  800. package/templates/ios/SocialTemplate/SocialTemplate/Features/Profile/ProfileView.swift +15 -9
  801. package/templates/ios/SocialTemplate/SocialTemplate/Features/Search/SearchView.swift +11 -5
  802. package/templates/ios/SocialTemplate/SocialTemplate.xcodeproj/project.pbxproj +79 -0
  803. package/templates/ios/SocialTemplate/SocialTemplateTests/DataRepositoryTests.swift +26 -0
  804. package/templates/ios/SocialTemplate/TESTING_MANIFEST.md +6 -0
  805. package/templates/ios/SocialTemplate/tests/01_launch_feed.yaml +16 -7
  806. package/templates/ios/SocialTemplate/tests/07_messages.yaml +33 -5
  807. package/templates/ios/TaskTemplate/TESTING_MANIFEST.md +5 -0
  808. package/templates/ios/TaskTemplate/TaskTemplate/Core/EmptyStateView.swift +145 -0
  809. package/templates/ios/TaskTemplate/TaskTemplate/Core/Models.swift +1 -1
  810. package/templates/ios/TaskTemplate/TaskTemplate/Core/Strings.swift +21 -0
  811. package/templates/ios/TaskTemplate/TaskTemplate/Data/DataSourceResolver.swift +1 -2
  812. package/templates/ios/TaskTemplate/TaskTemplate/Data/LocalStorage/CoreDataStack.swift +214 -0
  813. package/templates/ios/TaskTemplate/TaskTemplate/Data/LocalStorage/KanbanColumnEntity.swift +47 -0
  814. package/templates/ios/TaskTemplate/TaskTemplate/Data/LocalStorage/LocalStorageProvider.swift +245 -0
  815. package/templates/ios/TaskTemplate/TaskTemplate/Data/LocalStorage/ProjectEntity.swift +56 -0
  816. package/templates/ios/TaskTemplate/TaskTemplate/Data/LocalStorage/TagEntity.swift +22 -0
  817. package/templates/ios/TaskTemplate/TaskTemplate/Data/LocalStorage/TaskItemEntity.swift +170 -0
  818. package/templates/ios/TaskTemplate/TaskTemplate/Features/Inbox/InboxView.swift +9 -14
  819. package/templates/ios/TaskTemplate/TaskTemplate/Features/Projects/ProjectDetailView.swift +21 -10
  820. package/templates/ios/TaskTemplate/TaskTemplate/Features/Projects/ProjectListView.swift +9 -14
  821. package/templates/ios/TaskTemplate/TaskTemplate/Features/Search/SearchView.swift +10 -21
  822. package/templates/ios/TaskTemplate/TaskTemplate.xcodeproj/project.pbxproj +60 -0
  823. package/templates/ios/TaskTemplate/TaskTemplateTests/DataRepositoryTests.swift +26 -0
  824. package/templates/ios/TaskTemplate/tests/01_launch_inbox.yaml +37 -7
  825. package/templates/ios/TaskTemplate/tests/02_tab_navigation.yaml +63 -21
  826. package/templates/ios/TaskTemplate/tests/03_task_detail.yaml +72 -0
  827. package/templates/ios/TaskTemplate/tests/04_project_detail.yaml +71 -0
  828. package/templates/ios/TaskTemplate/tests/05_task_create_flow.yaml +72 -0
  829. package/templates/ios/TaskTemplate/tests/06_search_filter.yaml +82 -0
  830. package/templates/ios/TaskTemplate/tests/07_settings.yaml +56 -0
  831. package/templates/ios/TaskTemplate/tests/08_full_e2e.yaml +113 -35
  832. package/templates/ios/TrackTemplate/TESTING_MANIFEST.md +4 -0
  833. package/templates/ios/TrackTemplate/TrackTemplate/Core/EmptyStateView.swift +145 -0
  834. package/templates/ios/TrackTemplate/TrackTemplate/Data/DataSourceResolver.swift +1 -2
  835. package/templates/ios/TrackTemplate/TrackTemplate/Data/LocalStorage/AchievementEntity.swift +44 -0
  836. package/templates/ios/TrackTemplate/TrackTemplate/Data/LocalStorage/CoreDataStack.swift +269 -0
  837. package/templates/ios/TrackTemplate/TrackTemplate/Data/LocalStorage/HabitEntity.swift +75 -0
  838. package/templates/ios/TrackTemplate/TrackTemplate/Data/LocalStorage/HabitEntryEntity.swift +44 -0
  839. package/templates/ios/TrackTemplate/TrackTemplate/Data/LocalStorage/LocalStorageProvider.swift +180 -0
  840. package/templates/ios/TrackTemplate/TrackTemplate/Data/LocalStorage/StreakEntity.swift +35 -0
  841. package/templates/ios/TrackTemplate/TrackTemplate/Features/Dashboard/TodayView.swift +6 -33
  842. package/templates/ios/TrackTemplate/TrackTemplate/Features/Habits/HabitsListView.swift +5 -43
  843. package/templates/ios/TrackTemplate/TrackTemplate.xcodeproj/project.pbxproj +63 -0
  844. package/templates/ios/TrackTemplate/TrackTemplateTests/DataRepositoryTests.swift +26 -0
  845. package/templates/ios/TrackTemplate/tests/01_launch_today.yaml +44 -5
  846. package/templates/ios/TrackTemplate/tests/02_tab_navigation.yaml +79 -16
  847. package/templates/ios/TrackTemplate/tests/04_add_habit.yaml +98 -3
  848. package/templates/shared/MODULES_CATALOG.md +42 -1
  849. package/templates/shared/android/CachedRepository/CachedRepository.kt +310 -0
  850. package/templates/shared/android/CachedRepository/LocalCache.kt +178 -0
  851. package/templates/shared/android/CachedRepository/OfflineQueue.kt +171 -0
  852. package/templates/shared/android/CachedRepository/strings.xml +15 -0
  853. package/templates/shared/android/FirebaseBackend/FirebaseAuthManager.kt +256 -0
  854. package/templates/shared/android/FirebaseBackend/FirebaseConfigManager.kt +122 -0
  855. package/templates/shared/android/FirebaseBackend/FirebaseForgotPasswordScreen.kt +187 -0
  856. package/templates/shared/android/FirebaseBackend/FirebaseLoginScreen.kt +216 -0
  857. package/templates/shared/android/FirebaseBackend/FirebaseProfileScreen.kt +292 -0
  858. package/templates/shared/android/FirebaseBackend/FirebaseSignUpScreen.kt +223 -0
  859. package/templates/shared/android/FirebaseBackend/FirebaseStorageManager.kt +143 -0
  860. package/templates/shared/android/FirebaseBackend/FirestoreManager.kt +209 -0
  861. package/templates/shared/android/FirebaseBackend/INTEGRATION.md +378 -0
  862. package/templates/shared/android/FirebaseBackend/SETUP.md +293 -0
  863. package/templates/shared/android/FirebaseBackend/strings.xml +62 -0
  864. package/templates/shared/android/FirebaseProvider/FirebaseAuthManager.kt +177 -0
  865. package/templates/shared/android/FirebaseProvider/FirebaseConfig.kt +54 -0
  866. package/templates/shared/android/FirebaseProvider/FirebaseDataProvider.kt +152 -0
  867. package/templates/shared/android/FirebaseProvider/strings.xml +25 -0
  868. package/templates/shared/android/SecretsConfig/INTEGRATION.md +111 -0
  869. package/templates/shared/android/SecretsConfig/SETUP.md +66 -0
  870. package/templates/shared/android/SecretsConfig/SecretsConfig.kt +113 -0
  871. package/templates/shared/android/SecretsConfig/build.gradle.snippet.kts +37 -0
  872. package/templates/shared/android/SecretsConfig/secrets.properties.template +30 -0
  873. package/templates/shared/android/SupabaseBackend/INTEGRATION.md +514 -0
  874. package/templates/shared/android/SupabaseBackend/SETUP.md +320 -0
  875. package/templates/shared/android/SupabaseBackend/SupabaseAuthManager.kt +198 -0
  876. package/templates/shared/android/SupabaseBackend/SupabaseConfigManager.kt +41 -0
  877. package/templates/shared/android/SupabaseBackend/SupabaseDatabaseManager.kt +148 -0
  878. package/templates/shared/android/SupabaseBackend/SupabaseForgotPasswordScreen.kt +154 -0
  879. package/templates/shared/android/SupabaseBackend/SupabaseLoginScreen.kt +262 -0
  880. package/templates/shared/android/SupabaseBackend/SupabaseMagicLinkSentScreen.kt +173 -0
  881. package/templates/shared/android/SupabaseBackend/SupabaseProfileScreen.kt +298 -0
  882. package/templates/shared/android/SupabaseBackend/SupabaseRealtimeManager.kt +98 -0
  883. package/templates/shared/android/SupabaseBackend/SupabaseSignUpScreen.kt +177 -0
  884. package/templates/shared/android/SupabaseBackend/SupabaseStorageManager.kt +62 -0
  885. package/templates/shared/android/SupabaseBackend/strings.xml +63 -0
  886. package/templates/shared/android/SupabaseProvider/SupabaseAuthManager.kt +254 -0
  887. package/templates/shared/android/SupabaseProvider/SupabaseConfig.kt +89 -0
  888. package/templates/shared/android/SupabaseProvider/SupabaseDataProvider.kt +232 -0
  889. package/templates/shared/android/SupabaseProvider/strings.xml +30 -0
  890. package/templates/shared/android/WixMemberBackend/WixApiClient.kt +207 -0
  891. package/templates/shared/android/WixMemberBackend/WixAuthManager.kt +476 -0
  892. package/templates/shared/android/WixMemberBackend/WixBlogManager.kt +190 -0
  893. package/templates/shared/android/WixMemberBackend/WixBlogScreen.kt +400 -0
  894. package/templates/shared/android/WixMemberBackend/WixBookingsManager.kt +239 -0
  895. package/templates/shared/android/WixMemberBackend/WixBookingsScreen.kt +440 -0
  896. package/templates/shared/android/WixMemberBackend/WixCartScreen.kt +304 -0
  897. package/templates/shared/android/WixMemberBackend/WixEventsManager.kt +277 -0
  898. package/templates/shared/android/WixMemberBackend/WixEventsScreen.kt +500 -0
  899. package/templates/shared/android/WixMemberBackend/WixLoginScreen.kt +208 -0
  900. package/templates/shared/android/WixMemberBackend/WixModels.kt +224 -0
  901. package/templates/shared/android/WixMemberBackend/WixProfileScreen.kt +542 -0
  902. package/templates/shared/android/WixMemberBackend/WixStoreScreen.kt +410 -0
  903. package/templates/shared/android/WixMemberBackend/WixStoresManager.kt +243 -0
  904. package/templates/shared/android/WixMemberBackend/strings.xml +111 -0
  905. package/templates/shared/android/WixOwnerBackend/INTEGRATION.md +246 -0
  906. package/templates/shared/android/WixOwnerBackend/SETUP.md +141 -0
  907. package/templates/shared/android/WixOwnerBackend/WixAdminAuthManager.kt +71 -0
  908. package/templates/shared/android/WixOwnerBackend/WixApiClient.kt +202 -0
  909. package/templates/shared/android/WixOwnerBackend/WixBlogAdminManager.kt +330 -0
  910. package/templates/shared/android/WixOwnerBackend/WixBlogEditorScreen.kt +535 -0
  911. package/templates/shared/android/WixOwnerBackend/WixBookingAdminManager.kt +337 -0
  912. package/templates/shared/android/WixOwnerBackend/WixBookingManagementScreen.kt +252 -0
  913. package/templates/shared/android/WixOwnerBackend/WixConnectSiteScreen.kt +177 -0
  914. package/templates/shared/android/WixOwnerBackend/WixDashboardScreen.kt +183 -0
  915. package/templates/shared/android/WixOwnerBackend/WixEventAdminManager.kt +274 -0
  916. package/templates/shared/android/WixOwnerBackend/WixEventManagementScreen.kt +466 -0
  917. package/templates/shared/android/WixOwnerBackend/WixModels.kt +269 -0
  918. package/templates/shared/android/WixOwnerBackend/WixOrdersScreen.kt +282 -0
  919. package/templates/shared/android/WixOwnerBackend/WixProductManagementScreen.kt +277 -0
  920. package/templates/shared/android/WixOwnerBackend/WixSiteAdminManager.kt +152 -0
  921. package/templates/shared/android/WixOwnerBackend/WixStoreAdminManager.kt +321 -0
  922. package/templates/shared/android/WixOwnerBackend/strings.xml +88 -0
  923. package/templates/shared/android/WixSiteSelector/INTEGRATION.md +117 -0
  924. package/templates/shared/android/WixSiteSelector/SETUP.md +38 -0
  925. package/templates/shared/android/WixSiteSelector/WixSiteManager.kt +211 -0
  926. package/templates/shared/android/WixSiteSelector/WixSiteModels.kt +28 -0
  927. package/templates/shared/android/WixSiteSelector/WixSiteSelectorScreen.kt +343 -0
  928. package/templates/shared/android/WixSiteSelector/strings.xml +36 -0
  929. package/templates/shared/ios/CachedRepository/CachedRepository.swift +212 -0
  930. package/templates/shared/ios/CachedRepository/INTEGRATION.md +168 -0
  931. package/templates/shared/ios/CachedRepository/LocalCache.swift +191 -0
  932. package/templates/shared/ios/CachedRepository/OfflineQueue.swift +109 -0
  933. package/templates/shared/ios/CachedRepository/Strings.swift +31 -0
  934. package/templates/shared/ios/FirebaseBackend/FirebaseAuthService.swift +329 -0
  935. package/templates/shared/ios/FirebaseBackend/FirebaseConfigService.swift +105 -0
  936. package/templates/shared/ios/FirebaseBackend/FirebaseStorageService.swift +198 -0
  937. package/templates/shared/ios/FirebaseBackend/FirestoreService.swift +206 -0
  938. package/templates/shared/ios/FirebaseBackend/INTEGRATION.md +287 -0
  939. package/templates/shared/ios/FirebaseBackend/SETUP.md +224 -0
  940. package/templates/shared/ios/FirebaseBackend/Screens/FirebaseForgotPasswordScreen.swift +108 -0
  941. package/templates/shared/ios/FirebaseBackend/Screens/FirebaseLoginScreen.swift +197 -0
  942. package/templates/shared/ios/FirebaseBackend/Screens/FirebaseProfileScreen.swift +195 -0
  943. package/templates/shared/ios/FirebaseBackend/Screens/FirebaseSignUpScreen.swift +151 -0
  944. package/templates/shared/ios/FirebaseBackend/Strings.swift +69 -0
  945. package/templates/shared/ios/FirebaseProvider/FirebaseAuthService.swift +83 -0
  946. package/templates/shared/ios/FirebaseProvider/FirebaseConfig.swift +36 -0
  947. package/templates/shared/ios/FirebaseProvider/FirebaseDataProvider.swift +111 -0
  948. package/templates/shared/ios/FirebaseProvider/INTEGRATION.md +203 -0
  949. package/templates/shared/ios/FirebaseProvider/Strings.swift +40 -0
  950. package/templates/shared/ios/SecretsConfig/INTEGRATION.md +96 -0
  951. package/templates/shared/ios/SecretsConfig/SETUP.md +67 -0
  952. package/templates/shared/ios/SecretsConfig/Secrets.xcconfig.template +30 -0
  953. package/templates/shared/ios/SecretsConfig/SecretsConfig.swift +87 -0
  954. package/templates/shared/ios/SupabaseBackend/INTEGRATION.md +335 -0
  955. package/templates/shared/ios/SupabaseBackend/SETUP.md +232 -0
  956. package/templates/shared/ios/SupabaseBackend/Screens/SupabaseForgotPasswordScreen.swift +123 -0
  957. package/templates/shared/ios/SupabaseBackend/Screens/SupabaseLoginScreen.swift +207 -0
  958. package/templates/shared/ios/SupabaseBackend/Screens/SupabaseMagicLinkSentScreen.swift +136 -0
  959. package/templates/shared/ios/SupabaseBackend/Screens/SupabaseProfileScreen.swift +102 -0
  960. package/templates/shared/ios/SupabaseBackend/Screens/SupabaseSignUpScreen.swift +159 -0
  961. package/templates/shared/ios/SupabaseBackend/Strings.swift +73 -0
  962. package/templates/shared/ios/SupabaseBackend/SupabaseAuthService.swift +191 -0
  963. package/templates/shared/ios/SupabaseBackend/SupabaseConfigService.swift +31 -0
  964. package/templates/shared/ios/SupabaseBackend/SupabaseDatabaseService.swift +133 -0
  965. package/templates/shared/ios/SupabaseBackend/SupabaseRealtimeService.swift +117 -0
  966. package/templates/shared/ios/SupabaseBackend/SupabaseStorageService.swift +48 -0
  967. package/templates/shared/ios/SupabaseProvider/INTEGRATION.md +251 -0
  968. package/templates/shared/ios/SupabaseProvider/Strings.swift +44 -0
  969. package/templates/shared/ios/SupabaseProvider/SupabaseAuthService.swift +142 -0
  970. package/templates/shared/ios/SupabaseProvider/SupabaseConfig.swift +48 -0
  971. package/templates/shared/ios/SupabaseProvider/SupabaseDataProvider.swift +180 -0
  972. package/templates/shared/ios/WixMemberBackend/INTEGRATION.md +188 -0
  973. package/templates/shared/ios/WixMemberBackend/SETUP.md +79 -0
  974. package/templates/shared/ios/WixMemberBackend/Screens/WixBlogScreen.swift +388 -0
  975. package/templates/shared/ios/WixMemberBackend/Screens/WixBookingsScreen.swift +415 -0
  976. package/templates/shared/ios/WixMemberBackend/Screens/WixCartScreen.swift +231 -0
  977. package/templates/shared/ios/WixMemberBackend/Screens/WixEventsScreen.swift +513 -0
  978. package/templates/shared/ios/WixMemberBackend/Screens/WixLoginScreen.swift +151 -0
  979. package/templates/shared/ios/WixMemberBackend/Screens/WixProfileScreen.swift +256 -0
  980. package/templates/shared/ios/WixMemberBackend/Screens/WixStoreScreen.swift +354 -0
  981. package/templates/shared/ios/WixMemberBackend/Strings.swift +135 -0
  982. package/templates/shared/ios/WixMemberBackend/WixAPIClient.swift +192 -0
  983. package/templates/shared/ios/WixMemberBackend/WixAuthService.swift +483 -0
  984. package/templates/shared/ios/WixMemberBackend/WixBlogService.swift +96 -0
  985. package/templates/shared/ios/WixMemberBackend/WixBookingsService.swift +98 -0
  986. package/templates/shared/ios/WixMemberBackend/WixEventsService.swift +109 -0
  987. package/templates/shared/ios/WixMemberBackend/WixModels.swift +188 -0
  988. package/templates/shared/ios/WixMemberBackend/WixStoresService.swift +157 -0
  989. package/templates/shared/ios/WixOwnerBackend/INTEGRATION.md +222 -0
  990. package/templates/shared/ios/WixOwnerBackend/SETUP.md +146 -0
  991. package/templates/shared/ios/WixOwnerBackend/Screens/WixBlogEditorScreen.swift +384 -0
  992. package/templates/shared/ios/WixOwnerBackend/Screens/WixBookingManagementScreen.swift +235 -0
  993. package/templates/shared/ios/WixOwnerBackend/Screens/WixConnectSiteScreen.swift +186 -0
  994. package/templates/shared/ios/WixOwnerBackend/Screens/WixDashboardScreen.swift +220 -0
  995. package/templates/shared/ios/WixOwnerBackend/Screens/WixEventManagementScreen.swift +438 -0
  996. package/templates/shared/ios/WixOwnerBackend/Screens/WixOrdersScreen.swift +285 -0
  997. package/templates/shared/ios/WixOwnerBackend/Screens/WixProductManagementScreen.swift +285 -0
  998. package/templates/shared/ios/WixOwnerBackend/Strings.swift +113 -0
  999. package/templates/shared/ios/WixOwnerBackend/WixAdminAuthService.swift +63 -0
  1000. package/templates/shared/ios/WixOwnerBackend/WixBlogManagerService.swift +122 -0
  1001. package/templates/shared/ios/WixOwnerBackend/WixBookingManagerService.swift +142 -0
  1002. package/templates/shared/ios/WixOwnerBackend/WixEventManagerService.swift +142 -0
  1003. package/templates/shared/ios/WixOwnerBackend/WixModels.swift +224 -0
  1004. package/templates/shared/ios/WixOwnerBackend/WixSiteManagerService.swift +130 -0
  1005. package/templates/shared/ios/WixOwnerBackend/WixStoreManagerService.swift +161 -0
  1006. package/templates/shared/ios/WixSiteSelector/INTEGRATION.md +116 -0
  1007. package/templates/shared/ios/WixSiteSelector/SETUP.md +38 -0
  1008. package/templates/shared/ios/WixSiteSelector/Strings.swift +40 -0
  1009. package/templates/shared/ios/WixSiteSelector/WixSiteManager.swift +183 -0
  1010. package/templates/shared/ios/WixSiteSelector/WixSiteModels.swift +45 -0
  1011. package/templates/shared/ios/WixSiteSelector/WixSiteSelectorScreen.swift +275 -0
  1012. package/templates/shared/keys.json.schema.json +61 -0
  1013. package/templates/shared/tests/android/FirebaseBackend/FirebaseTest.kt +75 -0
  1014. package/templates/shared/tests/android/SupabaseBackend/SupabaseTest.kt +146 -0
  1015. package/templates/shared/tests/android/WixMemberBackend/WixMemberTest.kt +159 -0
  1016. package/templates/shared/tests/android/WixOwnerBackend/WixOwnerTest.kt +99 -0
  1017. package/templates/shared/tests/ios/FirebaseBackend/FirebaseTests.swift +145 -0
  1018. package/templates/shared/tests/ios/SupabaseBackend/SupabaseTests.swift +126 -0
  1019. package/templates/shared/tests/ios/WixMemberBackend/WixMemberTests.swift +143 -0
  1020. package/templates/shared/tests/ios/WixOwnerBackend/WixOwnerTests.swift +98 -0
  1021. package/templates/shared/tests/maestro/FirebaseBackend/firebase_auth_flow.yaml +153 -0
  1022. package/templates/shared/tests/maestro/SupabaseBackend/supabase_auth_flow.yaml +163 -0
  1023. package/templates/shared/tests/maestro/WixMemberBackend/wix_member_navigation_flow.yaml +55 -0
  1024. package/templates/shared/tests/maestro/WixMemberBackend/wix_member_store_flow.yaml +42 -0
  1025. package/templates/shared/tests/maestro/WixOwnerBackend/wix_owner_dashboard_flow.yaml +48 -0
  1026. package/templates/android/BookTemplate/tests/04_booking_flow.yaml +0 -14
  1027. package/templates/android/BookTemplate/tests/05_search_filter.yaml +0 -14
  1028. package/templates/android/BookTemplate/tests/06_favorites.yaml +0 -14
  1029. package/templates/android/BookTemplate/tests/07_profile.yaml +0 -14
  1030. package/templates/ios/BookTemplate/tests/04_booking_flow.yaml +0 -9
  1031. package/templates/ios/BookTemplate/tests/05_search_filter.yaml +0 -9
  1032. package/templates/ios/BookTemplate/tests/06_favorites.yaml +0 -9
  1033. package/templates/ios/BookTemplate/tests/07_profile.yaml +0 -9
@@ -1,7 +1,7 @@
1
1
  import SwiftUI
2
2
 
3
3
  struct NotesView: View {
4
- @StateObject private var dataProvider = MockDataProvider.shared
4
+ @StateObject private var dataProvider = DataSourceResolver.repository as! MockDataProvider
5
5
  @State private var isLoading = true
6
6
  @State private var showAddNote = false
7
7
  @EnvironmentObject var mediaPickerService: MediaPickerService
@@ -119,7 +119,7 @@ private struct NoteListRow: View {
119
119
  // MARK: - Note Detail View
120
120
  struct NoteDetailView: View {
121
121
  let note: Note
122
- @StateObject private var dataProvider = MockDataProvider.shared
122
+ @StateObject private var dataProvider = DataSourceResolver.repository as! MockDataProvider
123
123
  @StateObject private var shareSheetService = ShareSheetService()
124
124
  @StateObject private var mediaPickerService = MediaPickerService()
125
125
  @State private var showShareSheet = false
@@ -208,7 +208,7 @@ struct NoteDetailView: View {
208
208
  // MARK: - Add Note View
209
209
  struct AddNoteView: View {
210
210
  @Environment(\.dismiss) private var dismiss
211
- @StateObject private var dataProvider = MockDataProvider.shared
211
+ @StateObject private var dataProvider = DataSourceResolver.repository as! MockDataProvider
212
212
  @State private var title = ""
213
213
  @State private var content = ""
214
214
  @EnvironmentObject var mediaPickerService: MediaPickerService
@@ -1,7 +1,7 @@
1
1
  import SwiftUI
2
2
 
3
3
  struct TaskListView: View {
4
- @StateObject private var dataProvider = MockDataProvider.shared
4
+ @StateObject private var dataProvider = DataSourceResolver.repository as! MockDataProvider
5
5
  @State private var isLoading = true
6
6
  @State private var showAddTask = false
7
7
 
@@ -119,7 +119,7 @@ private struct TaskListRow: View {
119
119
  // MARK: - Task Detail View
120
120
  struct TaskDetailView: View {
121
121
  let task: Task
122
- @StateObject private var dataProvider = MockDataProvider.shared
122
+ @StateObject private var dataProvider = DataSourceResolver.repository as! MockDataProvider
123
123
  @StateObject private var shareSheetService = ShareSheetService()
124
124
  @State private var showShareSheet = false
125
125
 
@@ -183,7 +183,7 @@ struct TaskDetailView: View {
183
183
  // MARK: - Add Task View
184
184
  struct AddTaskView: View {
185
185
  @Environment(\.dismiss) private var dismiss
186
- @StateObject private var dataProvider = MockDataProvider.shared
186
+ @StateObject private var dataProvider = DataSourceResolver.repository as! MockDataProvider
187
187
  @State private var title = ""
188
188
  @State private var description = ""
189
189
  @State private var priority: Task.TaskPriority = .medium
@@ -9,6 +9,7 @@
9
9
  /* Begin PBXBuildFile section */
10
10
  0214429555BA84C91931CCB6 /* ErrorHandlingStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB88CD2B6389995A6B779777 /* ErrorHandlingStrings.swift */; };
11
11
  040F005A695B91579DBA924D /* SkeletonLoadingModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = F668E17CB7FED3CBF91D5204 /* SkeletonLoadingModels.swift */; };
12
+ 05E89D72DC4A7D0DB49DEA5F /* DataSourceResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 820AE7D7BF2CF7561B29E856 /* DataSourceResolver.swift */; };
12
13
  066C43F5AF96C7D8094B6815 /* DeepLinkingModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = BADCD2CCD4FDE66B1D0CE156 /* DeepLinkingModels.swift */; };
13
14
  0675C269D1A3823BD22444A4 /* ForceUpdateStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 337C6019114E2E6D42C3F2F1 /* ForceUpdateStrings.swift */; };
14
15
  0A27FB9E182BF4F735A4308F /* BiometricAuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 046133BABDF5EDDC936110FB /* BiometricAuthView.swift */; };
@@ -36,9 +37,12 @@
36
37
  3D7AC39211F13E52D7BBEB61 /* TaskListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D55A15E1A557AE75C2A0AA70 /* TaskListView.swift */; };
37
38
  41E28617CFEB5C7D2556F8D1 /* MediaPickerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29D1A838D19D2B4D409BE973 /* MediaPickerService.swift */; };
38
39
  5131AAFFDF8507246BE53043 /* TasksStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E473165CA67F38CAB6E1337 /* TasksStrings.swift */; };
40
+ 626FB20BAAB6BDB462BB1980 /* LocalStorageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77EF88FB201D273F532A7AAB /* LocalStorageProvider.swift */; };
39
41
  648381287101F24CACC99E81 /* AccountDeletionStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06286F88C3DAF604FE45B810 /* AccountDeletionStrings.swift */; };
40
42
  6600471BDB92B31A13A5A12C /* MediaPickerViewWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19BA02E9D3DEF235F8DBE5C7 /* MediaPickerViewWrapper.swift */; };
41
43
  6889CC0641338200D3524545 /* ErrorHandlingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70B7A49D7D125DBFEC0B5184 /* ErrorHandlingService.swift */; };
44
+ 6A76343C3FF9F0D16B5B4AC6 /* EmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D28865461368EB96F252BBB /* EmptyStateView.swift */; };
45
+ 6C62BA843248649E1E024AC0 /* NoteEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59F0159FFC14A8301BF7F9B3 /* NoteEntity.swift */; };
42
46
  6E758109B8CB2DD204D06B21 /* ConsentPrivacyStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0CC865E70C885CD70E51F0 /* ConsentPrivacyStrings.swift */; };
43
47
  6F3CA62B1BF9A903F563C465 /* PaywallService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611246B68C12A0384E13B54E /* PaywallService.swift */; };
44
48
  72F4C88895B849D1B673FDC2 /* ChartsLibraryModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B45EC053D59AD0C6F674EF77 /* ChartsLibraryModels.swift */; };
@@ -53,6 +57,7 @@
53
57
  851AA4E846BDE62BE6F3EA74 /* MediaPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 898237BDA362879AE233C171 /* MediaPickerView.swift */; };
54
58
  87D42C9779A0EA4134710F1C /* MockDataProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EA9A0296BD6B57C52D2EE34 /* MockDataProviderTests.swift */; };
55
59
  89A456EC81EB68B909C8F5DC /* ShareSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014E97CC5A3510FDD8F708C2 /* ShareSheetView.swift */; };
60
+ 8C6FDE1F765619DB81A8C95B /* DataRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FAE175FDBFBD7EE9DD63CAD /* DataRepository.swift */; };
56
61
  8ECD157FCAEF9420BE5F4966 /* ConsentPrivacyModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A96C043D4FDF0040876F5F /* ConsentPrivacyModels.swift */; };
57
62
  8EEE7C94B8D3D1821C83AB00 /* DeepLinkingStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86DE9678AA05E7E6857BB8A0 /* DeepLinkingStrings.swift */; };
58
63
  92219C760BCBF824DE68881C /* NetworkBannerService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEACEAB66A8717F60998AD39 /* NetworkBannerService.swift */; };
@@ -65,17 +70,19 @@
65
70
  AA766406F23BB4CF2FE46658 /* AccountDeletionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78043284AB5207101C7ADA17 /* AccountDeletionView.swift */; };
66
71
  B18BBAAF9CEA8E613C9D87C7 /* NetworkBannerStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 663D64BFAF4FD8C59CFA4B73 /* NetworkBannerStrings.swift */; };
67
72
  B478825B764D46A435D0A6DF /* EmptyStatesStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6096F31DB2A75695828F0CFB /* EmptyStatesStrings.swift */; };
68
- BCBAEB6103695C737C6C716C /* EmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08AE849C16CBC552961F1D0B /* EmptyStateView.swift */; };
69
73
  BE71BD7EBC01B030470F9CCC /* NotesStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD4AE83B0B587CCBF7C907E1 /* NotesStrings.swift */; };
70
74
  C07D66A824298327E8EA6ABD /* AppConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EB0309B2DE7A1E8F3F69740 /* AppConfig.swift */; };
71
75
  C25B54896528ECFA01F806F4 /* NetworkBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 491DFF0BE5BE3DD581FF814F /* NetworkBannerView.swift */; };
72
76
  C9ED428CB1D8A164806D81C4 /* PushNotificationsStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 018620DA8E5DDFC6347AE88D /* PushNotificationsStrings.swift */; };
73
77
  CF8F8DBB847F635470975AD5 /* BiometricAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E97E0E874DA37462DE7ADFB /* BiometricAuthService.swift */; };
78
+ D0945DF45B6CF0A364743D65 /* TaskEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EE12FA6A5090F260419647B /* TaskEntity.swift */; };
74
79
  D2F6B42768877AB0A0D3F09E /* BiometricAuthStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE66C4A66E6EBC70047FB029 /* BiometricAuthStrings.swift */; };
75
80
  DA6FF47A22AE97C5D9A5E540 /* ShareSheetStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C060D3D54483272D8D09C5C /* ShareSheetStrings.swift */; };
76
81
  DFCECD2CF56B25D89F3E8BE2 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F624C8D77B9272E5C2741B5 /* Colors.swift */; };
82
+ E44DC7C5682A2C775611D5A8 /* CoreDataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E26AD7BB0B43F27582047 /* CoreDataStack.swift */; };
77
83
  FAC9A5344DD26788F318A969 /* DeepLinkingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 070C548AA3A06C4A985E503D /* DeepLinkingService.swift */; };
78
84
  FD7A891AF14B477F650FED7C /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F03637B481134CC948141AEF /* OnboardingView.swift */; };
85
+ FE775E8D07E51837EB03A514 /* DataRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98CB1FDEE9F5DF1B5F6D16C5 /* DataRepositoryTests.swift */; };
79
86
  FEAF1041E9F4226285819C20 /* EmptyStateService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6FE1480FAEA2A0939BE2996 /* EmptyStateService.swift */; };
80
87
  FFD9A239358E7F25A1C9157E /* ShareSheetModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6E4B8BEC517A4201375183 /* ShareSheetModels.swift */; };
81
88
  /* End PBXBuildFile section */
@@ -98,7 +105,6 @@
98
105
  0628118AAE013BEFC6CEC88C /* FeedbackSupportService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackSupportService.swift; sourceTree = "<group>"; };
99
106
  06286F88C3DAF604FE45B810 /* AccountDeletionStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeletionStrings.swift; sourceTree = "<group>"; };
100
107
  070C548AA3A06C4A985E503D /* DeepLinkingService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkingService.swift; sourceTree = "<group>"; };
101
- 08AE849C16CBC552961F1D0B /* EmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateView.swift; sourceTree = "<group>"; };
102
108
  0B286D7F9AC5FDD8A115891B /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = "<group>"; };
103
109
  0D26C0DDB91DA1914BAF8F0A /* ReferenceTemplate.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = ReferenceTemplate.app; sourceTree = BUILT_PRODUCTS_DIR; };
104
110
  15951732BC87ADB82E37BE19 /* SkeletonLoadingService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonLoadingService.swift; sourceTree = "<group>"; };
@@ -115,28 +121,36 @@
115
121
  3E97E0E874DA37462DE7ADFB /* BiometricAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BiometricAuthService.swift; sourceTree = "<group>"; };
116
122
  491DFF0BE5BE3DD581FF814F /* NetworkBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkBannerView.swift; sourceTree = "<group>"; };
117
123
  4B081F6F35A11151F07C67BD /* ConsentPrivacyService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConsentPrivacyService.swift; sourceTree = "<group>"; };
124
+ 4D28865461368EB96F252BBB /* EmptyStateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStateView.swift; sourceTree = "<group>"; };
118
125
  4DB79905E28763A830F00217 /* FeedbackSupportStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeedbackSupportStrings.swift; sourceTree = "<group>"; };
119
126
  51BBF3010334230CDA4A1DE3 /* PushNotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushNotificationsView.swift; sourceTree = "<group>"; };
127
+ 59F0159FFC14A8301BF7F9B3 /* NoteEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteEntity.swift; sourceTree = "<group>"; };
120
128
  5B186913E3388662C6AD3DB9 /* NotesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesView.swift; sourceTree = "<group>"; };
121
129
  5B33292BCAF73700AAFBC85F /* ReferenceTemplateTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = ReferenceTemplateTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
122
130
  5EB0309B2DE7A1E8F3F69740 /* AppConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppConfig.swift; sourceTree = "<group>"; };
131
+ 5FAE175FDBFBD7EE9DD63CAD /* DataRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataRepository.swift; sourceTree = "<group>"; };
123
132
  6096F31DB2A75695828F0CFB /* EmptyStatesStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyStatesStrings.swift; sourceTree = "<group>"; };
124
133
  611246B68C12A0384E13B54E /* PaywallService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaywallService.swift; sourceTree = "<group>"; };
125
134
  663D64BFAF4FD8C59CFA4B73 /* NetworkBannerStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkBannerStrings.swift; sourceTree = "<group>"; };
126
135
  66813D0D202C30C8AD7CBE2A /* PaywallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaywallView.swift; sourceTree = "<group>"; };
127
136
  67516E0BD477B5C09A0D9124 /* ChartsLibraryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartsLibraryService.swift; sourceTree = "<group>"; };
137
+ 6EE12FA6A5090F260419647B /* TaskEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskEntity.swift; sourceTree = "<group>"; };
128
138
  6FDA46E18279679CC580881A /* MockDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDataProvider.swift; sourceTree = "<group>"; };
129
139
  70B7A49D7D125DBFEC0B5184 /* ErrorHandlingService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorHandlingService.swift; sourceTree = "<group>"; };
140
+ 77EF88FB201D273F532A7AAB /* LocalStorageProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalStorageProvider.swift; sourceTree = "<group>"; };
130
141
  78043284AB5207101C7ADA17 /* AccountDeletionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeletionView.swift; sourceTree = "<group>"; };
131
142
  7935D4D02DFD421410B77F8B /* HomeStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeStrings.swift; sourceTree = "<group>"; };
132
143
  7EA9A0296BD6B57C52D2EE34 /* MockDataProviderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDataProviderTests.swift; sourceTree = "<group>"; };
133
144
  801D72CE5874972C668FE5A1 /* ErrorHandlingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorHandlingView.swift; sourceTree = "<group>"; };
134
145
  8069570D4248D83D38CE17D5 /* ShareSheetService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareSheetService.swift; sourceTree = "<group>"; };
146
+ 820AE7D7BF2CF7561B29E856 /* DataSourceResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataSourceResolver.swift; sourceTree = "<group>"; };
135
147
  86DE9678AA05E7E6857BB8A0 /* DeepLinkingStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeepLinkingStrings.swift; sourceTree = "<group>"; };
136
148
  898237BDA362879AE233C171 /* MediaPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPickerView.swift; sourceTree = "<group>"; };
149
+ 8C4E26AD7BB0B43F27582047 /* CoreDataStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataStack.swift; sourceTree = "<group>"; };
137
150
  9401E536F53B0BA687926FDD /* ForceUpdateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForceUpdateView.swift; sourceTree = "<group>"; };
138
151
  9685BB83097E18253519C047 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
139
152
  97D08D9C8C5771A3D67A799B /* PaywallStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaywallStrings.swift; sourceTree = "<group>"; };
153
+ 98CB1FDEE9F5DF1B5F6D16C5 /* DataRepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataRepositoryTests.swift; sourceTree = "<group>"; };
140
154
  9AE7138A821BAABE6A360856 /* MediaPickerStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPickerStrings.swift; sourceTree = "<group>"; };
141
155
  9F01EEF118C57412C1296D32 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
142
156
  AB88CD2B6389995A6B779777 /* ErrorHandlingStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorHandlingStrings.swift; sourceTree = "<group>"; };
@@ -173,6 +187,7 @@
173
187
  children = (
174
188
  1D62ED5323617F044D25EE50 /* App */,
175
189
  8784A96AF8465F01327A0292 /* Core */,
190
+ B2D370911DF02CC59993E288 /* Data */,
176
191
  C1DEFFD1E78C6B6CE54B477E /* Features */,
177
192
  47275C003AC9CCF4E64EF7B7 /* MockData */,
178
193
  FE9B2150BC67EAA69A220658 /* Models */,
@@ -277,6 +292,17 @@
277
292
  path = ErrorHandling;
278
293
  sourceTree = "<group>";
279
294
  };
295
+ 55BB851B44E49992168672F5 /* LocalStorage */ = {
296
+ isa = PBXGroup;
297
+ children = (
298
+ 8C4E26AD7BB0B43F27582047 /* CoreDataStack.swift */,
299
+ 77EF88FB201D273F532A7AAB /* LocalStorageProvider.swift */,
300
+ 59F0159FFC14A8301BF7F9B3 /* NoteEntity.swift */,
301
+ 6EE12FA6A5090F260419647B /* TaskEntity.swift */,
302
+ );
303
+ path = LocalStorage;
304
+ sourceTree = "<group>";
305
+ };
280
306
  5B06E79DAFD9D410D3F0845A /* ShareSheet */ = {
281
307
  isa = PBXGroup;
282
308
  children = (
@@ -335,6 +361,7 @@
335
361
  8784A96AF8465F01327A0292 /* Core */ = {
336
362
  isa = PBXGroup;
337
363
  children = (
364
+ 4D28865461368EB96F252BBB /* EmptyStateView.swift */,
338
365
  BEC196CFD785DA7A2825A6D3 /* Strings.swift */,
339
366
  4C0079B6EF960147BBE847ED /* Theme */,
340
367
  );
@@ -374,7 +401,6 @@
374
401
  children = (
375
402
  E6FE1480FAEA2A0939BE2996 /* EmptyStateService.swift */,
376
403
  6096F31DB2A75695828F0CFB /* EmptyStatesStrings.swift */,
377
- 08AE849C16CBC552961F1D0B /* EmptyStateView.swift */,
378
404
  );
379
405
  path = EmptyStates;
380
406
  sourceTree = "<group>";
@@ -390,6 +416,16 @@
390
416
  path = SkeletonLoading;
391
417
  sourceTree = "<group>";
392
418
  };
419
+ B2D370911DF02CC59993E288 /* Data */ = {
420
+ isa = PBXGroup;
421
+ children = (
422
+ 5FAE175FDBFBD7EE9DD63CAD /* DataRepository.swift */,
423
+ 820AE7D7BF2CF7561B29E856 /* DataSourceResolver.swift */,
424
+ 55BB851B44E49992168672F5 /* LocalStorage */,
425
+ );
426
+ path = Data;
427
+ sourceTree = "<group>";
428
+ };
393
429
  B57407AD2369864349A27D05 /* MediaPicker */ = {
394
430
  isa = PBXGroup;
395
431
  children = (
@@ -404,6 +440,7 @@
404
440
  B6464F303C1F956B48DEBABC /* ReferenceTemplateTests */ = {
405
441
  isa = PBXGroup;
406
442
  children = (
443
+ 98CB1FDEE9F5DF1B5F6D16C5 /* DataRepositoryTests.swift */,
407
444
  7EA9A0296BD6B57C52D2EE34 /* MockDataProviderTests.swift */,
408
445
  15C3F92512631DC38D6B5B7C /* ModuleIntegrationTests.swift */,
409
446
  );
@@ -596,11 +633,14 @@
596
633
  29877572022D274C125F1347 /* ConsentPrivacyService.swift in Sources */,
597
634
  6E758109B8CB2DD204D06B21 /* ConsentPrivacyStrings.swift in Sources */,
598
635
  7FF523C2C33249CA77079075 /* ConsentPrivacyView.swift in Sources */,
636
+ E44DC7C5682A2C775611D5A8 /* CoreDataStack.swift in Sources */,
637
+ 8C6FDE1F765619DB81A8C95B /* DataRepository.swift in Sources */,
638
+ 05E89D72DC4A7D0DB49DEA5F /* DataSourceResolver.swift in Sources */,
599
639
  066C43F5AF96C7D8094B6815 /* DeepLinkingModels.swift in Sources */,
600
640
  FAC9A5344DD26788F318A969 /* DeepLinkingService.swift in Sources */,
601
641
  8EEE7C94B8D3D1821C83AB00 /* DeepLinkingStrings.swift in Sources */,
602
642
  FEAF1041E9F4226285819C20 /* EmptyStateService.swift in Sources */,
603
- BCBAEB6103695C737C6C716C /* EmptyStateView.swift in Sources */,
643
+ 6A76343C3FF9F0D16B5B4AC6 /* EmptyStateView.swift in Sources */,
604
644
  B478825B764D46A435D0A6DF /* EmptyStatesStrings.swift in Sources */,
605
645
  19D125E114F54D01A00911B8 /* ErrorHandlingModels.swift in Sources */,
606
646
  6889CC0641338200D3524545 /* ErrorHandlingService.swift in Sources */,
@@ -614,6 +654,7 @@
614
654
  2092EF3C614915FD018895EA /* ForceUpdateView.swift in Sources */,
615
655
  289546A2C6433FEA794A1D1A /* HomeStrings.swift in Sources */,
616
656
  338D68191FB204100025F291 /* HomeView.swift in Sources */,
657
+ 626FB20BAAB6BDB462BB1980 /* LocalStorageProvider.swift in Sources */,
617
658
  19C34989426BDEB2014214C0 /* MainTabView.swift in Sources */,
618
659
  41E28617CFEB5C7D2556F8D1 /* MediaPickerService.swift in Sources */,
619
660
  21E1AA006362B27E782602C9 /* MediaPickerStrings.swift in Sources */,
@@ -624,6 +665,7 @@
624
665
  92219C760BCBF824DE68881C /* NetworkBannerService.swift in Sources */,
625
666
  B18BBAAF9CEA8E613C9D87C7 /* NetworkBannerStrings.swift in Sources */,
626
667
  C25B54896528ECFA01F806F4 /* NetworkBannerView.swift in Sources */,
668
+ 6C62BA843248649E1E024AC0 /* NoteEntity.swift in Sources */,
627
669
  BE71BD7EBC01B030470F9CCC /* NotesStrings.swift in Sources */,
628
670
  1D2C44E0FEFAA6B4826BD0B2 /* NotesView.swift in Sources */,
629
671
  FD7A891AF14B477F650FED7C /* OnboardingView.swift in Sources */,
@@ -646,6 +688,7 @@
646
688
  2C2BB2D546F24B233AB89244 /* SkeletonLoadingStrings.swift in Sources */,
647
689
  337E5ADBB6EE573CF24791B2 /* SkeletonLoadingView.swift in Sources */,
648
690
  7C28AF8493B1975ED4A3BD09 /* Strings.swift in Sources */,
691
+ D0945DF45B6CF0A364743D65 /* TaskEntity.swift in Sources */,
649
692
  3D7AC39211F13E52D7BBEB61 /* TaskListView.swift in Sources */,
650
693
  5131AAFFDF8507246BE53043 /* TasksStrings.swift in Sources */,
651
694
  );
@@ -655,6 +698,7 @@
655
698
  isa = PBXSourcesBuildPhase;
656
699
  buildActionMask = 2147483647;
657
700
  files = (
701
+ FE775E8D07E51837EB03A514 /* DataRepositoryTests.swift in Sources */,
658
702
  87D42C9779A0EA4134710F1C /* MockDataProviderTests.swift in Sources */,
659
703
  17FCC8872601D62B3E0E421F /* ModuleIntegrationTests.swift in Sources */,
660
704
  );
@@ -0,0 +1,26 @@
1
+ import XCTest
2
+ @testable import ReferenceTemplate
3
+
4
+ /// Tests that MockDataProvider conforms to DataRepository and that
5
+ /// DataSourceResolver returns the correct implementation.
6
+ final class DataRepositoryTests: XCTestCase {
7
+
8
+ // MARK: - DataRepository Protocol Conformance
9
+
10
+ func testMockDataProviderConformsToDataRepository() {
11
+ let repo: any DataRepository = MockDataProvider.shared
12
+ XCTAssertNotNil(repo, "MockDataProvider should conform to DataRepository")
13
+ }
14
+
15
+ func testDataSourceResolverReturnsMock() {
16
+ let repo = DataSourceResolver.repository
17
+ XCTAssertNotNil(repo, "DataSourceResolver should return a non-nil repository")
18
+ XCTAssertTrue(repo is MockDataProvider, "When active is .mock, should return MockDataProvider")
19
+ }
20
+
21
+ func testRepositoryLoadData() {
22
+ let repo: any DataRepository = MockDataProvider.shared
23
+ XCTAssertFalse(repo.tasks.isEmpty, "tasks should not be empty")
24
+ XCTAssertFalse(repo.notes.isEmpty, "notes should not be empty")
25
+ }
26
+ }
@@ -73,6 +73,7 @@ Complete list of test IDs used in Maestro tests. All IDs follow the `{module}_{e
73
73
  | Test ID | Element | Location |
74
74
  |---------|---------|----------|
75
75
  | `tasks_add_button` | Add task button | TaskListView.swift |
76
+ | `tasks_empty_state` | Empty state view when no tasks exist | TaskListView.swift |
76
77
  | `task_detail_share_button` | Share button on task detail | TaskDetailView.swift |
77
78
 
78
79
  ## Notes Feature
@@ -80,6 +81,7 @@ Complete list of test IDs used in Maestro tests. All IDs follow the `{module}_{e
80
81
  | Test ID | Element | Location |
81
82
  |---------|---------|----------|
82
83
  | `notes_add_button` | Add note button | NotesView.swift |
84
+ | `notes_empty_state` | Empty state view when no notes exist | NotesView.swift |
83
85
  | `note_detail_attach_button` | Attach photo button | NoteDetailView.swift |
84
86
  | `note_detail_share_button` | Share button on note detail | NoteDetailView.swift |
85
87
 
@@ -2,15 +2,71 @@ appId: ${APP_BUNDLE_ID}
2
2
  ---
3
3
  - clearState
4
4
  - launchApp
5
- - waitForAnimationToEnd
6
- # Verify consent/privacy screen or home appears
5
+ - extendedWaitUntil:
6
+ visible:
7
+ - "Privacy"
8
+ - "Accept All"
9
+ - "Home"
10
+ timeout: 10000
11
+ # Verify consent/privacy screen appears
7
12
  - assertVisible:
8
- text: "Privacy"
13
+ id: "consent_privacy_icon"
9
14
  optional: true
15
+ - assertVisible:
16
+ id: "consent_privacy_title"
17
+ optional: true
18
+ - assertVisible:
19
+ id: "consent_privacy_subtitle"
20
+ optional: true
21
+ # Verify data collection sections
22
+ - assertVisible:
23
+ id: "consent_data_collection_title"
24
+ optional: true
25
+ - assertVisible:
26
+ id: "consent_data_category_0_card"
27
+ optional: true
28
+ # Verify consent toggles
29
+ - assertVisible:
30
+ id: "consent_analytics_toggle"
31
+ optional: true
32
+ - assertVisible:
33
+ id: "consent_personalization_toggle"
34
+ optional: true
35
+ - assertVisible:
36
+ id: "consent_marketing_toggle"
37
+ optional: true
38
+ # Verify policy links
39
+ - assertVisible:
40
+ id: "consent_privacy_policy_button"
41
+ optional: true
42
+ - assertVisible:
43
+ id: "consent_terms_button"
44
+ optional: true
45
+ # Test Accept All button
10
46
  - tapOn:
11
- text: "Accept All"
47
+ id: "consent_accept_all_button"
12
48
  optional: true
49
+ # Alternative: Accept Selected
13
50
  - tapOn:
14
- text: "Continue"
51
+ id: "consent_accept_selected_button"
15
52
  optional: true
16
- - waitForAnimationToEnd
53
+ # Alternative: Reject All
54
+ - tapOn:
55
+ id: "consent_reject_all_button"
56
+ optional: true
57
+ # After consent, verify home screen appears
58
+ - extendedWaitUntil:
59
+ visible:
60
+ - "Home"
61
+ - "Tasks"
62
+ - "Notes"
63
+ - "Settings"
64
+ timeout: 10000
65
+ - assertVisible:
66
+ text: "Home"
67
+ - assertVisible:
68
+ text: "Tasks"
69
+ - assertVisible:
70
+ text: "Notes"
71
+ - assertVisible:
72
+ text: "Settings"
@@ -2,18 +2,70 @@ appId: ${APP_BUNDLE_ID}
2
2
  ---
3
3
  - clearState
4
4
  - launchApp
5
- - waitForAnimationToEnd
5
+ - extendedWaitUntil:
6
+ visible:
7
+ - "Settings"
8
+ timeout: 10000
9
+ # Handle consent
6
10
  - tapOn:
7
- text: "Accept All"
11
+ id: "consent_accept_all_button"
8
12
  optional: true
9
13
  - tapOn:
10
14
  text: "Continue"
11
15
  optional: true
12
- - waitForAnimationToEnd
16
+ # Navigate to Settings
13
17
  - tapOn:
14
- text: "Paywall"
18
+ text: "Settings"
19
+ - assertVisible:
20
+ text: "Settings"
21
+ # Open paywall via premium button
22
+ - tapOn:
23
+ id: "settings_premium_button"
24
+ optional: true
25
+ # Verify paywall screen elements
26
+ - assertVisible:
27
+ id: "paywall_title"
15
28
  optional: true
16
- - waitForAnimationToEnd
17
29
  - assertVisible:
18
- text: "Premium"
30
+ id: "paywall_subtitle"
19
31
  optional: true
32
+ - assertVisible:
33
+ id: "paywall_features_title"
34
+ optional: true
35
+ # Verify plan cards
36
+ - assertVisible:
37
+ id: "paywall_plan_0_card"
38
+ optional: true
39
+ - assertVisible:
40
+ id: "paywall_plan_1_card"
41
+ optional: true
42
+ - assertVisible:
43
+ id: "paywall_plan_2_card"
44
+ optional: true
45
+ # Interact with plan cards
46
+ - tapOn:
47
+ id: "paywall_plan_0_card"
48
+ optional: true
49
+ - tapOn:
50
+ id: "paywall_plan_1_card"
51
+ optional: true
52
+ # Verify subscribe button
53
+ - assertVisible:
54
+ id: "paywall_subscribe_button"
55
+ optional: true
56
+ # Verify restore button
57
+ - assertVisible:
58
+ id: "paywall_restore_button"
59
+ optional: true
60
+ # Close paywall
61
+ - tapOn:
62
+ id: "paywall_close_button"
63
+ optional: true
64
+ # Verify we're back on settings
65
+ - assertVisible:
66
+ text: "Settings"
67
+ # Navigate back to home
68
+ - tapOn:
69
+ text: "Home"
70
+ - assertVisible:
71
+ text: "Home"
@@ -2,18 +2,49 @@ appId: ${APP_BUNDLE_ID}
2
2
  ---
3
3
  - clearState
4
4
  - launchApp
5
- - waitForAnimationToEnd
5
+ - extendedWaitUntil:
6
+ visible:
7
+ - "Settings"
8
+ timeout: 10000
9
+ # Handle consent
6
10
  - tapOn:
7
- text: "Accept All"
11
+ id: "consent_accept_all_button"
8
12
  optional: true
9
13
  - tapOn:
10
14
  text: "Continue"
11
15
  optional: true
12
- - waitForAnimationToEnd
16
+ # Navigate to Settings
13
17
  - tapOn:
14
- text: "Push Notifications"
18
+ text: "Settings"
19
+ - assertVisible:
20
+ text: "Settings"
21
+ # Open notifications settings
22
+ - tapOn:
23
+ id: "settings_notifications_button"
15
24
  optional: true
16
- - waitForAnimationToEnd
25
+ # Verify push notifications screen
17
26
  - assertVisible:
18
- text: "Notification"
27
+ id: "push_notifications_enable_button"
28
+ optional: true
29
+ # Test enable notifications button (will trigger system permission prompt)
30
+ - tapOn:
31
+ id: "push_notifications_enable_button"
32
+ optional: true
33
+ # Handle system permission dialog if it appears
34
+ - tapOn:
35
+ text: "Allow"
19
36
  optional: true
37
+ - tapOn:
38
+ text: "Don't Allow"
39
+ optional: true
40
+ # Navigate back
41
+ - back
42
+ optional: true
43
+ # Verify we're back on settings
44
+ - assertVisible:
45
+ text: "Settings"
46
+ # Navigate back to home
47
+ - tapOn:
48
+ text: "Home"
49
+ - assertVisible:
50
+ text: "Home"