openuispec 0.2.10 → 0.2.11

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 (231) hide show
  1. package/README.md +3 -1
  2. package/cli/index.ts +4 -2
  3. package/cli/init.ts +23 -8
  4. package/docs/cli.md +13 -8
  5. package/drift/index.ts +41 -15
  6. package/mcp-server/index.ts +155 -116
  7. package/mcp-server/screenshot.ts +19 -4
  8. package/package.json +5 -2
  9. package/prepare/index.ts +16 -0
  10. package/scripts/take-all-screenshots.ts +507 -0
  11. package/status/index.ts +2 -2
  12. package/examples/social-app/.mcp.json +0 -10
  13. package/examples/social-app/AGENTS.md +0 -124
  14. package/examples/social-app/CLAUDE.md +0 -124
  15. package/examples/social-app/backend/.gitkeep +0 -1
  16. package/examples/social-app/generated/android/social-app/app/.paparazzi-hashes.json +0 -3
  17. package/examples/social-app/generated/android/social-app/app/build.gradle.kts +0 -94
  18. package/examples/social-app/generated/android/social-app/app/src/main/AndroidManifest.xml +0 -26
  19. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/AppContainer.kt +0 -20
  20. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/MainActivity.kt +0 -35
  21. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/SocialAppApplication.kt +0 -13
  22. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/data/MockData.kt +0 -98
  23. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/data/preferences/AppPreferences.kt +0 -19
  24. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/data/preferences/DataStorePreferencesRepository.kt +0 -68
  25. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/data/preferences/PreferencesRepository.kt +0 -15
  26. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/model/Models.kt +0 -34
  27. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/MainShell.kt +0 -390
  28. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/components/Components.kt +0 -234
  29. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/components/ContractPrimitives.kt +0 -641
  30. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/navigation/RootComponent.kt +0 -113
  31. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/ChatDetailScreen.kt +0 -212
  32. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/CreatePostScreen.kt +0 -113
  33. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/DiscoverScreen.kt +0 -137
  34. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/EditProfileScreen.kt +0 -180
  35. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/HomeFeedScreen.kt +0 -169
  36. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/MessagesInboxScreen.kt +0 -85
  37. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/NotificationsScreen.kt +0 -74
  38. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/PostDetailScreen.kt +0 -293
  39. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/ProfileSelfScreen.kt +0 -116
  40. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/SearchResultsScreen.kt +0 -161
  41. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/SettingsScreen.kt +0 -164
  42. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/SettingsStore.kt +0 -95
  43. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/screens/UserProfileScreen.kt +0 -123
  44. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/theme/Color.kt +0 -33
  45. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/theme/Shape.kt +0 -41
  46. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/theme/Spacing.kt +0 -20
  47. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/theme/Theme.kt +0 -82
  48. package/examples/social-app/generated/android/social-app/app/src/main/java/com/social/app/ui/theme/Type.kt +0 -60
  49. package/examples/social-app/generated/android/social-app/app/src/main/res/drawable/ic_launcher_foreground.xml +0 -9
  50. package/examples/social-app/generated/android/social-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -5
  51. package/examples/social-app/generated/android/social-app/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -5
  52. package/examples/social-app/generated/android/social-app/app/src/main/res/values/strings.xml +0 -91
  53. package/examples/social-app/generated/android/social-app/app/src/main/res/values/themes.xml +0 -10
  54. package/examples/social-app/generated/android/social-app/app/src/main/res/values-ru/strings.xml +0 -79
  55. package/examples/social-app/generated/android/social-app/app/src/main/res/values-uz/strings.xml +0 -79
  56. package/examples/social-app/generated/android/social-app/app/src/main/xml/AndroidManifest.xml +0 -23
  57. package/examples/social-app/generated/android/social-app/app/src/test/kotlin/com/social/app/screenshots/HomeFeedScreenshotTest.kt +0 -34
  58. package/examples/social-app/generated/android/social-app/build.gradle.kts +0 -7
  59. package/examples/social-app/generated/android/social-app/gradle/libs.versions.toml +0 -50
  60. package/examples/social-app/generated/android/social-app/gradle/wrapper/gradle-wrapper.jar +0 -0
  61. package/examples/social-app/generated/android/social-app/gradle/wrapper/gradle-wrapper.properties +0 -8
  62. package/examples/social-app/generated/android/social-app/gradle.properties +0 -11
  63. package/examples/social-app/generated/android/social-app/gradlew +0 -248
  64. package/examples/social-app/generated/android/social-app/settings.gradle.kts +0 -27
  65. package/examples/social-app/generated/web/social-app/index.html +0 -12
  66. package/examples/social-app/generated/web/social-app/package-lock.json +0 -2517
  67. package/examples/social-app/generated/web/social-app/package.json +0 -27
  68. package/examples/social-app/generated/web/social-app/src/app/App.tsx +0 -58
  69. package/examples/social-app/generated/web/social-app/src/components/Shell.tsx +0 -259
  70. package/examples/social-app/generated/web/social-app/src/components/cards.tsx +0 -317
  71. package/examples/social-app/generated/web/social-app/src/components/ui.tsx +0 -340
  72. package/examples/social-app/generated/web/social-app/src/flows/CreatePostFlow.tsx +0 -86
  73. package/examples/social-app/generated/web/social-app/src/i18n.tsx +0 -59
  74. package/examples/social-app/generated/web/social-app/src/lib/icons.tsx +0 -85
  75. package/examples/social-app/generated/web/social-app/src/lib/tokens.ts +0 -70
  76. package/examples/social-app/generated/web/social-app/src/lib/utils.ts +0 -97
  77. package/examples/social-app/generated/web/social-app/src/locales/en.json +0 -67
  78. package/examples/social-app/generated/web/social-app/src/locales/ru.json +0 -67
  79. package/examples/social-app/generated/web/social-app/src/locales/uz.json +0 -67
  80. package/examples/social-app/generated/web/social-app/src/main.tsx +0 -16
  81. package/examples/social-app/generated/web/social-app/src/screens/ChatDetailScreen.tsx +0 -90
  82. package/examples/social-app/generated/web/social-app/src/screens/DiscoverScreen.tsx +0 -86
  83. package/examples/social-app/generated/web/social-app/src/screens/EditProfileScreen.tsx +0 -57
  84. package/examples/social-app/generated/web/social-app/src/screens/HomeFeedScreen.tsx +0 -103
  85. package/examples/social-app/generated/web/social-app/src/screens/MessagesInboxScreen.tsx +0 -52
  86. package/examples/social-app/generated/web/social-app/src/screens/NotificationsScreen.tsx +0 -41
  87. package/examples/social-app/generated/web/social-app/src/screens/PostDetailScreen.tsx +0 -115
  88. package/examples/social-app/generated/web/social-app/src/screens/ProfileSelfScreen.tsx +0 -57
  89. package/examples/social-app/generated/web/social-app/src/screens/ProfileUserScreen.tsx +0 -76
  90. package/examples/social-app/generated/web/social-app/src/screens/SearchResultsScreen.tsx +0 -96
  91. package/examples/social-app/generated/web/social-app/src/screens/SettingsScreen.tsx +0 -79
  92. package/examples/social-app/generated/web/social-app/src/state/store.ts +0 -592
  93. package/examples/social-app/generated/web/social-app/src/styles.css +0 -125
  94. package/examples/social-app/generated/web/social-app/src/vite-env.d.ts +0 -1
  95. package/examples/social-app/generated/web/social-app/tsconfig.json +0 -22
  96. package/examples/social-app/generated/web/social-app/tsconfig.node.json +0 -13
  97. package/examples/social-app/generated/web/social-app/tsconfig.node.tsbuildinfo +0 -1
  98. package/examples/social-app/generated/web/social-app/tsconfig.tsbuildinfo +0 -1
  99. package/examples/social-app/generated/web/social-app/vite.config.d.ts +0 -2
  100. package/examples/social-app/generated/web/social-app/vite.config.js +0 -6
  101. package/examples/social-app/generated/web/social-app/vite.config.ts +0 -7
  102. package/examples/social-app/package.json +0 -13
  103. package/examples/social-app/take-web-screenshots.ts +0 -97
  104. package/examples/taskflow/.codex/config.toml +0 -4
  105. package/examples/taskflow/.mcp.json +0 -10
  106. package/examples/taskflow/AGENTS.md +0 -124
  107. package/examples/taskflow/CLAUDE.md +0 -124
  108. package/examples/taskflow/backend/.gitkeep +0 -1
  109. package/examples/taskflow/generated/android/TaskFlow/README.md +0 -43
  110. package/examples/taskflow/generated/android/TaskFlow/app/build.gradle.kts +0 -76
  111. package/examples/taskflow/generated/android/TaskFlow/app/proguard-rules.pro +0 -1
  112. package/examples/taskflow/generated/android/TaskFlow/app/src/main/AndroidManifest.xml +0 -21
  113. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/MainActivity.kt +0 -19
  114. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/TaskFlowApp.kt +0 -283
  115. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/model/DomainModels.kt +0 -106
  116. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/model/SampleData.kt +0 -57
  117. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/components/Common.kt +0 -109
  118. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/HomeScreen.kt +0 -112
  119. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/ProjectsScreen.kt +0 -61
  120. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/SettingsScreen.kt +0 -82
  121. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/TaskDetailScreen.kt +0 -111
  122. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/sheets/Sheets.kt +0 -77
  123. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Color.kt +0 -30
  124. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Theme.kt +0 -86
  125. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Type.kt +0 -57
  126. package/examples/taskflow/generated/android/TaskFlow/app/src/main/res/values/strings.xml +0 -155
  127. package/examples/taskflow/generated/android/TaskFlow/app/src/main/res/values/themes.xml +0 -4
  128. package/examples/taskflow/generated/android/TaskFlow/build.gradle.kts +0 -5
  129. package/examples/taskflow/generated/android/TaskFlow/gradle/gradle-daemon-jvm.properties +0 -12
  130. package/examples/taskflow/generated/android/TaskFlow/gradle/wrapper/gradle-wrapper.jar +0 -0
  131. package/examples/taskflow/generated/android/TaskFlow/gradle/wrapper/gradle-wrapper.properties +0 -7
  132. package/examples/taskflow/generated/android/TaskFlow/gradle.properties +0 -4
  133. package/examples/taskflow/generated/android/TaskFlow/gradlew +0 -18
  134. package/examples/taskflow/generated/android/TaskFlow/gradlew.bat +0 -12
  135. package/examples/taskflow/generated/android/TaskFlow/settings.gradle.kts +0 -18
  136. package/examples/taskflow/generated/ios/TaskFlow/README.md +0 -21
  137. package/examples/taskflow/generated/ios/TaskFlow/Resources/en.lproj/Localizable.strings +0 -115
  138. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/App/TaskFlowApp.swift +0 -24
  139. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Components/AppChrome.swift +0 -150
  140. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Flows/TaskEditorSheet.swift +0 -220
  141. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Models/DomainModels.swift +0 -122
  142. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/CalendarView.swift +0 -21
  143. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/HomeView.swift +0 -201
  144. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProfileEditView.swift +0 -48
  145. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProjectDetailView.swift +0 -59
  146. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProjectsView.swift +0 -63
  147. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/SettingsView.swift +0 -85
  148. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/TaskDetailView.swift +0 -219
  149. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Support/AppModel.swift +0 -320
  150. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Support/AppSupport.swift +0 -41
  151. package/examples/taskflow/generated/ios/TaskFlow/project.yml +0 -31
  152. package/examples/taskflow/generated/web/TaskFlow/README.md +0 -19
  153. package/examples/taskflow/generated/web/TaskFlow/index.html +0 -12
  154. package/examples/taskflow/generated/web/TaskFlow/package-lock.json +0 -1908
  155. package/examples/taskflow/generated/web/TaskFlow/package.json +0 -24
  156. package/examples/taskflow/generated/web/TaskFlow/src/App.tsx +0 -58
  157. package/examples/taskflow/generated/web/TaskFlow/src/AppShell.tsx +0 -55
  158. package/examples/taskflow/generated/web/TaskFlow/src/components/Common.tsx +0 -82
  159. package/examples/taskflow/generated/web/TaskFlow/src/components/Modals.tsx +0 -191
  160. package/examples/taskflow/generated/web/TaskFlow/src/components/Nav.tsx +0 -41
  161. package/examples/taskflow/generated/web/TaskFlow/src/generated/messages.ts +0 -131
  162. package/examples/taskflow/generated/web/TaskFlow/src/hooks.ts +0 -25
  163. package/examples/taskflow/generated/web/TaskFlow/src/i18n.ts +0 -39
  164. package/examples/taskflow/generated/web/TaskFlow/src/locales.en.json +0 -111
  165. package/examples/taskflow/generated/web/TaskFlow/src/main.tsx +0 -13
  166. package/examples/taskflow/generated/web/TaskFlow/src/screens/HomeScreen.tsx +0 -111
  167. package/examples/taskflow/generated/web/TaskFlow/src/screens/ProjectsScreen.tsx +0 -82
  168. package/examples/taskflow/generated/web/TaskFlow/src/screens/SettingsScreens.tsx +0 -132
  169. package/examples/taskflow/generated/web/TaskFlow/src/screens/TaskDetail.tsx +0 -105
  170. package/examples/taskflow/generated/web/TaskFlow/src/store.ts +0 -216
  171. package/examples/taskflow/generated/web/TaskFlow/src/styles.css +0 -617
  172. package/examples/taskflow/generated/web/TaskFlow/src/types.ts +0 -64
  173. package/examples/taskflow/generated/web/TaskFlow/src/utils.ts +0 -78
  174. package/examples/taskflow/generated/web/TaskFlow/tsconfig.json +0 -21
  175. package/examples/taskflow/generated/web/TaskFlow/vite.config.ts +0 -6
  176. package/examples/todo-orbit/.codex/config.toml +0 -4
  177. package/examples/todo-orbit/.mcp.json +0 -10
  178. package/examples/todo-orbit/AGENTS.md +0 -124
  179. package/examples/todo-orbit/CLAUDE.md +0 -124
  180. package/examples/todo-orbit/backend/.gitkeep +0 -1
  181. package/examples/todo-orbit/generated/android/Todo Orbit/README.md +0 -14
  182. package/examples/todo-orbit/generated/android/Todo Orbit/app/build.gradle.kts +0 -58
  183. package/examples/todo-orbit/generated/android/Todo Orbit/app/proguard-rules.pro +0 -1
  184. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/AndroidManifest.xml +0 -20
  185. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/MainActivity.kt +0 -14
  186. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/TodoOrbitApp.kt +0 -345
  187. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/support/AppLogic.kt +0 -231
  188. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/support/Models.kt +0 -169
  189. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/support/Strings.kt +0 -8
  190. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/components/CommonComponents.kt +0 -236
  191. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/screens/AnalyticsScreen.kt +0 -193
  192. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/screens/SettingsScreen.kt +0 -102
  193. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/screens/TasksScreen.kt +0 -347
  194. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/sheets/EditorSheets.kt +0 -347
  195. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/java/uz/rsteam/todoorbit/ui/theme/TodoOrbitTheme.kt +0 -59
  196. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/res/values/strings.xml +0 -149
  197. package/examples/todo-orbit/generated/android/Todo Orbit/app/src/main/res/values-ru/strings.xml +0 -155
  198. package/examples/todo-orbit/generated/android/Todo Orbit/build.gradle.kts +0 -4
  199. package/examples/todo-orbit/generated/android/Todo Orbit/gradle/wrapper/gradle-wrapper.jar +0 -0
  200. package/examples/todo-orbit/generated/android/Todo Orbit/gradle/wrapper/gradle-wrapper.properties +0 -7
  201. package/examples/todo-orbit/generated/android/Todo Orbit/gradle.properties +0 -4
  202. package/examples/todo-orbit/generated/android/Todo Orbit/gradlew +0 -248
  203. package/examples/todo-orbit/generated/android/Todo Orbit/gradlew.bat +0 -93
  204. package/examples/todo-orbit/generated/android/Todo Orbit/settings.gradle.kts +0 -18
  205. package/examples/todo-orbit/generated/ios/Todo Orbit/.screenshot-uitest/Sources/ScreenshotUITest.swift +0 -36
  206. package/examples/todo-orbit/generated/ios/Todo Orbit/README.md +0 -29
  207. package/examples/todo-orbit/generated/ios/Todo Orbit/Resources/en.lproj/Localizable.strings +0 -119
  208. package/examples/todo-orbit/generated/ios/Todo Orbit/Resources/ru.lproj/Localizable.strings +0 -119
  209. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/App/TodoOrbitApp.swift +0 -50
  210. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Components/OrbitChrome.swift +0 -204
  211. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Components/SchedulePreviewView.swift +0 -126
  212. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Components/TrendChartView.swift +0 -70
  213. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Flows/RecurringRuleSheet.swift +0 -126
  214. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Flows/TaskEditorSheet.swift +0 -61
  215. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Models/DomainModels.swift +0 -238
  216. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Screens/AnalyticsView.swift +0 -94
  217. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Screens/SettingsView.swift +0 -76
  218. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Screens/TasksHomeView.swift +0 -364
  219. package/examples/todo-orbit/generated/ios/Todo Orbit/Sources/TodoOrbit/Support/AppModel.swift +0 -324
  220. package/examples/todo-orbit/generated/ios/Todo Orbit/TodoOrbit.xcodeproj/project.pbxproj +0 -439
  221. package/examples/todo-orbit/generated/ios/Todo Orbit/TodoOrbit.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  222. package/examples/todo-orbit/generated/ios/Todo Orbit/TodoOrbit.xcodeproj/xcshareddata/xcschemes/TodoOrbit.xcscheme +0 -89
  223. package/examples/todo-orbit/generated/ios/Todo Orbit/project.yml +0 -32
  224. package/examples/todo-orbit/generated/web/Todo Orbit/index.html +0 -16
  225. package/examples/todo-orbit/generated/web/Todo Orbit/package-lock.json +0 -1087
  226. package/examples/todo-orbit/generated/web/Todo Orbit/package.json +0 -24
  227. package/examples/todo-orbit/generated/web/Todo Orbit/src/App.tsx +0 -2167
  228. package/examples/todo-orbit/generated/web/Todo Orbit/src/main.tsx +0 -13
  229. package/examples/todo-orbit/generated/web/Todo Orbit/src/styles.css +0 -926
  230. package/examples/todo-orbit/generated/web/Todo Orbit/tsconfig.json +0 -19
  231. package/examples/todo-orbit/generated/web/Todo Orbit/vite.config.ts +0 -6
