@specverse/engine-realize 3.5.3

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 (420) hide show
  1. package/assets/examples/09-api/ai-spec.yaml +194 -0
  2. package/assets/examples/09-api/converted.yaml +95 -0
  3. package/assets/examples/09-api/diagram-architecture.mmd +10 -0
  4. package/assets/examples/09-api/diagram-er.mmd +10 -0
  5. package/assets/examples/09-api/documentation.html +104 -0
  6. package/assets/examples/09-api/documentation.md +95 -0
  7. package/assets/examples/09-api/inferred-spec.yaml +420 -0
  8. package/assets/examples/09-api/openapi.json +61 -0
  9. package/assets/examples/10-api/README.md +216 -0
  10. package/assets/examples/10-api/ai-spec.yaml +194 -0
  11. package/assets/examples/10-api/converted.yaml +96 -0
  12. package/assets/examples/10-api/diagram-architecture.mmd +10 -0
  13. package/assets/examples/10-api/diagram-er.mmd +10 -0
  14. package/assets/examples/10-api/documentation.html +104 -0
  15. package/assets/examples/10-api/documentation.md +95 -0
  16. package/assets/examples/10-api/inferred-spec.yaml +7 -0
  17. package/assets/examples/10-api/metadata.yaml +89 -0
  18. package/assets/examples/10-api/openapi.json +61 -0
  19. package/assets/examples/10-api/package-integration-test.js +177 -0
  20. package/assets/examples/10-api/usage-example.js +323 -0
  21. package/assets/examples/10-api/usage-example.ts +363 -0
  22. package/assets/examples/10-api/workflow-test.js +113 -0
  23. package/assets/examples/manifests/01-simple-default-mappings.yaml +36 -0
  24. package/assets/examples/manifests/02-capability-mappings.yaml +55 -0
  25. package/assets/examples/manifests/03-hybrid-mappings.yaml +109 -0
  26. package/assets/examples/manifests/README.md +245 -0
  27. package/assets/examples/manifests/backend-only.yaml +43 -0
  28. package/assets/examples/manifests/blog-api.md +78 -0
  29. package/assets/examples/manifests/blog-api.specly +79 -0
  30. package/assets/examples/manifests/frontend-only.yaml +27 -0
  31. package/assets/examples/manifests/fullstack-app.yaml +44 -0
  32. package/assets/examples/manifests/fullstack-monorepo.yaml +62 -0
  33. package/assets/examples/validate-examples-with-expected-failures.cjs +328 -0
  34. package/assets/examples/validate-examples.cjs +225 -0
  35. package/assets/examples-decomposed/cloud-native-manifest.example.yaml +8 -0
  36. package/assets/examples-decomposed/cloud-native-manifest.md +379 -0
  37. package/assets/examples-decomposed/cloud-native-manifest.specly +60 -0
  38. package/assets/examples-decomposed/docker-compose-manifest.example.yaml +8 -0
  39. package/assets/examples-decomposed/docker-compose-manifest.md +326 -0
  40. package/assets/examples-decomposed/docker-compose-manifest.specly +40 -0
  41. package/assets/examples-decomposed/kubernetes-deployment-manifest.example.yaml +8 -0
  42. package/assets/examples-decomposed/kubernetes-deployment-manifest.md +237 -0
  43. package/assets/examples-decomposed/kubernetes-deployment-manifest.specly +41 -0
  44. package/assets/templates/README.md +559 -0
  45. package/assets/templates/TEMPLATE-ENHANCEMENTS-V33.md +462 -0
  46. package/assets/templates/backend-only/CLAUDE.md +73 -0
  47. package/assets/templates/backend-only/README.md +197 -0
  48. package/assets/templates/backend-only/deployments/README.md +149 -0
  49. package/assets/templates/backend-only/deployments/development.specly +53 -0
  50. package/assets/templates/backend-only/deployments/production.specly +87 -0
  51. package/assets/templates/backend-only/docs/README.md +50 -0
  52. package/assets/templates/backend-only/docs/api/README.md +7 -0
  53. package/assets/templates/backend-only/docs/diagrams/README.md +85 -0
  54. package/assets/templates/backend-only/docs/example-documentation-template.md +269 -0
  55. package/assets/templates/backend-only/docs/guides/README.md +15 -0
  56. package/assets/templates/backend-only/dot.env.example +18 -0
  57. package/assets/templates/backend-only/generated/README.md +56 -0
  58. package/assets/templates/backend-only/generated/code/integration-test.template.js +320 -0
  59. package/assets/templates/backend-only/generated/code/package.json.template +34 -0
  60. package/assets/templates/backend-only/generated/docs/README.md +49 -0
  61. package/assets/templates/backend-only/gitignore +54 -0
  62. package/assets/templates/backend-only/manifests/README.md +72 -0
  63. package/assets/templates/backend-only/manifests/docker-compose.specly +91 -0
  64. package/assets/templates/backend-only/manifests/implementation.yaml +100 -0
  65. package/assets/templates/backend-only/manifests/kubernetes.specly +140 -0
  66. package/assets/templates/backend-only/package.json +59 -0
  67. package/assets/templates/backend-only/scripts/test-all.sh +160 -0
  68. package/assets/templates/backend-only/scripts/test-generated-code.sh +165 -0
  69. package/assets/templates/backend-only/specs/main.specly +67 -0
  70. package/assets/templates/default/CLAUDE.md +141 -0
  71. package/assets/templates/default/README.md +404 -0
  72. package/assets/templates/default/deployments/README.md +149 -0
  73. package/assets/templates/default/deployments/development.specly +53 -0
  74. package/assets/templates/default/deployments/production.specly +87 -0
  75. package/assets/templates/default/docs/README.md +50 -0
  76. package/assets/templates/default/docs/api/README.md +7 -0
  77. package/assets/templates/default/docs/diagrams/README.md +85 -0
  78. package/assets/templates/default/docs/example-documentation-template.md +269 -0
  79. package/assets/templates/default/docs/guides/README.md +15 -0
  80. package/assets/templates/default/dot.env.example +18 -0
  81. package/assets/templates/default/generated/README.md +56 -0
  82. package/assets/templates/default/generated/code/integration-test.template.js +320 -0
  83. package/assets/templates/default/generated/code/package.json.template +34 -0
  84. package/assets/templates/default/generated/docs/README.md +49 -0
  85. package/assets/templates/default/gitignore +54 -0
  86. package/assets/templates/default/manifests/README.md +72 -0
  87. package/assets/templates/default/manifests/docker-compose.specly +91 -0
  88. package/assets/templates/default/manifests/implementation.yaml +176 -0
  89. package/assets/templates/default/manifests/kubernetes.specly +140 -0
  90. package/assets/templates/default/package.json +61 -0
  91. package/assets/templates/default/scripts/test-all.sh +160 -0
  92. package/assets/templates/default/scripts/test-generated-code.sh +165 -0
  93. package/assets/templates/default/specs/main.specly +67 -0
  94. package/assets/templates/frontend-only/CLAUDE.md +75 -0
  95. package/assets/templates/frontend-only/README.md +231 -0
  96. package/assets/templates/frontend-only/deployments/README.md +149 -0
  97. package/assets/templates/frontend-only/deployments/development.specly +53 -0
  98. package/assets/templates/frontend-only/deployments/production.specly +87 -0
  99. package/assets/templates/frontend-only/docs/README.md +50 -0
  100. package/assets/templates/frontend-only/docs/api/README.md +7 -0
  101. package/assets/templates/frontend-only/docs/diagrams/README.md +85 -0
  102. package/assets/templates/frontend-only/docs/example-documentation-template.md +269 -0
  103. package/assets/templates/frontend-only/docs/guides/README.md +15 -0
  104. package/assets/templates/frontend-only/dot.env.example +18 -0
  105. package/assets/templates/frontend-only/generated/README.md +56 -0
  106. package/assets/templates/frontend-only/generated/code/integration-test.template.js +320 -0
  107. package/assets/templates/frontend-only/generated/code/package.json.template +34 -0
  108. package/assets/templates/frontend-only/generated/docs/README.md +49 -0
  109. package/assets/templates/frontend-only/gitignore +54 -0
  110. package/assets/templates/frontend-only/manifests/README.md +72 -0
  111. package/assets/templates/frontend-only/manifests/docker-compose.specly +91 -0
  112. package/assets/templates/frontend-only/manifests/implementation.yaml +58 -0
  113. package/assets/templates/frontend-only/manifests/kubernetes.specly +140 -0
  114. package/assets/templates/frontend-only/package.json +59 -0
  115. package/assets/templates/frontend-only/scripts/test-all.sh +160 -0
  116. package/assets/templates/frontend-only/scripts/test-generated-code.sh +165 -0
  117. package/assets/templates/frontend-only/specs/main.specly +57 -0
  118. package/assets/templates/full-stack/AI-GUIDE.md +60 -0
  119. package/assets/templates/full-stack/CLAUDE.md +141 -0
  120. package/assets/templates/full-stack/README.md +382 -0
  121. package/assets/templates/full-stack/archive/AI-GUIDE-legacy.md +392 -0
  122. package/assets/templates/full-stack/deployments/README.md +149 -0
  123. package/assets/templates/full-stack/deployments/development.specly +53 -0
  124. package/assets/templates/full-stack/deployments/production.specly +87 -0
  125. package/assets/templates/full-stack/docs/README.md +51 -0
  126. package/assets/templates/full-stack/docs/api/README.md +7 -0
  127. package/assets/templates/full-stack/docs/diagrams/README.md +85 -0
  128. package/assets/templates/full-stack/docs/example-documentation-template.md +269 -0
  129. package/assets/templates/full-stack/docs/guides/README.md +15 -0
  130. package/assets/templates/full-stack/generated/README.md +56 -0
  131. package/assets/templates/full-stack/generated/code/integration-test.template.js +320 -0
  132. package/assets/templates/full-stack/generated/code/package.json.template +34 -0
  133. package/assets/templates/full-stack/generated/docs/README.md +49 -0
  134. package/assets/templates/full-stack/gitignore +54 -0
  135. package/assets/templates/full-stack/manifests/README.md +72 -0
  136. package/assets/templates/full-stack/manifests/docker-compose.specly +91 -0
  137. package/assets/templates/full-stack/manifests/implementation.yaml +155 -0
  138. package/assets/templates/full-stack/manifests/kubernetes.specly +140 -0
  139. package/assets/templates/full-stack/package.json +45 -0
  140. package/assets/templates/full-stack/scripts/test-all.sh +160 -0
  141. package/assets/templates/full-stack/scripts/test-generated-code.sh +165 -0
  142. package/assets/templates/full-stack/specs/example-v33.specly +297 -0
  143. package/assets/templates/full-stack/specs/main-simple.specly +73 -0
  144. package/assets/templates/full-stack/specs/main.specly +408 -0
  145. package/dist/engines/code-generator.d.ts +86 -0
  146. package/dist/engines/code-generator.d.ts.map +1 -0
  147. package/dist/engines/code-generator.js +159 -0
  148. package/dist/engines/code-generator.js.map +1 -0
  149. package/dist/engines/engine-registry.d.ts +94 -0
  150. package/dist/engines/engine-registry.d.ts.map +1 -0
  151. package/dist/engines/engine-registry.js +163 -0
  152. package/dist/engines/engine-registry.js.map +1 -0
  153. package/dist/engines/index.d.ts +10 -0
  154. package/dist/engines/index.d.ts.map +1 -0
  155. package/dist/engines/index.js +12 -0
  156. package/dist/engines/index.js.map +1 -0
  157. package/dist/engines/typescript-engine.d.ts +74 -0
  158. package/dist/engines/typescript-engine.d.ts.map +1 -0
  159. package/dist/engines/typescript-engine.js +288 -0
  160. package/dist/engines/typescript-engine.js.map +1 -0
  161. package/dist/generators/index.d.ts +11 -0
  162. package/dist/generators/index.d.ts.map +1 -0
  163. package/dist/generators/index.js +11 -0
  164. package/dist/generators/index.js.map +1 -0
  165. package/dist/index.d.ts +48 -0
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +434 -0
  168. package/dist/index.js.map +1 -0
  169. package/dist/library/index.d.ts +12 -0
  170. package/dist/library/index.d.ts.map +1 -0
  171. package/dist/library/index.js +15 -0
  172. package/dist/library/index.js.map +1 -0
  173. package/dist/library/library.d.ts +132 -0
  174. package/dist/library/library.d.ts.map +1 -0
  175. package/dist/library/library.js +343 -0
  176. package/dist/library/library.js.map +1 -0
  177. package/dist/library/loader.d.ts +73 -0
  178. package/dist/library/loader.d.ts.map +1 -0
  179. package/dist/library/loader.js +150 -0
  180. package/dist/library/loader.js.map +1 -0
  181. package/dist/library/resolver.d.ts +104 -0
  182. package/dist/library/resolver.d.ts.map +1 -0
  183. package/dist/library/resolver.js +299 -0
  184. package/dist/library/resolver.js.map +1 -0
  185. package/dist/library/validator.d.ts +65 -0
  186. package/dist/library/validator.d.ts.map +1 -0
  187. package/dist/library/validator.js +203 -0
  188. package/dist/library/validator.js.map +1 -0
  189. package/dist/types/index.d.ts +7 -0
  190. package/dist/types/index.d.ts.map +1 -0
  191. package/dist/types/index.js +7 -0
  192. package/dist/types/index.js.map +1 -0
  193. package/dist/types/instance-factory.d.ts +289 -0
  194. package/dist/types/instance-factory.d.ts.map +1 -0
  195. package/dist/types/instance-factory.js +8 -0
  196. package/dist/types/instance-factory.js.map +1 -0
  197. package/dist/types/unified-mappings.d.ts +163 -0
  198. package/dist/types/unified-mappings.d.ts.map +1 -0
  199. package/dist/types/unified-mappings.js +110 -0
  200. package/dist/types/unified-mappings.js.map +1 -0
  201. package/dist/utils/ai-spec-loader.d.ts +77 -0
  202. package/dist/utils/ai-spec-loader.d.ts.map +1 -0
  203. package/dist/utils/ai-spec-loader.js +138 -0
  204. package/dist/utils/ai-spec-loader.js.map +1 -0
  205. package/dist/utils/index.d.ts +9 -0
  206. package/dist/utils/index.d.ts.map +1 -0
  207. package/dist/utils/index.js +9 -0
  208. package/dist/utils/index.js.map +1 -0
  209. package/dist/utils/manifest-loader.d.ts +107 -0
  210. package/dist/utils/manifest-loader.d.ts.map +1 -0
  211. package/dist/utils/manifest-loader.js +168 -0
  212. package/dist/utils/manifest-loader.js.map +1 -0
  213. package/dist/utils/mapping-migration.d.ts +53 -0
  214. package/dist/utils/mapping-migration.d.ts.map +1 -0
  215. package/dist/utils/mapping-migration.js +194 -0
  216. package/dist/utils/mapping-migration.js.map +1 -0
  217. package/libs/instance-factories/CURVED-INTERFACE.md +278 -0
  218. package/libs/instance-factories/README.md +433 -0
  219. package/libs/instance-factories/applications/generic-app.yaml +52 -0
  220. package/libs/instance-factories/applications/react-app.yaml +186 -0
  221. package/libs/instance-factories/applications/templates/generic/backend-env-generator.ts +31 -0
  222. package/libs/instance-factories/applications/templates/generic/backend-package-json-generator.ts +80 -0
  223. package/libs/instance-factories/applications/templates/generic/backend-tsconfig-generator.ts +69 -0
  224. package/libs/instance-factories/applications/templates/generic/main-generator.ts +308 -0
  225. package/libs/instance-factories/applications/templates/react/_view-components-source.ts +555 -0
  226. package/libs/instance-factories/applications/templates/react/api-client-generator.ts +436 -0
  227. package/libs/instance-factories/applications/templates/react/api-types-generator.ts +153 -0
  228. package/libs/instance-factories/applications/templates/react/app-tsx-generator.ts +94 -0
  229. package/libs/instance-factories/applications/templates/react/env-example-generator.ts +24 -0
  230. package/libs/instance-factories/applications/templates/react/field-helpers-generator.ts +106 -0
  231. package/libs/instance-factories/applications/templates/react/gitignore-generator.ts +38 -0
  232. package/libs/instance-factories/applications/templates/react/index-css-generator.ts +85 -0
  233. package/libs/instance-factories/applications/templates/react/index-html-generator.ts +30 -0
  234. package/libs/instance-factories/applications/templates/react/main-tsx-generator.ts +34 -0
  235. package/libs/instance-factories/applications/templates/react/package-json-generator.ts +54 -0
  236. package/libs/instance-factories/applications/templates/react/pattern-adapter-generator.ts +179 -0
  237. package/libs/instance-factories/applications/templates/react/react-pattern-adapter.tsx +1347 -0
  238. package/libs/instance-factories/applications/templates/react/relationship-field-generator.ts +150 -0
  239. package/libs/instance-factories/applications/templates/react/tailwind-adapter-generator.ts +704 -0
  240. package/libs/instance-factories/applications/templates/react/tailwind-adapter-wrapper-generator.ts +84 -0
  241. package/libs/instance-factories/applications/templates/react/tsconfig-generator.ts +35 -0
  242. package/libs/instance-factories/applications/templates/react/use-api-hooks-generator.ts +121 -0
  243. package/libs/instance-factories/applications/templates/react/view-dashboard-generator.ts +150 -0
  244. package/libs/instance-factories/applications/templates/react/view-detail-generator.ts +150 -0
  245. package/libs/instance-factories/applications/templates/react/view-form-generator.ts +362 -0
  246. package/libs/instance-factories/applications/templates/react/view-list-generator.ts +98 -0
  247. package/libs/instance-factories/applications/templates/react/view-router-generator.ts +89 -0
  248. package/libs/instance-factories/applications/templates/react/vite-config-generator.ts +49 -0
  249. package/libs/instance-factories/archived/fastify-prisma.yaml +104 -0
  250. package/libs/instance-factories/cli/commander-js.yaml +55 -0
  251. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts +12 -0
  252. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.d.ts.map +1 -0
  253. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js +115 -0
  254. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.js.map +1 -0
  255. package/libs/instance-factories/cli/templates/commander/cli-entry-generator.ts +145 -0
  256. package/libs/instance-factories/cli/templates/commander/command-generator.d.ts +14 -0
  257. package/libs/instance-factories/cli/templates/commander/command-generator.d.ts.map +1 -0
  258. package/libs/instance-factories/cli/templates/commander/command-generator.js +182 -0
  259. package/libs/instance-factories/cli/templates/commander/command-generator.js.map +1 -0
  260. package/libs/instance-factories/cli/templates/commander/command-generator.ts +992 -0
  261. package/libs/instance-factories/communication/event-emitter.yaml +56 -0
  262. package/libs/instance-factories/communication/rabbitmq-events.yaml +87 -0
  263. package/libs/instance-factories/communication/templates/eventemitter/bus-generator.ts +93 -0
  264. package/libs/instance-factories/communication/templates/eventemitter/publisher-generator.ts +117 -0
  265. package/libs/instance-factories/communication/templates/eventemitter/subscriber-generator.ts +101 -0
  266. package/libs/instance-factories/controllers/fastify.yaml +127 -0
  267. package/libs/instance-factories/controllers/templates/fastify/meta-routes-generator.ts +103 -0
  268. package/libs/instance-factories/controllers/templates/fastify/routes-generator.ts +389 -0
  269. package/libs/instance-factories/controllers/templates/fastify/server-generator.ts +76 -0
  270. package/libs/instance-factories/infrastructure/docker-k8s.yaml +61 -0
  271. package/libs/instance-factories/infrastructure/templates/docker-k8s/infrastructure-generator.ts +46 -0
  272. package/libs/instance-factories/orms/prisma.yaml +89 -0
  273. package/libs/instance-factories/orms/templates/prisma/schema-generator.ts +563 -0
  274. package/libs/instance-factories/orms/templates/prisma/services-generator.ts +408 -0
  275. package/libs/instance-factories/scaffolding/generic-scaffold.yaml +65 -0
  276. package/libs/instance-factories/scaffolding/templates/generic/env-example-generator.ts +73 -0
  277. package/libs/instance-factories/scaffolding/templates/generic/env-generator.ts +85 -0
  278. package/libs/instance-factories/scaffolding/templates/generic/gitignore-generator.ts +69 -0
  279. package/libs/instance-factories/scaffolding/templates/generic/package-json-generator.ts +176 -0
  280. package/libs/instance-factories/scaffolding/templates/generic/readme-generator.ts +207 -0
  281. package/libs/instance-factories/scaffolding/templates/generic/tsconfig-generator.ts +78 -0
  282. package/libs/instance-factories/scaffolding/templates/generic/tsconfig-react-generator.ts +41 -0
  283. package/libs/instance-factories/sdks/python-sdk.yaml +66 -0
  284. package/libs/instance-factories/sdks/templates/python/sdk-generator.ts +50 -0
  285. package/libs/instance-factories/sdks/templates/typescript/sdk-generator.ts +49 -0
  286. package/libs/instance-factories/sdks/typescript-sdk.yaml +59 -0
  287. package/libs/instance-factories/services/prisma-services.yaml +71 -0
  288. package/libs/instance-factories/services/templates/prisma/behavior-generator.ts +303 -0
  289. package/libs/instance-factories/services/templates/prisma/controller-generator.ts +532 -0
  290. package/libs/instance-factories/services/templates/prisma/service-generator.ts +315 -0
  291. package/libs/instance-factories/shared/path-resolver.ts +111 -0
  292. package/libs/instance-factories/storage/mongodb.yaml +79 -0
  293. package/libs/instance-factories/storage/postgresql.yaml +75 -0
  294. package/libs/instance-factories/storage/redis.yaml +79 -0
  295. package/libs/instance-factories/storage/templates/mongodb/config-generator.ts +15 -0
  296. package/libs/instance-factories/storage/templates/mongodb/docker-generator.ts +18 -0
  297. package/libs/instance-factories/storage/templates/postgresql/config-generator.ts +54 -0
  298. package/libs/instance-factories/storage/templates/postgresql/docker-generator.ts +55 -0
  299. package/libs/instance-factories/storage/templates/redis/config-generator.ts +16 -0
  300. package/libs/instance-factories/storage/templates/redis/docker-generator.ts +18 -0
  301. package/libs/instance-factories/test-generation.ts +192 -0
  302. package/libs/instance-factories/testing/templates/vitest/tests-generator.ts +51 -0
  303. package/libs/instance-factories/testing/vitest-tests.yaml +63 -0
  304. package/libs/instance-factories/tools/templates/mcp/mcp-server-generator.ts +136 -0
  305. package/libs/instance-factories/tools/templates/mcp/static/docs/DEPLOYMENT_GUIDE.md +630 -0
  306. package/libs/instance-factories/tools/templates/mcp/static/docs/HYBRID_RESOURCE_SYSTEM.md +330 -0
  307. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/EXTENSION_DEPLOYMENT.md +552 -0
  308. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/LOCAL_DEPLOYMENT.md +164 -0
  309. package/libs/instance-factories/tools/templates/mcp/static/docs/deployments/WEB_DEPLOYMENT.md +247 -0
  310. package/libs/instance-factories/tools/templates/mcp/static/package.json +92 -0
  311. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-enterprise.js +284 -0
  312. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-extension.js +139 -0
  313. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-local.js +74 -0
  314. package/libs/instance-factories/tools/templates/mcp/static/scripts/build-web.js +156 -0
  315. package/libs/instance-factories/tools/templates/mcp/static/scripts/copy-canonical-files.js +41 -0
  316. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-deployments.js +259 -0
  317. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-resources.js +231 -0
  318. package/libs/instance-factories/tools/templates/mcp/static/scripts/test-hybrid-simple.js +196 -0
  319. package/libs/instance-factories/tools/templates/mcp/static/src/controllers/MCPServerController.ts +293 -0
  320. package/libs/instance-factories/tools/templates/mcp/static/src/events/EventEmitter.ts +90 -0
  321. package/libs/instance-factories/tools/templates/mcp/static/src/index.ts +24 -0
  322. package/libs/instance-factories/tools/templates/mcp/static/src/interfaces/ResourceProvider.ts +15 -0
  323. package/libs/instance-factories/tools/templates/mcp/static/src/models/LibrarySuggestion.ts +106 -0
  324. package/libs/instance-factories/tools/templates/mcp/static/src/models/SpecVerseResource.ts +75 -0
  325. package/libs/instance-factories/tools/templates/mcp/static/src/server/mcp-server.ts +239 -0
  326. package/libs/instance-factories/tools/templates/mcp/static/src/services/CLIProxyService.ts +1501 -0
  327. package/libs/instance-factories/tools/templates/mcp/static/src/services/EmbeddedResourcesAdapter.ts +211 -0
  328. package/libs/instance-factories/tools/templates/mcp/static/src/services/EntityModuleService.ts +308 -0
  329. package/libs/instance-factories/tools/templates/mcp/static/src/services/HybridResourcesProvider.ts +210 -0
  330. package/libs/instance-factories/tools/templates/mcp/static/src/services/LibraryToolsService.ts +356 -0
  331. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorBridge.ts +524 -0
  332. package/libs/instance-factories/tools/templates/mcp/static/src/services/OrchestratorToolsService.ts +530 -0
  333. package/libs/instance-factories/tools/templates/mcp/static/src/services/PromptToolsService.ts +594 -0
  334. package/libs/instance-factories/tools/templates/mcp/static/src/services/ResourcesProviderService.ts +170 -0
  335. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.init.test.ts +544 -0
  336. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/CLIProxyService.test.ts +189 -0
  337. package/libs/instance-factories/tools/templates/mcp/static/src/tests/unit/ResourcesProviderService.test.ts +89 -0
  338. package/libs/instance-factories/tools/templates/mcp/static/src/types/index.ts +110 -0
  339. package/libs/instance-factories/tools/templates/mcp/static/tsconfig.json +28 -0
  340. package/libs/instance-factories/tools/templates/vscode/static/extension.ts +1195 -0
  341. package/libs/instance-factories/tools/templates/vscode/static/language-configuration.json +34 -0
  342. package/libs/instance-factories/tools/templates/vscode/static/schemas/specverse-v3-schema.json +4279 -0
  343. package/libs/instance-factories/tools/templates/vscode/static/syntaxes/specverse.tmLanguage.json +138 -0
  344. package/libs/instance-factories/tools/templates/vscode/static/themes/README.md +74 -0
  345. package/libs/instance-factories/tools/templates/vscode/static/themes/complete-specverse-colors.json +122 -0
  346. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-basic-theme.json +65 -0
  347. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-complete-theme.json +123 -0
  348. package/libs/instance-factories/tools/templates/vscode/static/themes/specverse-theme-colors.json +64 -0
  349. package/libs/instance-factories/tools/templates/vscode/vscode-extension-generator.ts +214 -0
  350. package/libs/instance-factories/validation/templates/zod/validation-generator.ts +46 -0
  351. package/libs/instance-factories/validation/zod.yaml +56 -0
  352. package/libs/instance-factories/views/index.d.ts +13 -0
  353. package/libs/instance-factories/views/index.d.ts.map +1 -0
  354. package/libs/instance-factories/views/index.js +18 -0
  355. package/libs/instance-factories/views/index.js.map +1 -0
  356. package/libs/instance-factories/views/index.ts +45 -0
  357. package/libs/instance-factories/views/react-components.yaml +129 -0
  358. package/libs/instance-factories/views/templates/ARCHITECTURE.md +198 -0
  359. package/libs/instance-factories/views/templates/react/adapters/antd-adapter.ts +869 -0
  360. package/libs/instance-factories/views/templates/react/adapters/mui-adapter.ts +953 -0
  361. package/libs/instance-factories/views/templates/react/adapters/shadcn-adapter.ts +806 -0
  362. package/libs/instance-factories/views/templates/react/app-generator.ts +55 -0
  363. package/libs/instance-factories/views/templates/react/components-generator.ts +391 -0
  364. package/libs/instance-factories/views/templates/react/forms-generator.ts +343 -0
  365. package/libs/instance-factories/views/templates/react/frontend-package-json-generator.ts +54 -0
  366. package/libs/instance-factories/views/templates/react/hooks-generator.ts +122 -0
  367. package/libs/instance-factories/views/templates/react/index-css-generator.ts +209 -0
  368. package/libs/instance-factories/views/templates/react/index-html-generator.ts +34 -0
  369. package/libs/instance-factories/views/templates/react/main-tsx-generator.ts +29 -0
  370. package/libs/instance-factories/views/templates/react/react-component-generator.d.ts +152 -0
  371. package/libs/instance-factories/views/templates/react/react-component-generator.d.ts.map +1 -0
  372. package/libs/instance-factories/views/templates/react/react-component-generator.js +398 -0
  373. package/libs/instance-factories/views/templates/react/react-component-generator.js.map +1 -0
  374. package/libs/instance-factories/views/templates/react/react-component-generator.ts +533 -0
  375. package/libs/instance-factories/views/templates/react/router-generator.ts +197 -0
  376. package/libs/instance-factories/views/templates/react/router-generic-generator.ts +103 -0
  377. package/libs/instance-factories/views/templates/react/spec-json-generator.ts +17 -0
  378. package/libs/instance-factories/views/templates/react/types-generator.ts +76 -0
  379. package/libs/instance-factories/views/templates/react/views-metadata-generator.ts +42 -0
  380. package/libs/instance-factories/views/templates/react/vite-config-generator.ts +38 -0
  381. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.d.ts.map +1 -0
  382. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.js.map +1 -0
  383. package/libs/instance-factories/views/templates/runtime/runtime-view-renderer.ts +474 -0
  384. package/libs/instance-factories/views/templates/shared/__tests__/composite-patterns.test.ts +242 -0
  385. package/libs/instance-factories/views/templates/shared/adapter-types.d.ts +77 -0
  386. package/libs/instance-factories/views/templates/shared/adapter-types.d.ts.map +1 -0
  387. package/libs/instance-factories/views/templates/shared/adapter-types.js +47 -0
  388. package/libs/instance-factories/views/templates/shared/adapter-types.js.map +1 -0
  389. package/libs/instance-factories/views/templates/shared/adapter-types.ts +142 -0
  390. package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts +63 -0
  391. package/libs/instance-factories/views/templates/shared/atomic-components-registry.d.ts.map +1 -0
  392. package/libs/instance-factories/views/templates/shared/atomic-components-registry.js +822 -0
  393. package/libs/instance-factories/views/templates/shared/atomic-components-registry.js.map +1 -0
  394. package/libs/instance-factories/views/templates/shared/atomic-components-registry.ts +908 -0
  395. package/libs/instance-factories/views/templates/shared/base-generator.d.ts +247 -0
  396. package/libs/instance-factories/views/templates/shared/base-generator.d.ts.map +1 -0
  397. package/libs/instance-factories/views/templates/shared/base-generator.js +363 -0
  398. package/libs/instance-factories/views/templates/shared/base-generator.js.map +1 -0
  399. package/libs/instance-factories/views/templates/shared/base-generator.ts +608 -0
  400. package/libs/instance-factories/views/templates/shared/component-metadata.d.ts +254 -0
  401. package/libs/instance-factories/views/templates/shared/component-metadata.d.ts.map +1 -0
  402. package/libs/instance-factories/views/templates/shared/component-metadata.js +602 -0
  403. package/libs/instance-factories/views/templates/shared/component-metadata.js.map +1 -0
  404. package/libs/instance-factories/views/templates/shared/component-metadata.ts +803 -0
  405. package/libs/instance-factories/views/templates/shared/composite-pattern-types.ts +250 -0
  406. package/libs/instance-factories/views/templates/shared/composite-patterns.ts +535 -0
  407. package/libs/instance-factories/views/templates/shared/index.ts +68 -0
  408. package/libs/instance-factories/views/templates/shared/pattern-validator.ts +279 -0
  409. package/libs/instance-factories/views/templates/shared/property-mapper.d.ts +149 -0
  410. package/libs/instance-factories/views/templates/shared/property-mapper.d.ts.map +1 -0
  411. package/libs/instance-factories/views/templates/shared/property-mapper.js +580 -0
  412. package/libs/instance-factories/views/templates/shared/property-mapper.js.map +1 -0
  413. package/libs/instance-factories/views/templates/shared/property-mapper.ts +700 -0
  414. package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts +143 -0
  415. package/libs/instance-factories/views/templates/shared/syntax-mapper.d.ts.map +1 -0
  416. package/libs/instance-factories/views/templates/shared/syntax-mapper.js +420 -0
  417. package/libs/instance-factories/views/templates/shared/syntax-mapper.js.map +1 -0
  418. package/libs/instance-factories/views/templates/shared/syntax-mapper.ts +539 -0
  419. package/package.json +42 -0
  420. package/schema/SPECVERSE-SCHEMA.json +4274 -0
