openuispec 0.1.27 → 0.1.29

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 (123) hide show
  1. package/README.md +52 -55
  2. package/cli/configure-target.ts +416 -0
  3. package/cli/index.ts +14 -3
  4. package/cli/init.ts +241 -55
  5. package/cli/target-presets.json +746 -0
  6. package/docs/implementation-notes.md +47 -10
  7. package/docs/release-notes-v0.1.26.md +1 -1
  8. package/docs/release-notes-v0.1.28.md +25 -0
  9. package/docs/stress-test-maturity-report.md +1 -1
  10. package/drift/index.ts +31 -11
  11. package/examples/taskflow/AGENTS.md +113 -0
  12. package/examples/taskflow/CLAUDE.md +113 -0
  13. package/examples/taskflow/backend/.gitkeep +1 -0
  14. package/examples/taskflow/generated/android/TaskFlow/README.md +43 -0
  15. package/examples/taskflow/generated/android/TaskFlow/app/build.gradle.kts +76 -0
  16. package/examples/taskflow/generated/android/TaskFlow/app/proguard-rules.pro +1 -0
  17. package/examples/taskflow/generated/android/TaskFlow/app/src/main/AndroidManifest.xml +21 -0
  18. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/MainActivity.kt +19 -0
  19. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/TaskFlowApp.kt +283 -0
  20. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/model/DomainModels.kt +106 -0
  21. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/model/SampleData.kt +57 -0
  22. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/components/Common.kt +109 -0
  23. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/HomeScreen.kt +112 -0
  24. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/ProjectsScreen.kt +61 -0
  25. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/SettingsScreen.kt +82 -0
  26. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/screens/TaskDetailScreen.kt +111 -0
  27. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/sheets/Sheets.kt +77 -0
  28. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Color.kt +30 -0
  29. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Theme.kt +86 -0
  30. package/examples/taskflow/generated/android/TaskFlow/app/src/main/java/uz/rsteam/taskflow/ui/theme/Type.kt +57 -0
  31. package/examples/taskflow/generated/android/TaskFlow/app/src/main/res/values/strings.xml +155 -0
  32. package/examples/taskflow/generated/android/TaskFlow/app/src/main/res/values/themes.xml +4 -0
  33. package/examples/taskflow/generated/android/TaskFlow/build.gradle.kts +5 -0
  34. package/examples/taskflow/generated/android/TaskFlow/gradle/gradle-daemon-jvm.properties +12 -0
  35. package/examples/taskflow/generated/android/TaskFlow/gradle/wrapper/gradle-wrapper.jar +0 -0
  36. package/examples/taskflow/generated/android/TaskFlow/gradle/wrapper/gradle-wrapper.properties +7 -0
  37. package/examples/taskflow/generated/android/TaskFlow/gradle.properties +4 -0
  38. package/examples/taskflow/generated/android/TaskFlow/gradlew +18 -0
  39. package/examples/taskflow/generated/android/TaskFlow/gradlew.bat +12 -0
  40. package/examples/taskflow/generated/android/TaskFlow/settings.gradle.kts +18 -0
  41. package/examples/taskflow/generated/ios/TaskFlow/README.md +21 -0
  42. package/examples/taskflow/generated/ios/TaskFlow/Resources/en.lproj/Localizable.strings +115 -0
  43. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/App/TaskFlowApp.swift +24 -0
  44. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Components/AppChrome.swift +150 -0
  45. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Flows/TaskEditorSheet.swift +220 -0
  46. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Models/DomainModels.swift +122 -0
  47. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/CalendarView.swift +21 -0
  48. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/HomeView.swift +201 -0
  49. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProfileEditView.swift +48 -0
  50. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProjectDetailView.swift +59 -0
  51. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/ProjectsView.swift +63 -0
  52. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/SettingsView.swift +85 -0
  53. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Screens/TaskDetailView.swift +219 -0
  54. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Support/AppModel.swift +320 -0
  55. package/examples/taskflow/generated/ios/TaskFlow/Sources/TaskFlow/Support/AppSupport.swift +41 -0
  56. package/examples/taskflow/generated/ios/TaskFlow/project.yml +26 -0
  57. package/examples/taskflow/generated/web/TaskFlow/README.md +19 -0
  58. package/examples/taskflow/generated/web/TaskFlow/index.html +12 -0
  59. package/examples/taskflow/generated/web/TaskFlow/package-lock.json +1908 -0
  60. package/examples/taskflow/generated/web/TaskFlow/package.json +24 -0
  61. package/examples/taskflow/generated/web/TaskFlow/src/App.tsx +58 -0
  62. package/examples/taskflow/generated/web/TaskFlow/src/AppShell.tsx +55 -0
  63. package/examples/taskflow/generated/web/TaskFlow/src/components/Common.tsx +82 -0
  64. package/examples/taskflow/generated/web/TaskFlow/src/components/Modals.tsx +191 -0
  65. package/examples/taskflow/generated/web/TaskFlow/src/components/Nav.tsx +41 -0
  66. package/examples/taskflow/generated/web/TaskFlow/src/generated/messages.ts +131 -0
  67. package/examples/taskflow/generated/web/TaskFlow/src/hooks.ts +25 -0
  68. package/examples/taskflow/generated/web/TaskFlow/src/i18n.ts +39 -0
  69. package/examples/taskflow/generated/web/TaskFlow/src/locales.en.json +111 -0
  70. package/examples/taskflow/generated/web/TaskFlow/src/main.tsx +13 -0
  71. package/examples/taskflow/generated/web/TaskFlow/src/screens/HomeScreen.tsx +111 -0
  72. package/examples/taskflow/generated/web/TaskFlow/src/screens/ProjectsScreen.tsx +82 -0
  73. package/examples/taskflow/generated/web/TaskFlow/src/screens/SettingsScreens.tsx +132 -0
  74. package/examples/taskflow/generated/web/TaskFlow/src/screens/TaskDetail.tsx +105 -0
  75. package/examples/taskflow/generated/web/TaskFlow/src/store.ts +216 -0
  76. package/examples/taskflow/generated/web/TaskFlow/src/styles.css +617 -0
  77. package/examples/taskflow/generated/web/TaskFlow/src/types.ts +64 -0
  78. package/examples/taskflow/generated/web/TaskFlow/src/utils.ts +78 -0
  79. package/examples/taskflow/generated/web/TaskFlow/tsconfig.json +21 -0
  80. package/examples/taskflow/generated/web/TaskFlow/vite.config.ts +6 -0
  81. package/examples/taskflow/openuispec/README.md +54 -0
  82. package/examples/taskflow/{openuispec.yaml → openuispec/openuispec.yaml} +2 -0
  83. package/examples/todo-orbit/AGENTS.md +48 -22
  84. package/examples/todo-orbit/CLAUDE.md +48 -22
  85. package/examples/todo-orbit/backend/.gitkeep +1 -0
  86. package/examples/todo-orbit/openuispec/README.md +9 -4
  87. package/examples/todo-orbit/openuispec/openuispec.yaml +2 -0
  88. package/package.json +1 -1
  89. package/prepare/index.ts +811 -25
  90. package/schema/openuispec.schema.json +10 -0
  91. package/schema/semantic-lint.ts +36 -12
  92. package/schema/validate.ts +9 -4
  93. package/status/index.ts +16 -3
  94. /package/examples/taskflow/{contracts → openuispec/contracts}/README.md +0 -0
  95. /package/examples/taskflow/{contracts → openuispec/contracts}/action_trigger.yaml +0 -0
  96. /package/examples/taskflow/{contracts → openuispec/contracts}/collection.yaml +0 -0
  97. /package/examples/taskflow/{contracts → openuispec/contracts}/data_display.yaml +0 -0
  98. /package/examples/taskflow/{contracts → openuispec/contracts}/feedback.yaml +0 -0
  99. /package/examples/taskflow/{contracts → openuispec/contracts}/input_field.yaml +0 -0
  100. /package/examples/taskflow/{contracts → openuispec/contracts}/nav_container.yaml +0 -0
  101. /package/examples/taskflow/{contracts → openuispec/contracts}/surface.yaml +0 -0
  102. /package/examples/taskflow/{contracts → openuispec/contracts}/x_media_player.yaml +0 -0
  103. /package/examples/taskflow/{flows → openuispec/flows}/create_task.yaml +0 -0
  104. /package/examples/taskflow/{flows → openuispec/flows}/edit_task.yaml +0 -0
  105. /package/examples/taskflow/{locales → openuispec/locales}/en.json +0 -0
  106. /package/examples/taskflow/{platform → openuispec/platform}/android.yaml +0 -0
  107. /package/examples/taskflow/{platform → openuispec/platform}/ios.yaml +0 -0
  108. /package/examples/taskflow/{platform → openuispec/platform}/web.yaml +0 -0
  109. /package/examples/taskflow/{screens → openuispec/screens}/calendar.yaml +0 -0
  110. /package/examples/taskflow/{screens → openuispec/screens}/home.yaml +0 -0
  111. /package/examples/taskflow/{screens → openuispec/screens}/profile_edit.yaml +0 -0
  112. /package/examples/taskflow/{screens → openuispec/screens}/project_detail.yaml +0 -0
  113. /package/examples/taskflow/{screens → openuispec/screens}/projects.yaml +0 -0
  114. /package/examples/taskflow/{screens → openuispec/screens}/settings.yaml +0 -0
  115. /package/examples/taskflow/{screens → openuispec/screens}/task_detail.yaml +0 -0
  116. /package/examples/taskflow/{tokens → openuispec/tokens}/color.yaml +0 -0
  117. /package/examples/taskflow/{tokens → openuispec/tokens}/elevation.yaml +0 -0
  118. /package/examples/taskflow/{tokens → openuispec/tokens}/icons.yaml +0 -0
  119. /package/examples/taskflow/{tokens → openuispec/tokens}/layout.yaml +0 -0
  120. /package/examples/taskflow/{tokens → openuispec/tokens}/motion.yaml +0 -0
  121. /package/examples/taskflow/{tokens → openuispec/tokens}/spacing.yaml +0 -0
  122. /package/examples/taskflow/{tokens → openuispec/tokens}/themes.yaml +0 -0
  123. /package/examples/taskflow/{tokens → openuispec/tokens}/typography.yaml +0 -0