@@ -1,293 +0,0 @@
1
- package com.social.app.ui.screens
2
-
3
- import androidx.compose.foundation.clickable
4
- import androidx.compose.foundation.layout.Arrangement
5
- import androidx.compose.foundation.layout.Column
6
- import androidx.compose.foundation.layout.PaddingValues
7
- import androidx.compose.foundation.layout.Row
8
- import androidx.compose.foundation.layout.fillMaxSize
9
- import androidx.compose.foundation.layout.fillMaxWidth
10
- import androidx.compose.foundation.layout.heightIn
11
- import androidx.compose.foundation.layout.imePadding
12
- import androidx.compose.foundation.layout.padding
13
- import androidx.compose.foundation.layout.size
14
- import androidx.compose.foundation.lazy.LazyColumn
15
- import androidx.compose.foundation.lazy.items
16
- import androidx.compose.material.icons.Icons
17
- import androidx.compose.material.icons.automirrored.filled.ArrowBack
18
- import androidx.compose.material.icons.filled.Send
19
- import androidx.compose.material.icons.outlined.ChatBubbleOutline
20
- import androidx.compose.material.icons.outlined.FavoriteBorder
21
- import androidx.compose.material3.ExperimentalMaterial3Api
22
- import androidx.compose.material3.Icon
23
- import androidx.compose.material3.IconButton
24
- import androidx.compose.material3.IconButtonDefaults
25
- import androidx.compose.material3.MaterialTheme
26
- import androidx.compose.material3.Scaffold
27
- import androidx.compose.material3.SnackbarHostState
28
- import androidx.compose.material3.Surface
29
- import androidx.compose.material3.Text
30
- import androidx.compose.material3.TopAppBar
31
- import androidx.compose.material3.TopAppBarDefaults
32
- import androidx.compose.runtime.Composable
33
- import androidx.compose.runtime.getValue
34
- import androidx.compose.runtime.mutableStateOf
35
- import androidx.compose.runtime.remember
36
- import androidx.compose.runtime.rememberCoroutineScope
37
- import androidx.compose.runtime.setValue
38
- import androidx.compose.ui.Alignment
39
- import androidx.compose.ui.Modifier
40
- import androidx.compose.ui.layout.ContentScale
41
- import androidx.compose.ui.res.stringResource
42
- import androidx.compose.ui.unit.dp
43
- import coil3.compose.AsyncImage
44
- import com.social.app.R
45
- import com.social.app.data.MockData
46
- import com.social.app.ui.components.ActionTriggerButton
47
- import com.social.app.ui.components.ActionTriggerVariant
48
- import com.social.app.ui.components.ContractListCard
49
- import com.social.app.ui.components.ContractSectionHeader
50
- import com.social.app.ui.components.ContractSnackbarHost
51
- import com.social.app.ui.components.ContractTextField
52
- import com.social.app.ui.theme.Shapes
53
- import com.social.app.ui.theme.Spacing
54
- import kotlinx.coroutines.delay
55
- import kotlinx.coroutines.launch
56
-
57
- private data class CommentItem(
58
- val authorId: String,
59
- val authorName: String,
60
- val authorAvatar: String?,
61
- val body: String,
62
- val timestamp: String,
63
- )
64
-
65
- @OptIn(ExperimentalMaterial3Api::class)
66
- @Composable
67
- fun PostDetailScreen(
68
- postId: String,
69
- onBackClick: () -> Unit,
70
- onUserClick: (String) -> Unit,
71
- ) {
72
- val post = MockData.posts.find { it.id == postId } ?: MockData.posts[0]
73
- val comments =
74
- remember(postId) {
75
- listOf(
76
- CommentItem(
77
- authorId = "u_9921",
78
- authorName = "Elara Vance",
79
- authorAvatar = MockData.users.find { it.id == "u_9921" }?.avatarUrl,
80
- body = "The framing on this is excellent. That early-morning light is doing a lot of work.",
81
- timestamp = "18m ago",
82
- ),
83
- CommentItem(
84
- authorId = "u_4432",
85
- authorName = "Kai Nakamura",
86
- authorAvatar = MockData.users.find { it.id == "u_4432" }?.avatarUrl,
87
- body = "You captured the quiet before the rush really well.",
88
- timestamp = "42m ago",
89
- ),
90
- CommentItem(
91
- authorId = "user_me",
92
- authorName = "Rustam Abdurahmonov",
93
- authorAvatar = MockData.users.find { it.id == "user_me" }?.avatarUrl,
94
- body = "Appreciate it. The empty room was the whole reason I stopped in.",
95
- timestamp = "1h ago",
96
- ),
97
- )
98
- }
99
- var commentText by remember { mutableStateOf("") }
100
- val snackbarHostState = remember { SnackbarHostState() }
101
- val scope = rememberCoroutineScope()
102
- val commentSentLabel = stringResource(R.string.post_comment_sent)
103
-
104
- Scaffold(
105
- snackbarHost = { ContractSnackbarHost(hostState = snackbarHostState) },
106
- topBar = {
107
- TopAppBar(
108
- title = { Text(post.authorName) },
109
- navigationIcon = {
110
- IconButton(onClick = onBackClick) {
111
- Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)
112
- }
113
- },
114
- colors = TopAppBarDefaults.topAppBarColors(containerColor = MaterialTheme.colorScheme.surface),
115
- )
116
- },
117
- bottomBar = {
118
- Surface(
119
- tonalElevation = 2.dp,
120
- modifier = Modifier.imePadding(),
121
- ) {
122
- Row(
123
- modifier =
124
- Modifier
125
- .fillMaxWidth()
126
- .padding(Spacing.MD),
127
- verticalAlignment = Alignment.CenterVertically,
128
- ) {
129
- ContractTextField(
130
- value = commentText,
131
- onValueChange = { commentText = it },
132
- modifier = Modifier.weight(1f),
133
- label = stringResource(R.string.post_comment_placeholder),
134
- placeholder = stringResource(R.string.post_comment_placeholder),
135
- singleLine = false,
136
- maxLines = 4,
137
- trailingAction = {
138
- IconButton(
139
- onClick = {
140
- commentText = ""
141
- scope.launch {
142
- snackbarHostState.currentSnackbarData?.dismiss()
143
- snackbarHostState.showSnackbar(message = commentSentLabel)
144
- }
145
- scope.launch {
146
- delay(3000)
147
- snackbarHostState.currentSnackbarData?.dismiss()
148
- }
149
- },
150
- enabled = commentText.isNotBlank(),
151
- colors =
152
- IconButtonDefaults.iconButtonColors(
153
- contentColor = MaterialTheme.colorScheme.primary,
154
- ),
155
- ) {
156
- Icon(Icons.Default.Send, contentDescription = null)
157
- }
158
- },
159
- )
160
- }
161
- }
162
- },
163
- ) { padding ->
164
- LazyColumn(
165
- modifier =
166
- Modifier
167
- .fillMaxSize()
168
- .padding(padding),
169
- contentPadding = PaddingValues(bottom = Spacing.MD),
170
- verticalArrangement = Arrangement.spacedBy(Spacing.SM),
171
- ) {
172
- item {
173
- Surface(
174
- modifier =
175
- Modifier
176
- .fillMaxWidth()
177
- .padding(horizontal = Spacing.MD, vertical = Spacing.SM)
178
- .clickable { onUserClick(post.authorId) },
179
- shape = Shapes.HeroShape,
180
- color = MaterialTheme.colorScheme.surfaceVariant,
181
- ) {
182
- Column(
183
- modifier =
184
- Modifier
185
- .fillMaxWidth()
186
- .padding(Spacing.LG),
187
- verticalArrangement = Arrangement.spacedBy(Spacing.MD),
188
- ) {
189
- Row(
190
- horizontalArrangement = Arrangement.spacedBy(Spacing.SM),
191
- verticalAlignment = Alignment.CenterVertically,
192
- ) {
193
- Surface(
194
- modifier = Modifier.size(52.dp),
195
- shape = Shapes.RoundedCapPrimary,
196
- color = MaterialTheme.colorScheme.surface,
197
- ) {
198
- if (post.authorAvatar != null) {
199
- AsyncImage(
200
- model = post.authorAvatar,
201
- contentDescription = post.authorName,
202
- modifier = Modifier.fillMaxSize(),
203
- contentScale = ContentScale.Crop,
204
- )
205
- }
206
- }
207
- Column {
208
- Text(post.authorName, style = MaterialTheme.typography.headlineLarge)
209
- Text(
210
- text = "@${post.authorHandle}",
211
- style = MaterialTheme.typography.bodyMedium,
212
- color = MaterialTheme.colorScheme.onSurfaceVariant,
213
- )
214
- }
215
- }
216
-
217
- Text(
218
- text = post.body,
219
- style = MaterialTheme.typography.bodyLarge,
220
- color = MaterialTheme.colorScheme.onSurface,
221
- )
222
-
223
- if (post.mediaUrl != null) {
224
- AsyncImage(
225
- model = post.mediaUrl,
226
- contentDescription = null,
227
- modifier =
228
- Modifier
229
- .fillMaxWidth()
230
- .heightIn(max = 400.dp),
231
- contentScale = ContentScale.Crop,
232
- )
233
- }
234
-
235
- Row(
236
- horizontalArrangement = Arrangement.spacedBy(Spacing.LG),
237
- verticalAlignment = Alignment.CenterVertically,
238
- ) {
239
- Row(
240
- horizontalArrangement = Arrangement.spacedBy(Spacing.XS),
241
- verticalAlignment = Alignment.CenterVertically,
242
- ) {
243
- Icon(Icons.Outlined.FavoriteBorder, contentDescription = null, modifier = Modifier.size(20.dp))
244
- Text(post.likeCount.toString(), style = MaterialTheme.typography.labelLarge)
245
- }
246
- Row(
247
- horizontalArrangement = Arrangement.spacedBy(Spacing.XS),
248
- verticalAlignment = Alignment.CenterVertically,
249
- ) {
250
- Icon(Icons.Outlined.ChatBubbleOutline, contentDescription = null, modifier = Modifier.size(20.dp))
251
- Text(post.commentCount.toString(), style = MaterialTheme.typography.labelLarge)
252
- }
253
- }
254
- }
255
- }
256
- }
257
-
258
- item {
259
- ActionTriggerButton(
260
- text = stringResource(R.string.post_like_action),
261
- onClick = {},
262
- modifier = Modifier.padding(horizontal = Spacing.MD),
263
- variant = ActionTriggerVariant.Secondary,
264
- icon = { Icon(Icons.Outlined.FavoriteBorder, contentDescription = null) },
265
- )
266
- }
267
-
268
- item {
269
- ContractSectionHeader(stringResource(R.string.post_comments_header))
270
- }
271
-
272
- if (comments.isEmpty()) {
273
- item {
274
- ContractListCard(
275
- title = stringResource(R.string.post_no_comments),
276
- modifier = Modifier.padding(horizontal = Spacing.MD),
277
- )
278
- }
279
- } else {
280
- items(comments) { comment ->
281
- ContractListCard(
282
- title = comment.authorName,
283
- body = comment.body,
284
- trailing = comment.timestamp,
285
- avatarUrl = comment.authorAvatar,
286
- modifier = Modifier.padding(horizontal = Spacing.MD),
287
- onClick = { onUserClick(comment.authorId) },
288
- )
289
- }
290
- }
291
- }
292
- }
293
- }
@@ -1,116 +0,0 @@
1
- package com.social.app.ui.screens
2
-
3
- import androidx.compose.foundation.layout.Box
4
- import androidx.compose.foundation.layout.fillMaxSize
5
- import androidx.compose.foundation.layout.fillMaxWidth
6
- import androidx.compose.foundation.layout.padding
7
- import androidx.compose.foundation.lazy.LazyColumn
8
- import androidx.compose.foundation.lazy.items
9
- import androidx.compose.material.icons.Icons
10
- import androidx.compose.material.icons.filled.Edit
11
- import androidx.compose.material.icons.filled.Settings
12
- import androidx.compose.material3.CenterAlignedTopAppBar
13
- import androidx.compose.material3.ExperimentalMaterial3Api
14
- import androidx.compose.material3.Icon
15
- import androidx.compose.material3.IconButton
16
- import androidx.compose.material3.MaterialTheme
17
- import androidx.compose.material3.Scaffold
18
- import androidx.compose.material3.Text
19
- import androidx.compose.material3.TopAppBarDefaults
20
- import androidx.compose.runtime.Composable
21
- import androidx.compose.ui.Alignment
22
- import androidx.compose.ui.Modifier
23
- import androidx.compose.ui.res.stringResource
24
- import com.social.app.R
25
- import com.social.app.data.MockData
26
- import com.social.app.ui.components.ActionTriggerVariant
27
- import com.social.app.ui.components.ContractListCard
28
- import com.social.app.ui.components.ContractSectionHeader
29
- import com.social.app.ui.components.PostItem
30
- import com.social.app.ui.components.ProfileHeroCard
31
- import com.social.app.ui.theme.Spacing
32
-
33
- @OptIn(ExperimentalMaterial3Api::class)
34
- @Composable
35
- fun ProfileSelfScreen(
36
- onEditProfileClick: () -> Unit,
37
- onPostClick: (String) -> Unit,
38
- onSettingsClick: () -> Unit
39
- ) {
40
- val user = MockData.users.find { it.id == "user_me" } ?: MockData.users[0]
41
- val userPosts = MockData.posts.filter { it.authorId == user.id }
42
-
43
- Scaffold(
44
- modifier = Modifier.fillMaxSize(),
45
- topBar = {
46
- CenterAlignedTopAppBar(
47
- title = { Text(stringResource(R.string.nav_profile)) },
48
- actions = {
49
- IconButton(onClick = onSettingsClick) {
50
- Icon(Icons.Default.Settings, contentDescription = stringResource(R.string.nav_settings))
51
- }
52
- },
53
- colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
54
- containerColor = MaterialTheme.colorScheme.surface
55
- )
56
- )
57
- }
58
- ) { padding ->
59
- LazyColumn(
60
- modifier = Modifier
61
- .fillMaxSize()
62
- .padding(padding)
63
- ) {
64
- item {
65
- ProfileHeroCard(
66
- title = user.displayName,
67
- subtitle = "@${user.handle}",
68
- body = user.bio,
69
- avatarUrl = user.avatarUrl,
70
- modifier = Modifier
71
- .fillMaxWidth()
72
- .padding(Spacing.MD),
73
- actionLabel = stringResource(R.string.profile_edit_button),
74
- actionVariant = ActionTriggerVariant.Secondary,
75
- actionIcon = { Icon(Icons.Default.Edit, contentDescription = null) },
76
- onActionClick = onEditProfileClick,
77
- )
78
- }
79
-
80
- item {
81
- ContractSectionHeader(stringResource(R.string.profile_posts_header))
82
- }
83
-
84
- if (userPosts.isEmpty()) {
85
- item {
86
- Box(
87
- modifier =
88
- Modifier
89
- .fillMaxWidth()
90
- .padding(horizontal = Spacing.MD, vertical = Spacing.SM),
91
- contentAlignment = Alignment.Center,
92
- ) {
93
- ContractListCard(
94
- title = stringResource(R.string.profile_no_posts_self),
95
- )
96
- }
97
- }
98
- } else {
99
- items(userPosts) { post ->
100
- PostItem(
101
- authorName = post.authorName,
102
- authorHandle = post.authorHandle,
103
- body = post.body,
104
- likeCount = post.likeCount,
105
- commentCount = post.commentCount,
106
- timestamp = post.timestamp,
107
- mediaUrl = post.mediaUrl,
108
- onLikeClick = {},
109
- onAuthorClick = {},
110
- onCommentClick = { onPostClick(post.id) },
111
- )
112
- }
113
- }
114
- }
115
- }
116
- }
@@ -1,161 +0,0 @@
1
- package com.social.app.ui.screens
2
-
3
- import androidx.compose.foundation.layout.Arrangement
4
- import androidx.compose.foundation.layout.fillMaxSize
5
- import androidx.compose.foundation.layout.padding
6
- import androidx.compose.foundation.lazy.LazyColumn
7
- import androidx.compose.foundation.lazy.items
8
- import androidx.compose.material.icons.Icons
9
- import androidx.compose.material.icons.automirrored.filled.ArrowBack
10
- import androidx.compose.material.icons.filled.Search
11
- import androidx.compose.material3.ExperimentalMaterial3Api
12
- import androidx.compose.material3.Icon
13
- import androidx.compose.material3.IconButton
14
- import androidx.compose.material3.Scaffold
15
- import androidx.compose.material3.Text
16
- import androidx.compose.material3.TopAppBar
17
- import androidx.compose.material3.TopAppBarDefaults
18
- import androidx.compose.runtime.Composable
19
- import androidx.compose.runtime.getValue
20
- import androidx.compose.runtime.mutableStateOf
21
- import androidx.compose.runtime.remember
22
- import androidx.compose.runtime.setValue
23
- import androidx.compose.ui.Modifier
24
- import androidx.compose.ui.res.stringResource
25
- import com.social.app.R
26
- import com.social.app.data.MockData
27
- import com.social.app.ui.components.ChipOption
28
- import com.social.app.ui.components.CompactResultRow
29
- import com.social.app.ui.components.ContractChipRow
30
- import com.social.app.ui.components.ContractTextField
31
- import com.social.app.ui.components.PostItem
32
- import com.social.app.ui.theme.Spacing
33
-
34
- @OptIn(ExperimentalMaterial3Api::class)
35
- @Composable
36
- fun SearchResultsScreen(
37
- query: String,
38
- initialTab: String = "posts",
39
- onBackClick: () -> Unit,
40
- onPostClick: (String) -> Unit,
41
- onUserClick: (String) -> Unit
42
- ) {
43
- var searchQuery by remember { mutableStateOf(query) }
44
- var activeTab by remember { mutableStateOf(initialTab) }
45
-
46
- Scaffold(
47
- topBar = {
48
- TopAppBar(
49
- title = { Text(stringResource(R.string.search_placeholder)) },
50
- navigationIcon = {
51
- IconButton(onClick = onBackClick) {
52
- Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)
53
- }
54
- },
55
- colors = TopAppBarDefaults.topAppBarColors(containerColor = androidx.compose.material3.MaterialTheme.colorScheme.surface)
56
- )
57
- }
58
- ) { padding ->
59
- LazyColumn(
60
- modifier = Modifier
61
- .fillMaxSize()
62
- .padding(padding),
63
- verticalArrangement = Arrangement.spacedBy(Spacing.SM),
64
- ) {
65
- item {
66
- ContractTextField(
67
- value = searchQuery,
68
- onValueChange = { searchQuery = it },
69
- modifier = Modifier.padding(horizontal = Spacing.MD, vertical = Spacing.SM),
70
- label = stringResource(R.string.search_placeholder),
71
- placeholder = stringResource(R.string.search_placeholder),
72
- leadingIcon = { Icon(Icons.Default.Search, contentDescription = null) },
73
- )
74
- }
75
-
76
- item {
77
- ContractChipRow(
78
- options =
79
- listOf(
80
- ChipOption("posts", stringResource(R.string.search_tab_posts)),
81
- ChipOption("people", stringResource(R.string.search_tab_people)),
82
- ChipOption("tags", stringResource(R.string.search_tab_tags)),
83
- ),
84
- selectedValue = activeTab,
85
- onSelect = { activeTab = it.value },
86
- )
87
- }
88
-
89
- when (activeTab) {
90
- "posts" -> {
91
- if (MockData.posts.isEmpty()) {
92
- item {
93
- Text(
94
- text = stringResource(R.string.search_no_results),
95
- modifier = Modifier.padding(horizontal = Spacing.MD, vertical = Spacing.XL),
96
- )
97
- }
98
- } else {
99
- items(MockData.posts) { post ->
100
- PostItem(
101
- authorName = post.authorName,
102
- authorHandle = post.authorHandle,
103
- authorAvatar = post.authorAvatar,
104
- body = post.body,
105
- likeCount = post.likeCount,
106
- commentCount = post.commentCount,
107
- timestamp = post.timestamp,
108
- mediaUrl = post.mediaUrl,
109
- onLikeClick = {},
110
- onCommentClick = { onPostClick(post.id) },
111
- onAuthorClick = { onUserClick(post.authorId) }
112
- )
113
- }
114
- }
115
- }
116
- "people" -> {
117
- val people = MockData.users
118
- if (people.isEmpty()) {
119
- item {
120
- Text(
121
- text = stringResource(R.string.search_no_results),
122
- modifier = Modifier.padding(horizontal = Spacing.MD, vertical = Spacing.XL),
123
- )
124
- }
125
- } else {
126
- items(people) { user ->
127
- val linkedPostId = MockData.posts.find { it.authorId == user.id }?.id ?: MockData.posts.firstOrNull()?.id
128
- CompactResultRow(
129
- title = user.displayName,
130
- subtitle = "@${user.handle}",
131
- avatarUrl = user.avatarUrl,
132
- onClick = { linkedPostId?.let(onPostClick) },
133
- )
134
- }
135
- }
136
- }
137
- "tags" -> {
138
- val tags = MockData.trends
139
- if (tags.isEmpty()) {
140
- item {
141
- Text(
142
- text = stringResource(R.string.search_no_results),
143
- modifier = Modifier.padding(horizontal = Spacing.MD, vertical = Spacing.XL),
144
- )
145
- }
146
- } else {
147
- items(tags) { trend ->
148
- val linkedPostId = MockData.posts.firstOrNull()?.id
149
- CompactResultRow(
150
- title = "#${trend.label}",
151
- subtitle = trend.postCount.toString(),
152
- avatarUrl = null,
153
- onClick = { linkedPostId?.let(onPostClick) },
154
- )
155
- }
156
- }
157
- }
158
- }
159
- }
160
- }
161
- }