@@ -0,0 +1,704 @@
1
+ /**
2
+ * Universal Tailwind Adapter Generator
3
+ *
4
+ * Programmatically generates Tailwind CSS adapters for all 44 atomic component types
5
+ * using the ATOMIC_COMPONENTS registry from @specverse/lang as the single source of truth.
6
+ *
7
+ * Phase 3.5 - Option A: Quick Universal Adapter
8
+ */
9
+
10
+ import type { ComponentAdapter } from '@specverse/lang';
11
+
12
+ interface RenderContext {
13
+ properties?: Record<string, any>;
14
+ children?: string;
15
+ }
16
+
17
+ /**
18
+ * Generate basic Tailwind HTML markup for a component
19
+ */
20
+ function generateTailwindMarkup(
21
+ type: string,
22
+ properties: Record<string, any> = {},
23
+ children?: string
24
+ ): string {
25
+ const baseClasses = 'rounded border border-gray-200 dark:border-gray-700';
26
+
27
+ switch (type) {
28
+ // ==========================================
29
+ // DATA DISPLAY COMPONENTS
30
+ // ==========================================
31
+
32
+ case 'table':
33
+ return `
34
+ <div class="overflow-x-auto">
35
+ <table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
36
+ <thead class="bg-gray-50 dark:bg-gray-800">
37
+ <tr>
38
+ ${(properties.columns || []).map((col: string) =>
39
+ `<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider">${col}</th>`
40
+ ).join('')}
41
+ </tr>
42
+ </thead>
43
+ <tbody class="bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700">
44
+ ${children || '<tr><td class="px-6 py-4 text-sm text-gray-500 dark:text-gray-400" colspan="99">No data</td></tr>'}
45
+ </tbody>
46
+ </table>
47
+ </div>
48
+ `;
49
+
50
+ case 'list':
51
+ return `
52
+ <ul class="divide-y divide-gray-200 dark:divide-gray-700 ${properties.dense ? 'space-y-0' : 'space-y-2'}">
53
+ ${children || '<li class="p-4 text-gray-500 dark:text-gray-400">No items</li>'}
54
+ </ul>
55
+ `;
56
+
57
+ case 'grid':
58
+ const columns = properties.columns || 3;
59
+ return `
60
+ <div class="grid grid-cols-1 md:grid-cols-${columns} gap-${properties.gap || '4'}">
61
+ ${children || '<div class="p-4 text-gray-500 dark:text-gray-400">No items</div>'}
62
+ </div>
63
+ `;
64
+
65
+ case 'card':
66
+ const title = properties.title;
67
+ const elevation = properties.elevation || 1;
68
+ const shadowClass = elevation > 2 ? 'shadow-lg' : 'shadow-md';
69
+ const variant = properties.variant;
70
+ const metric = properties.metric;
71
+
72
+ // Metric card variant - shows a large number/stat
73
+ if (variant === 'metric') {
74
+ return `
75
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} ${shadowClass} p-6">
76
+ <div class="flex items-center justify-between">
77
+ <div>
78
+ <p class="text-sm font-medium text-gray-600 dark:text-gray-400 uppercase tracking-wide">
79
+ ${metric || title || 'Metric'}
80
+ </p>
81
+ <p class="mt-2 text-3xl font-semibold text-gray-900 dark:text-gray-100">
82
+ ${children || '—'}
83
+ </p>
84
+ ${properties.showTrend ? `
85
+ <p class="mt-2 text-sm text-green-600 dark:text-green-400">
86
+ <svg class="inline h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
87
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
88
+ </svg>
89
+ Trend data unavailable
90
+ </p>
91
+ ` : ''}
92
+ </div>
93
+ </div>
94
+ </div>
95
+ `;
96
+ }
97
+
98
+ // Regular card
99
+ return `
100
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} ${shadowClass} p-4">
101
+ ${title ? `<div class="font-semibold text-lg mb-2 text-gray-900 dark:text-gray-100">${title}</div>` : ''}
102
+ <div class="text-gray-700 dark:text-gray-300">
103
+ ${children || '<p class="text-sm text-gray-500 dark:text-gray-400">No data available</p>'}
104
+ </div>
105
+ </div>
106
+ `;
107
+
108
+ case 'chart':
109
+ return `
110
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-4">
111
+ <div class="flex items-center justify-center h-64 text-gray-500 dark:text-gray-400">
112
+ <div class="text-center">
113
+ <svg class="mx-auto h-12 w-12 text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
114
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
115
+ </svg>
116
+ <p class="mt-2 text-sm">Chart: ${properties.chartType || 'bar'}</p>
117
+ </div>
118
+ </div>
119
+ </div>
120
+ `;
121
+
122
+ case 'tree':
123
+ return `
124
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-4">
125
+ <div class="space-y-2">
126
+ ${children || '<div class="text-gray-500 dark:text-gray-400">Tree structure</div>'}
127
+ </div>
128
+ </div>
129
+ `;
130
+
131
+ case 'timeline':
132
+ return `
133
+ <div class="relative pl-8 space-y-4">
134
+ <div class="absolute left-3 top-0 h-full w-0.5 bg-gray-200 dark:bg-gray-700"></div>
135
+ ${children || '<div class="relative"><div class="absolute -left-6 w-3 h-3 rounded-full bg-blue-500"></div><div class="text-gray-700 dark:text-gray-300">Timeline item</div></div>'}
136
+ </div>
137
+ `;
138
+
139
+ case 'avatar':
140
+ const size = properties.size || 'md';
141
+ const sizeClass = size === 'sm' ? 'h-8 w-8' : size === 'lg' ? 'h-16 w-16' : 'h-12 w-12';
142
+ return `
143
+ <div class="${sizeClass} rounded-full bg-gray-300 dark:bg-gray-600 flex items-center justify-center text-gray-700 dark:text-gray-200 font-semibold">
144
+ ${children || properties.initials || '?'}
145
+ </div>
146
+ `;
147
+
148
+ case 'image':
149
+ return `
150
+ <img
151
+ src="${properties.src || '/placeholder.png'}"
152
+ alt="${properties.alt || 'Image'}"
153
+ class="rounded ${properties.responsive ? 'max-w-full h-auto' : ''}"
154
+ />
155
+ `;
156
+
157
+ // ==========================================
158
+ // FORMS & INPUTS
159
+ // ==========================================
160
+
161
+ case 'form':
162
+ return `
163
+ <form class="space-y-4">
164
+ ${children || '<div class="text-gray-500 dark:text-gray-400">Form fields</div>'}
165
+ </form>
166
+ `;
167
+
168
+ case 'input':
169
+ return `
170
+ <input
171
+ type="${properties.type || 'text'}"
172
+ placeholder="${properties.placeholder || ''}"
173
+ ${properties.required ? 'required' : ''}
174
+ class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200"
175
+ />
176
+ `;
177
+
178
+ case 'textarea':
179
+ return `
180
+ <textarea
181
+ rows="${properties.rows || 4}"
182
+ placeholder="${properties.placeholder || ''}"
183
+ class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200"
184
+ >${children || ''}</textarea>
185
+ `;
186
+
187
+ case 'select':
188
+ return `
189
+ <select class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200">
190
+ ${(properties.options || ['Option 1', 'Option 2']).map((opt: string) =>
191
+ `<option value="${opt}">${opt}</option>`
192
+ ).join('')}
193
+ </select>
194
+ `;
195
+
196
+ case 'checkbox':
197
+ return `
198
+ <label class="flex items-center space-x-2">
199
+ <input
200
+ type="checkbox"
201
+ ${properties.checked ? 'checked' : ''}
202
+ class="rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"
203
+ />
204
+ <span class="text-gray-700 dark:text-gray-300">${properties.label || children || 'Checkbox'}</span>
205
+ </label>
206
+ `;
207
+
208
+ case 'radio':
209
+ return `
210
+ <label class="flex items-center space-x-2">
211
+ <input
212
+ type="radio"
213
+ name="${properties.name || 'radio'}"
214
+ ${properties.checked ? 'checked' : ''}
215
+ class="border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"
216
+ />
217
+ <span class="text-gray-700 dark:text-gray-300">${properties.label || children || 'Radio'}</span>
218
+ </label>
219
+ `;
220
+
221
+ case 'slider':
222
+ return `
223
+ <input
224
+ type="range"
225
+ min="${properties.min || 0}"
226
+ max="${properties.max || 100}"
227
+ value="${properties.value || 50}"
228
+ class="w-full h-2 bg-gray-200 dark:bg-gray-700 rounded-lg appearance-none cursor-pointer"
229
+ />
230
+ `;
231
+
232
+ case 'switch':
233
+ return `
234
+ <label class="relative inline-flex items-center cursor-pointer">
235
+ <input type="checkbox" ${properties.checked ? 'checked' : ''} class="sr-only peer">
236
+ <div class="w-11 h-6 bg-gray-200 dark:bg-gray-700 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600"></div>
237
+ <span class="ml-3 text-sm font-medium text-gray-700 dark:text-gray-300">${properties.label || children || 'Toggle'}</span>
238
+ </label>
239
+ `;
240
+
241
+ case 'autocomplete':
242
+ return `
243
+ <div class="relative">
244
+ <input
245
+ type="text"
246
+ placeholder="${properties.placeholder || 'Start typing...'}"
247
+ class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200"
248
+ />
249
+ <div class="absolute z-10 w-full mt-1 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-md shadow-lg hidden">
250
+ <div class="p-2 text-sm text-gray-700 dark:text-gray-300">Suggestions will appear here</div>
251
+ </div>
252
+ </div>
253
+ `;
254
+
255
+ case 'datepicker':
256
+ return `
257
+ <input
258
+ type="date"
259
+ value="${properties.value || ''}"
260
+ class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200"
261
+ />
262
+ `;
263
+
264
+ case 'timepicker':
265
+ return `
266
+ <input
267
+ type="time"
268
+ value="${properties.value || ''}"
269
+ class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200"
270
+ />
271
+ `;
272
+
273
+ // ==========================================
274
+ // ACTIONS
275
+ // ==========================================
276
+
277
+ case 'button':
278
+ const btnVariant = properties.variant || 'primary';
279
+ const variantClasses: Record<string, string> = {
280
+ primary: 'bg-blue-600 hover:bg-blue-700 text-white',
281
+ secondary: 'bg-gray-600 hover:bg-gray-700 text-white',
282
+ success: 'bg-green-600 hover:bg-green-700 text-white',
283
+ danger: 'bg-red-600 hover:bg-red-700 text-white',
284
+ outline: 'border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800',
285
+ };
286
+ return `
287
+ <button class="px-4 py-2 rounded font-medium transition-colors ${variantClasses[btnVariant] || variantClasses.primary}">
288
+ ${children || properties.label || 'Button'}
289
+ </button>
290
+ `;
291
+
292
+ case 'button-group':
293
+ const orientation = properties.orientation || 'horizontal';
294
+ const spacing = properties.spacing || 2;
295
+ const buttons = properties.buttons || [];
296
+ return `
297
+ <div class="flex ${orientation === 'horizontal' ? 'flex-row' : 'flex-col'} gap-${spacing}">
298
+ ${buttons.map((btn: any) => {
299
+ const btnVariant = btn.variant || btn.color || 'primary';
300
+ const btnVariantClasses: Record<string, string> = {
301
+ primary: 'bg-blue-600 hover:bg-blue-700 text-white',
302
+ secondary: 'bg-gray-600 hover:bg-gray-700 text-white',
303
+ contained: 'bg-blue-600 hover:bg-blue-700 text-white',
304
+ outlined: 'border border-blue-600 text-blue-600 hover:bg-blue-50 dark:border-blue-400 dark:text-blue-400',
305
+ text: 'text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/30',
306
+ default: 'bg-gray-200 hover:bg-gray-300 text-gray-800 dark:bg-gray-700 dark:hover:bg-gray-600 dark:text-gray-200'
307
+ };
308
+ return `
309
+ <button class="inline-flex items-center justify-center rounded font-medium transition-colors px-4 py-2 ${btnVariantClasses[btnVariant] || btnVariantClasses.primary}">
310
+ ${btn.icon ? `<span class="mr-2">⚡</span>` : ''}${btn.label || 'Button'}
311
+ </button>
312
+ `;
313
+ }).join('')}
314
+ </div>
315
+ `;
316
+
317
+ case 'filterPanel':
318
+ const filters = properties.filters || [];
319
+ return `
320
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-4">
321
+ <div class="font-semibold text-sm mb-4 text-gray-900 dark:text-gray-100">Filters</div>
322
+ <div class="space-y-3">
323
+ ${filters.map((filter: any) => {
324
+ return `
325
+ <div>
326
+ <label class="block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1">${filter.label}</label>
327
+ ${filter.type === 'select'
328
+ ? `<select class="block w-full rounded border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100">
329
+ ${(filter.options || []).map((opt: string) => `<option>${opt}</option>`).join('')}
330
+ </select>`
331
+ : `<input type="text" placeholder="Filter by ${filter.field}" class="block w-full rounded border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100" />`
332
+ }
333
+ </div>
334
+ `;
335
+ }).join('')}
336
+ </div>
337
+ </div>
338
+ `;
339
+
340
+ case 'link':
341
+ return `
342
+ <a href="${properties.href || '#'}" class="text-blue-600 dark:text-blue-400 hover:underline">
343
+ ${children || properties.label || 'Link'}
344
+ </a>
345
+ `;
346
+
347
+ case 'icon':
348
+ return `
349
+ <svg class="h-${properties.size || 6} w-${properties.size || 6} text-gray-600 dark:text-gray-400" fill="none" viewBox="0 0 24 24" stroke="currentColor">
350
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" />
351
+ </svg>
352
+ `;
353
+
354
+ case 'menu':
355
+ return `
356
+ <div class="relative">
357
+ <button class="px-4 py-2 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-md">
358
+ ${properties.label || 'Menu'}
359
+ </button>
360
+ <div class="absolute z-10 mt-2 w-48 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-md shadow-lg hidden">
361
+ ${children || '<div class="p-2 text-sm text-gray-700 dark:text-gray-300">Menu items</div>'}
362
+ </div>
363
+ </div>
364
+ `;
365
+
366
+ // ==========================================
367
+ // OVERLAYS & FEEDBACK
368
+ // ==========================================
369
+
370
+ case 'modal':
371
+ return `
372
+ <div class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden">
373
+ <div class="bg-white dark:bg-gray-800 rounded-lg p-6 max-w-lg w-full">
374
+ ${properties.title ? `<h3 class="text-lg font-semibold mb-4 text-gray-900 dark:text-gray-100">${properties.title}</h3>` : ''}
375
+ <div class="text-gray-700 dark:text-gray-300">
376
+ ${children || 'Modal content'}
377
+ </div>
378
+ </div>
379
+ </div>
380
+ `;
381
+
382
+ case 'dialog':
383
+ return `
384
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-6 max-w-md">
385
+ ${properties.title ? `<h3 class="text-lg font-semibold mb-4 text-gray-900 dark:text-gray-100">${properties.title}</h3>` : ''}
386
+ <div class="text-gray-700 dark:text-gray-300 mb-4">
387
+ ${children || 'Dialog content'}
388
+ </div>
389
+ <div class="flex justify-end space-x-2">
390
+ <button class="px-4 py-2 border border-gray-300 dark:border-gray-600 rounded-md text-gray-700 dark:text-gray-300">Cancel</button>
391
+ <button class="px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-md">OK</button>
392
+ </div>
393
+ </div>
394
+ `;
395
+
396
+ case 'drawer':
397
+ return `
398
+ <div class="fixed inset-y-0 right-0 w-64 bg-white dark:bg-gray-800 border-l border-gray-200 dark:border-gray-700 shadow-xl transform translate-x-full transition-transform">
399
+ ${properties.title ? `<h3 class="text-lg font-semibold p-4 border-b border-gray-200 dark:border-gray-700 text-gray-900 dark:text-gray-100">${properties.title}</h3>` : ''}
400
+ <div class="p-4 text-gray-700 dark:text-gray-300">
401
+ ${children || 'Drawer content'}
402
+ </div>
403
+ </div>
404
+ `;
405
+
406
+ case 'popover':
407
+ return `
408
+ <div class="absolute z-10 bg-white dark:bg-gray-800 ${baseClasses} shadow-lg p-3 hidden">
409
+ ${children || '<div class="text-sm text-gray-700 dark:text-gray-300">Popover content</div>'}
410
+ </div>
411
+ `;
412
+
413
+ case 'tooltip':
414
+ return `
415
+ <span class="relative group">
416
+ <span class="absolute bottom-full mb-2 hidden group-hover:block px-2 py-1 bg-gray-900 dark:bg-gray-700 text-white text-xs rounded whitespace-nowrap">
417
+ ${properties.content || children || 'Tooltip'}
418
+ </span>
419
+ ${properties.trigger || '?'}
420
+ </span>
421
+ `;
422
+
423
+ case 'alert':
424
+ const alertVariant = properties.variant || 'info';
425
+ const alertClasses: Record<string, string> = {
426
+ info: 'bg-blue-50 dark:bg-blue-900/30 border-blue-200 dark:border-blue-700 text-blue-800 dark:text-blue-200',
427
+ success: 'bg-green-50 dark:bg-green-900/30 border-green-200 dark:border-green-700 text-green-800 dark:text-green-200',
428
+ warning: 'bg-yellow-50 dark:bg-yellow-900/30 border-yellow-200 dark:border-yellow-700 text-yellow-800 dark:text-yellow-200',
429
+ error: 'bg-red-50 dark:bg-red-900/30 border-red-200 dark:border-red-700 text-red-800 dark:text-red-200',
430
+ };
431
+ return `
432
+ <div class="p-4 border rounded ${alertClasses[alertVariant] || alertClasses.info}">
433
+ ${children || properties.message || 'Alert message'}
434
+ </div>
435
+ `;
436
+
437
+ case 'snackbar':
438
+ return `
439
+ <div class="fixed bottom-4 right-4 bg-gray-900 dark:bg-gray-700 text-white px-4 py-3 rounded-md shadow-lg hidden">
440
+ ${children || properties.message || 'Notification'}
441
+ </div>
442
+ `;
443
+
444
+ case 'badge':
445
+ const badgeVariant = properties.variant || 'default';
446
+ const badgeClasses: Record<string, string> = {
447
+ default: 'bg-gray-100 dark:bg-gray-700 text-gray-800 dark:text-gray-200',
448
+ primary: 'bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200',
449
+ success: 'bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200',
450
+ warning: 'bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200',
451
+ danger: 'bg-red-100 dark:bg-red-900 text-red-800 dark:text-red-200',
452
+ };
453
+ return `
454
+ <span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${badgeClasses[badgeVariant] || badgeClasses.default}">
455
+ ${children || properties.label || 'Badge'}
456
+ </span>
457
+ `;
458
+
459
+ case 'spinner':
460
+ return `
461
+ <div class="animate-spin rounded-full h-${properties.size || 8} w-${properties.size || 8} border-b-2 border-blue-600 dark:border-blue-400"></div>
462
+ `;
463
+
464
+ // ==========================================
465
+ // NAVIGATION
466
+ // ==========================================
467
+
468
+ case 'tabs':
469
+ return `
470
+ <div>
471
+ <div class="border-b border-gray-200 dark:border-gray-700">
472
+ <nav class="flex space-x-4">
473
+ ${(properties.tabs || ['Tab 1', 'Tab 2']).map((tab: string, i: number) =>
474
+ `<button class="px-4 py-2 ${i === 0 ? 'border-b-2 border-blue-600 text-blue-600' : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-gray-200'}">${tab}</button>`
475
+ ).join('')}
476
+ </nav>
477
+ </div>
478
+ <div class="mt-4">
479
+ ${children || 'Tab content'}
480
+ </div>
481
+ </div>
482
+ `;
483
+
484
+ case 'breadcrumb':
485
+ return `
486
+ <nav class="flex" aria-label="Breadcrumb">
487
+ <ol class="inline-flex items-center space-x-1 md:space-x-3">
488
+ ${(properties.items || ['Home', 'Page']).map((item: string, i: number) =>
489
+ `<li class="inline-flex items-center">
490
+ ${i > 0 ? '<svg class="w-3 h-3 text-gray-400 mx-1" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path></svg>' : ''}
491
+ <span class="text-gray-700 dark:text-gray-300">${item}</span>
492
+ </li>`
493
+ ).join('')}
494
+ </ol>
495
+ </nav>
496
+ `;
497
+
498
+ case 'navbar':
499
+ return `
500
+ <nav class="bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700">
501
+ <div class="px-4 py-3 flex items-center justify-between">
502
+ <div class="text-lg font-semibold text-gray-900 dark:text-gray-100">${properties.brand || 'Brand'}</div>
503
+ <div class="flex space-x-4">
504
+ ${children || '<a class="text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100">Link</a>'}
505
+ </div>
506
+ </div>
507
+ </nav>
508
+ `;
509
+
510
+ case 'sidebar':
511
+ return `
512
+ <aside class="w-64 bg-white dark:bg-gray-800 border-r border-gray-200 dark:border-gray-700 h-full">
513
+ <div class="p-4">
514
+ ${children || '<div class="text-gray-700 dark:text-gray-300">Sidebar content</div>'}
515
+ </div>
516
+ </aside>
517
+ `;
518
+
519
+ case 'pagination':
520
+ const currentPage = properties.currentPage || 1;
521
+ const totalPages = properties.totalPages || 5;
522
+ return `
523
+ <nav class="flex items-center justify-center space-x-2">
524
+ <button class="px-3 py-1 border border-gray-300 dark:border-gray-600 rounded-md text-gray-700 dark:text-gray-300" ${currentPage === 1 ? 'disabled' : ''}>Previous</button>
525
+ ${Array.from({ length: totalPages }, (_, i) => i + 1).map(page =>
526
+ `<button class="px-3 py-1 ${page === currentPage ? 'bg-blue-600 text-white' : 'border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300'} rounded-md">${page}</button>`
527
+ ).join('')}
528
+ <button class="px-3 py-1 border border-gray-300 dark:border-gray-600 rounded-md text-gray-700 dark:text-gray-300" ${currentPage === totalPages ? 'disabled' : ''}>Next</button>
529
+ </nav>
530
+ `;
531
+
532
+ // ==========================================
533
+ // LAYOUT
534
+ // ==========================================
535
+
536
+ case 'accordion':
537
+ return `
538
+ <div class="space-y-2">
539
+ ${(properties.items || ['Item 1']).map((item: string) =>
540
+ `<div class="border border-gray-200 dark:border-gray-700 rounded-md">
541
+ <button class="w-full px-4 py-3 text-left font-medium text-gray-900 dark:text-gray-100 hover:bg-gray-50 dark:hover:bg-gray-800">
542
+ ${item}
543
+ </button>
544
+ <div class="px-4 py-3 text-gray-700 dark:text-gray-300 hidden">
545
+ Content for ${item}
546
+ </div>
547
+ </div>`
548
+ ).join('')}
549
+ </div>
550
+ `;
551
+
552
+ case 'carousel':
553
+ return `
554
+ <div class="relative">
555
+ <div class="overflow-hidden rounded-lg">
556
+ ${children || '<div class="bg-gray-200 dark:bg-gray-700 h-64 flex items-center justify-center text-gray-500 dark:text-gray-400">Slide 1</div>'}
557
+ </div>
558
+ <button class="absolute left-2 top-1/2 -translate-y-1/2 bg-white dark:bg-gray-800 rounded-full p-2 shadow">←</button>
559
+ <button class="absolute right-2 top-1/2 -translate-y-1/2 bg-white dark:bg-gray-800 rounded-full p-2 shadow">→</button>
560
+ </div>
561
+ `;
562
+
563
+ case 'container':
564
+ return `
565
+ <div class="container mx-auto px-4 ${properties.maxWidth ? `max-w-${properties.maxWidth}` : ''}">
566
+ ${children || 'Container content'}
567
+ </div>
568
+ `;
569
+
570
+ case 'divider':
571
+ return `
572
+ <hr class="border-gray-200 dark:border-gray-700 ${properties.spacing ? `my-${properties.spacing}` : 'my-4'}" />
573
+ `;
574
+
575
+ case 'header':
576
+ return `
577
+ <header class="bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-4 py-3">
578
+ <h1 class="text-2xl font-bold text-gray-900 dark:text-gray-100">
579
+ ${children || properties.title || 'Header'}
580
+ </h1>
581
+ </header>
582
+ `;
583
+
584
+ case 'footer':
585
+ return `
586
+ <footer class="bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 px-4 py-6">
587
+ <div class="text-center text-gray-600 dark:text-gray-400">
588
+ ${children || properties.text || 'Footer content'}
589
+ </div>
590
+ </footer>
591
+ `;
592
+
593
+ // ==========================================
594
+ // COMPOSITE/SEMANTIC TYPES (from inference)
595
+ // ==========================================
596
+
597
+ case 'content':
598
+ // Content is a card-like display of labeled fields (detail view)
599
+ // Fields should be passed in properties.fields array
600
+ const fields = properties.fields || [];
601
+ if (fields.length === 0) {
602
+ return `
603
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-6">
604
+ <p class="text-gray-500 dark:text-gray-400">No content defined</p>
605
+ </div>
606
+ `;
607
+ }
608
+
609
+ // Render as card with labeled fields (like a read-only form)
610
+ const fieldRows = fields.map((field: string) => `
611
+ <div class="py-3 border-b border-gray-200 dark:border-gray-700 last:border-0">
612
+ <dt class="text-sm font-medium text-gray-500 dark:text-gray-400 mb-1">${field}</dt>
613
+ <dd class="text-base text-gray-900 dark:text-gray-100">
614
+ <span class="data-field" data-field="${field}">-</span>
615
+ </dd>
616
+ </div>
617
+ `).join('');
618
+
619
+ return `
620
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-6">
621
+ <dl class="space-y-0">
622
+ ${fieldRows}
623
+ </dl>
624
+ </div>
625
+ `;
626
+
627
+ case 'profile':
628
+ return `
629
+ <div class="bg-white dark:bg-gray-800 ${baseClasses} p-6">
630
+ <div class="flex items-center space-x-4">
631
+ <div class="flex-shrink-0">
632
+ <div class="h-16 w-16 rounded-full bg-blue-500 flex items-center justify-center text-white text-xl font-bold">
633
+ ${properties.name ? properties.name.charAt(0).toUpperCase() : 'U'}
634
+ </div>
635
+ </div>
636
+ <div class="flex-1 min-w-0">
637
+ <p class="text-lg font-semibold text-gray-900 dark:text-gray-100">
638
+ ${properties.name || 'User Profile'}
639
+ </p>
640
+ ${properties.bio ? `<p class="text-sm text-gray-600 dark:text-gray-400">${properties.bio}</p>` : ''}
641
+ ${properties.email ? `<p class="text-sm text-gray-500 dark:text-gray-500">${properties.email}</p>` : ''}
642
+ </div>
643
+ </div>
644
+ ${children || ''}
645
+ </div>
646
+ `;
647
+
648
+ // ==========================================
649
+ // FALLBACK
650
+ // ==========================================
651
+
652
+ default:
653
+ return `
654
+ <div class="p-4 bg-orange-50 dark:bg-orange-900/30 border border-orange-200 dark:border-orange-700 rounded">
655
+ <p class="text-sm text-orange-800 dark:text-orange-200">
656
+ Component type "${type}" renderer not yet implemented
657
+ </p>
658
+ ${properties ? `<pre class="text-xs text-orange-600 dark:text-orange-400 mt-2">${JSON.stringify(properties, null, 2)}</pre>` : ''}
659
+ </div>
660
+ `;
661
+ }
662
+ }
663
+
664
+ /**
665
+ * Create a universal Tailwind adapter for all 44 atomic component types
666
+ */
667
+ export function createUniversalTailwindAdapter(): ComponentAdapter {
668
+ // List of all 44 atomic component types from ATOMIC_COMPONENTS registry
669
+ // Plus 4 composite/semantic types (button-group, filterPanel, content, profile) from inference
670
+ const componentTypes = [
671
+ // Data Display (9)
672
+ 'table', 'list', 'grid', 'card', 'chart', 'tree', 'timeline', 'avatar', 'image',
673
+ // Forms & Inputs (11)
674
+ 'form', 'input', 'textarea', 'select', 'checkbox', 'radio', 'slider', 'switch', 'autocomplete', 'datepicker', 'timepicker',
675
+ // Actions (4 + 1 composite)
676
+ 'button', 'link', 'icon', 'menu', 'button-group',
677
+ // Overlays & Feedback (9)
678
+ 'modal', 'dialog', 'drawer', 'popover', 'tooltip', 'alert', 'snackbar', 'badge', 'spinner',
679
+ // Navigation (5)
680
+ 'tabs', 'breadcrumb', 'navbar', 'sidebar', 'pagination',
681
+ // Layout (6 + 1 composite)
682
+ 'accordion', 'carousel', 'container', 'divider', 'header', 'footer', 'filterPanel',
683
+ // Semantic/Composite (2 from inference)
684
+ 'content', 'profile'
685
+ ];
686
+
687
+ const components: Record<string, { render: (context: RenderContext) => string }> = {};
688
+
689
+ // Generate render function for each component type
690
+ componentTypes.forEach(type => {
691
+ components[type] = {
692
+ render: ({ properties = {}, children }: RenderContext) => {
693
+ return generateTailwindMarkup(type, properties, children);
694
+ }
695
+ };
696
+ });
697
+
698
+ return {
699
+ name: 'tailwind-universal',
700
+ version: '1.0.0',
701
+ description: 'Universal Tailwind CSS adapter for all 44 atomic component types',
702
+ components
703
+ };
704
+ }