@@ -0,0 +1,746 @@
1
+ {
2
+ "android": {
3
+ "framework": "compose",
4
+ "framework_prompt": "Android UI framework",
5
+ "framework_options": [
6
+ "compose"
7
+ ],
8
+ "language": "kotlin",
9
+ "min_sdk": 26,
10
+ "target_sdk": 35,
11
+ "generation_defaults": {
12
+ "naming": "Kotlin conventions"
13
+ },
14
+ "base_dependencies": [
15
+ "material3",
16
+ "activity-compose"
17
+ ],
18
+ "questions": [
19
+ {
20
+ "key": "architecture",
21
+ "prompt": "Android architecture",
22
+ "recommended": "decompose",
23
+ "options": [
24
+ {
25
+ "value": "decompose",
26
+ "generation_value": "decompose",
27
+ "dependencies": [
28
+ "decompose",
29
+ "decompose-compose",
30
+ "essenty-lifecycle",
31
+ "essenty-instance-keeper"
32
+ ],
33
+ "refs": {
34
+ "plugins": [
35
+ "org.jetbrains.kotlin.plugin.compose"
36
+ ],
37
+ "libraries": [
38
+ "com.arkivanov.decompose:decompose:{latest}",
39
+ "com.arkivanov.decompose:extensions-compose-android:{latest}",
40
+ "com.arkivanov.essenty:lifecycle-android:{latest}",
41
+ "com.arkivanov.essenty:instance-keeper-android:{latest}"
42
+ ],
43
+ "docs": [
44
+ "https://github.com/arkivanov/Decompose",
45
+ "https://github.com/arkivanov/Essenty"
46
+ ]
47
+ }
48
+ },
49
+ {
50
+ "value": "plain_compose",
51
+ "generation_value": "plain compose",
52
+ "dependencies": [
53
+ "navigation-compose",
54
+ "lifecycle-runtime-compose"
55
+ ],
56
+ "refs": {
57
+ "plugins": [
58
+ "org.jetbrains.kotlin.plugin.compose"
59
+ ],
60
+ "libraries": [
61
+ "androidx.navigation:navigation-compose:{latest}",
62
+ "androidx.lifecycle:lifecycle-runtime-compose:{latest}"
63
+ ],
64
+ "docs": [
65
+ "https://developer.android.com/guide/navigation",
66
+ "https://developer.android.com/jetpack/androidx/releases/lifecycle"
67
+ ]
68
+ }
69
+ }
70
+ ]
71
+ },
72
+ {
73
+ "key": "state",
74
+ "prompt": "Android state management",
75
+ "recommended": "mvikotlin",
76
+ "options": [
77
+ {
78
+ "value": "mvikotlin",
79
+ "generation_value": "mvikotlin",
80
+ "dependencies": [
81
+ "mvikotlin",
82
+ "mvikotlin-main",
83
+ "mvikotlin-logging"
84
+ ],
85
+ "refs": {
86
+ "plugins": [],
87
+ "libraries": [
88
+ "com.arkivanov.mvikotlin:mvikotlin:{latest}",
89
+ "com.arkivanov.mvikotlin:mvikotlin-main:{latest}",
90
+ "com.arkivanov.mvikotlin:mvikotlin-logging:{latest}"
91
+ ],
92
+ "docs": [
93
+ "https://github.com/arkivanov/MVIKotlin"
94
+ ]
95
+ }
96
+ },
97
+ {
98
+ "value": "viewmodel",
99
+ "generation_value": "viewmodel",
100
+ "dependencies": [
101
+ "lifecycle-viewmodel-compose",
102
+ "lifecycle-runtime-compose",
103
+ "kotlinx-coroutines-core"
104
+ ],
105
+ "refs": {
106
+ "plugins": [],
107
+ "libraries": [
108
+ "androidx.lifecycle:lifecycle-viewmodel-compose:{latest}",
109
+ "androidx.lifecycle:lifecycle-runtime-compose:{latest}",
110
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core:{latest}"
111
+ ],
112
+ "docs": [
113
+ "https://developer.android.com/jetpack/androidx/releases/lifecycle",
114
+ "https://github.com/Kotlin/kotlinx.coroutines"
115
+ ]
116
+ }
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ "key": "preferences",
122
+ "prompt": "Android preferences storage",
123
+ "recommended": "datastore",
124
+ "options": [
125
+ {
126
+ "value": "datastore",
127
+ "generation_value": "datastore",
128
+ "dependencies": [
129
+ "datastore-preferences",
130
+ "datastore-core"
131
+ ],
132
+ "refs": {
133
+ "plugins": [],
134
+ "libraries": [
135
+ "androidx.datastore:datastore-preferences:{latest}",
136
+ "androidx.datastore:datastore-core:{latest}"
137
+ ],
138
+ "docs": [
139
+ "https://developer.android.com/topic/libraries/architecture/datastore"
140
+ ]
141
+ }
142
+ },
143
+ {
144
+ "value": "none",
145
+ "generation_value": "none",
146
+ "dependencies": [],
147
+ "refs": {
148
+ "plugins": [],
149
+ "libraries": [],
150
+ "docs": []
151
+ }
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ "key": "database",
157
+ "prompt": "Android database storage",
158
+ "recommended": "none",
159
+ "options": [
160
+ {
161
+ "value": "sqldelight",
162
+ "generation_value": "sqldelight",
163
+ "dependencies": [
164
+ "sqldelight",
165
+ "sqldelight-coroutines"
166
+ ],
167
+ "refs": {
168
+ "plugins": [
169
+ "app.cash.sqldelight"
170
+ ],
171
+ "libraries": [
172
+ "app.cash.sqldelight:android-driver:{latest}",
173
+ "app.cash.sqldelight:coroutines-extensions:{latest}"
174
+ ],
175
+ "docs": [
176
+ "https://github.com/sqldelight/sqldelight"
177
+ ]
178
+ }
179
+ },
180
+ {
181
+ "value": "room",
182
+ "generation_value": "room",
183
+ "dependencies": [
184
+ "room-runtime",
185
+ "room-ktx"
186
+ ],
187
+ "refs": {
188
+ "plugins": [
189
+ "androidx.room"
190
+ ],
191
+ "libraries": [
192
+ "androidx.room:room-runtime:{latest}",
193
+ "androidx.room:room-ktx:{latest}"
194
+ ],
195
+ "docs": [
196
+ "https://developer.android.com/training/data-storage/room"
197
+ ]
198
+ }
199
+ },
200
+ {
201
+ "value": "none",
202
+ "generation_value": "none",
203
+ "dependencies": [],
204
+ "refs": {
205
+ "plugins": [],
206
+ "libraries": [],
207
+ "docs": []
208
+ }
209
+ }
210
+ ]
211
+ },
212
+ {
213
+ "key": "di",
214
+ "prompt": "Android dependency injection",
215
+ "recommended": "metro",
216
+ "options": [
217
+ {
218
+ "value": "metro",
219
+ "generation_value": "metro",
220
+ "dependencies": [
221
+ "metro",
222
+ "metro-compose"
223
+ ],
224
+ "refs": {
225
+ "plugins": [],
226
+ "libraries": [
227
+ "dev.zacsweers.metro:metro:{latest}",
228
+ "dev.zacsweers.metro:metro-compose:{latest}"
229
+ ],
230
+ "docs": [
231
+ "https://github.com/ZacSweers/metro"
232
+ ]
233
+ }
234
+ },
235
+ {
236
+ "value": "koin",
237
+ "generation_value": "koin",
238
+ "dependencies": [
239
+ "koin-android",
240
+ "koin-compose"
241
+ ],
242
+ "refs": {
243
+ "plugins": [],
244
+ "libraries": [
245
+ "io.insert-koin:koin-android:{latest}",
246
+ "io.insert-koin:koin-compose:{latest}"
247
+ ],
248
+ "docs": [
249
+ "https://insert-koin.io/docs/quickstart/android/",
250
+ "https://insert-koin.io/docs/reference/koin-compose/compose/"
251
+ ]
252
+ }
253
+ },
254
+ {
255
+ "value": "hilt",
256
+ "generation_value": "hilt",
257
+ "dependencies": [
258
+ "hilt-android",
259
+ "hilt-navigation-compose"
260
+ ],
261
+ "refs": {
262
+ "plugins": [
263
+ "com.google.dagger.hilt.android"
264
+ ],
265
+ "libraries": [
266
+ "com.google.dagger:hilt-android:{latest}",
267
+ "androidx.hilt:hilt-navigation-compose:{latest}"
268
+ ],
269
+ "docs": [
270
+ "https://developer.android.com/training/dependency-injection/hilt-android",
271
+ "https://developer.android.com/training/dependency-injection/hilt-jetpack"
272
+ ]
273
+ }
274
+ },
275
+ {
276
+ "value": "none",
277
+ "generation_value": "none",
278
+ "dependencies": [],
279
+ "refs": {
280
+ "plugins": [],
281
+ "libraries": [],
282
+ "docs": []
283
+ }
284
+ }
285
+ ]
286
+ }
287
+ ]
288
+ },
289
+ "web": {
290
+ "framework": "react",
291
+ "framework_prompt": "Web UI framework",
292
+ "framework_options": [
293
+ "react",
294
+ "vue",
295
+ "svelte"
296
+ ],
297
+ "language": "typescript",
298
+ "generation_defaults": {
299
+ "bundler": "vite",
300
+ "naming": "framework conventions"
301
+ },
302
+ "base_dependencies": [
303
+ "vite",
304
+ "typescript"
305
+ ],
306
+ "framework_dependencies": {
307
+ "react": ["react", "react-dom"],
308
+ "vue": ["vue"],
309
+ "svelte": ["svelte", "@sveltejs/kit"]
310
+ },
311
+ "questions": [
312
+ {
313
+ "key": "runtime",
314
+ "prompt": "Web runtime/server integration",
315
+ "recommended": "frontend_only",
316
+ "options": [
317
+ {
318
+ "value": "frontend_only",
319
+ "generation_value": "frontend_only",
320
+ "dependencies": [],
321
+ "refs": {
322
+ "packages": [],
323
+ "docs": []
324
+ }
325
+ },
326
+ {
327
+ "value": "next",
328
+ "generation_value": "next",
329
+ "framework_filter": ["react"],
330
+ "dependencies": [],
331
+ "refs": {
332
+ "packages": [
333
+ "next@{latest}"
334
+ ],
335
+ "docs": [
336
+ "https://nextjs.org/docs"
337
+ ]
338
+ }
339
+ },
340
+ {
341
+ "value": "hono",
342
+ "generation_value": "hono",
343
+ "dependencies": [],
344
+ "refs": {
345
+ "packages": [
346
+ "hono@{latest}"
347
+ ],
348
+ "docs": [
349
+ "https://hono.dev/"
350
+ ]
351
+ }
352
+ }
353
+ ]
354
+ },
355
+ {
356
+ "key": "css",
357
+ "prompt": "Web CSS approach",
358
+ "recommended": "tailwind",
359
+ "options": [
360
+ {
361
+ "value": "tailwind",
362
+ "generation_value": "tailwind",
363
+ "dependencies": [
364
+ "tailwindcss"
365
+ ],
366
+ "refs": {
367
+ "packages": [
368
+ "tailwindcss@{latest}"
369
+ ],
370
+ "docs": [
371
+ "https://tailwindcss.com/docs"
372
+ ]
373
+ }
374
+ },
375
+ {
376
+ "value": "css_modules",
377
+ "generation_value": "css_modules",
378
+ "dependencies": [],
379
+ "refs": {
380
+ "packages": [],
381
+ "docs": []
382
+ }
383
+ },
384
+ {
385
+ "value": "custom_css",
386
+ "generation_value": "custom_css",
387
+ "dependencies": [],
388
+ "refs": {
389
+ "packages": [],
390
+ "docs": []
391
+ }
392
+ }
393
+ ]
394
+ },
395
+ {
396
+ "key": "routing",
397
+ "prompt": "Web routing",
398
+ "recommended": "react_router",
399
+ "options": [
400
+ {
401
+ "value": "react_router",
402
+ "generation_value": "react_router",
403
+ "framework_filter": ["react"],
404
+ "dependencies": [
405
+ "react-router"
406
+ ],
407
+ "refs": {
408
+ "packages": [
409
+ "react-router@{latest}"
410
+ ],
411
+ "docs": [
412
+ "https://reactrouter.com/"
413
+ ]
414
+ }
415
+ },
416
+ {
417
+ "value": "tanstack_router",
418
+ "generation_value": "tanstack_router",
419
+ "framework_filter": ["react"],
420
+ "dependencies": [
421
+ "@tanstack/react-router"
422
+ ],
423
+ "refs": {
424
+ "packages": [
425
+ "@tanstack/react-router@{latest}"
426
+ ],
427
+ "docs": [
428
+ "https://tanstack.com/router/docs"
429
+ ]
430
+ }
431
+ },
432
+ {
433
+ "value": "vue_router",
434
+ "generation_value": "vue_router",
435
+ "framework_filter": ["vue"],
436
+ "dependencies": [
437
+ "vue-router"
438
+ ],
439
+ "refs": {
440
+ "packages": [
441
+ "vue-router@{latest}"
442
+ ],
443
+ "docs": [
444
+ "https://router.vuejs.org/"
445
+ ]
446
+ }
447
+ },
448
+ {
449
+ "value": "sveltekit_routing",
450
+ "generation_value": "sveltekit_routing",
451
+ "framework_filter": ["svelte"],
452
+ "dependencies": [],
453
+ "refs": {
454
+ "packages": [],
455
+ "docs": [
456
+ "https://svelte.dev/docs/kit/routing"
457
+ ]
458
+ }
459
+ }
460
+ ]
461
+ },
462
+ {
463
+ "key": "state",
464
+ "prompt": "Web state management",
465
+ "recommended": "zustand",
466
+ "options": [
467
+ {
468
+ "value": "zustand",
469
+ "generation_value": "zustand",
470
+ "framework_filter": ["react"],
471
+ "dependencies": [
472
+ "zustand"
473
+ ],
474
+ "refs": {
475
+ "packages": [
476
+ "zustand@{latest}"
477
+ ],
478
+ "docs": [
479
+ "https://zustand.docs.pmnd.rs/"
480
+ ]
481
+ }
482
+ },
483
+ {
484
+ "value": "redux",
485
+ "generation_value": "redux-toolkit",
486
+ "framework_filter": ["react"],
487
+ "dependencies": [
488
+ "@reduxjs/toolkit",
489
+ "react-redux"
490
+ ],
491
+ "refs": {
492
+ "packages": [
493
+ "@reduxjs/toolkit@{latest}",
494
+ "react-redux@{latest}"
495
+ ],
496
+ "docs": [
497
+ "https://redux-toolkit.js.org/",
498
+ "https://react-redux.js.org/"
499
+ ]
500
+ }
501
+ },
502
+ {
503
+ "value": "query_only",
504
+ "generation_value": "tanstack-query",
505
+ "framework_filter": ["react"],
506
+ "dependencies": [
507
+ "@tanstack/react-query"
508
+ ],
509
+ "refs": {
510
+ "packages": [
511
+ "@tanstack/react-query@{latest}"
512
+ ],
513
+ "docs": [
514
+ "https://tanstack.com/query/latest"
515
+ ]
516
+ }
517
+ },
518
+ {
519
+ "value": "pinia",
520
+ "generation_value": "pinia",
521
+ "framework_filter": ["vue"],
522
+ "dependencies": [
523
+ "pinia"
524
+ ],
525
+ "refs": {
526
+ "packages": [
527
+ "pinia@{latest}"
528
+ ],
529
+ "docs": [
530
+ "https://pinia.vuejs.org/"
531
+ ]
532
+ }
533
+ },
534
+ {
535
+ "value": "svelte_stores",
536
+ "generation_value": "svelte_stores",
537
+ "framework_filter": ["svelte"],
538
+ "dependencies": [],
539
+ "refs": {
540
+ "packages": [],
541
+ "docs": [
542
+ "https://svelte.dev/docs/svelte/stores"
543
+ ]
544
+ }
545
+ }
546
+ ]
547
+ },
548
+ {
549
+ "key": "storage_backend",
550
+ "prompt": "Web storage/backend integration",
551
+ "recommended": "none",
552
+ "options": [
553
+ {
554
+ "value": "none",
555
+ "generation_value": "none",
556
+ "dependencies": [],
557
+ "refs": {
558
+ "packages": [],
559
+ "docs": []
560
+ }
561
+ },
562
+ {
563
+ "value": "supabase",
564
+ "generation_value": "supabase",
565
+ "dependencies": [
566
+ "@supabase/supabase-js"
567
+ ],
568
+ "refs": {
569
+ "packages": [
570
+ "@supabase/supabase-js@{latest}"
571
+ ],
572
+ "docs": [
573
+ "https://supabase.com/docs"
574
+ ]
575
+ }
576
+ },
577
+ {
578
+ "value": "firebase",
579
+ "generation_value": "firebase",
580
+ "dependencies": [
581
+ "firebase"
582
+ ],
583
+ "refs": {
584
+ "packages": [
585
+ "firebase@{latest}"
586
+ ],
587
+ "docs": [
588
+ "https://firebase.google.com/docs/web/setup"
589
+ ]
590
+ }
591
+ }
592
+ ]
593
+ }
594
+ ]
595
+ },
596
+ "ios": {
597
+ "framework": "swiftui",
598
+ "framework_prompt": "iOS UI framework",
599
+ "framework_options": [
600
+ "swiftui"
601
+ ],
602
+ "language": "swift",
603
+ "min_version": "17.0",
604
+ "generation_defaults": {
605
+ "imports": [
606
+ "SwiftUI",
607
+ "Foundation"
608
+ ],
609
+ "naming": "Swift conventions"
610
+ },
611
+ "base_dependencies": [],
612
+ "questions": [
613
+ {
614
+ "key": "architecture",
615
+ "prompt": "iOS state/navigation style",
616
+ "recommended": "native",
617
+ "options": [
618
+ {
619
+ "value": "native",
620
+ "generation_value": "native swiftui",
621
+ "dependencies": [],
622
+ "extra_generation": {
623
+ "state": "@Observable / @State"
624
+ },
625
+ "refs": {
626
+ "packages": [],
627
+ "docs": [
628
+ "https://developer.apple.com/xcode/swiftui/"
629
+ ]
630
+ }
631
+ },
632
+ {
633
+ "value": "tca_style",
634
+ "generation_value": "tca-style",
635
+ "dependencies": [
636
+ "swift-composable-architecture"
637
+ ],
638
+ "extra_generation": {
639
+ "state": "tca"
640
+ },
641
+ "refs": {
642
+ "packages": [
643
+ "pointfreeco/swift-composable-architecture@{latest}"
644
+ ],
645
+ "docs": [
646
+ "https://github.com/pointfreeco/swift-composable-architecture"
647
+ ]
648
+ }
649
+ }
650
+ ]
651
+ },
652
+ {
653
+ "key": "persistence",
654
+ "prompt": "iOS persistence",
655
+ "recommended": "swiftdata",
656
+ "options": [
657
+ {
658
+ "value": "swiftdata",
659
+ "generation_value": "swiftdata",
660
+ "dependencies": [
661
+ "swiftdata"
662
+ ],
663
+ "refs": {
664
+ "packages": [
665
+ "apple:SwiftData"
666
+ ],
667
+ "docs": [
668
+ "https://developer.apple.com/documentation/swiftdata"
669
+ ]
670
+ }
671
+ },
672
+ {
673
+ "value": "sqlite",
674
+ "generation_value": "sqlite",
675
+ "dependencies": [
676
+ "sqlite"
677
+ ],
678
+ "refs": {
679
+ "packages": [
680
+ "stephencelis/SQLite.swift@{latest}"
681
+ ],
682
+ "docs": [
683
+ "https://www.sqlite.org/docs.html"
684
+ ]
685
+ }
686
+ },
687
+ {
688
+ "value": "none",
689
+ "generation_value": "none",
690
+ "dependencies": [],
691
+ "refs": {
692
+ "packages": [],
693
+ "docs": []
694
+ }
695
+ }
696
+ ]
697
+ },
698
+ {
699
+ "key": "di",
700
+ "prompt": "iOS dependency injection",
701
+ "recommended": "none",
702
+ "options": [
703
+ {
704
+ "value": "none",
705
+ "generation_value": "none",
706
+ "dependencies": [],
707
+ "refs": {
708
+ "packages": [],
709
+ "docs": []
710
+ }
711
+ },
712
+ {
713
+ "value": "factory",
714
+ "generation_value": "factory",
715
+ "dependencies": [
716
+ "factory"
717
+ ],
718
+ "refs": {
719
+ "packages": [
720
+ "hmlongco/Factory@{latest}"
721
+ ],
722
+ "docs": [
723
+ "https://github.com/hmlongco/Factory"
724
+ ]
725
+ }
726
+ },
727
+ {
728
+ "value": "custom",
729
+ "generation_value": "custom",
730
+ "dependencies": [
731
+ "custom-di"
732
+ ],
733
+ "refs": {
734
+ "packages": [
735
+ "custom"
736
+ ],
737
+ "docs": [
738
+ "https://developer.apple.com/documentation/swift"
739
+ ]
740
+ }
741
+ }
742
+ ]
743
+ }
744
+ ]
745
+ }
746
+ }